Technology Blogs by SAP
Learn how to extend and personalize SAP applications. Follow the SAP technology blog for insights into SAP BTP, ABAP, SAP Analytics Cloud, SAP HANA, and more.
cancel
Showing results for 
Search instead for 
Did you mean: 
ArthurYang
Product and Topic Expert
Product and Topic Expert
0 Kudos

本文内容来源于我对SPA的理解,是基于汇率抓取入门练习和优化练习的结果做出的进一步讲解。

 

如果您对BTP感兴趣,BTP个人精选内容目录 | SAP Blogs  可能有更多你需要的内容

 

在完成前两篇练习之后,您已经初步熟悉了界面和一些基本操作,接下来我们再多定义几个元素和屏幕来让您快速了解一下原理。

 

1.外汇管理局首页元素抓取

之前的练习中我们只用到了外汇管理局首页的一些元素,如果之前没有抓取过,这里我们先额外抓取一个时政要闻按钮:

打开我们已经抓取好的界面: 外汇管理局system – 国家外汇管理局门户网站(自动填写的屏幕名称)

中间有三个选项”屏幕”,”两者”,”树”,点进”屏幕”选项,在页面截图中单击左侧中间的”时政要闻”按钮,该元素就会在图片中被一个绿色框框柱,右侧就会显示“元素详细信息”,并且右侧的”识别条件”中自动出现了一个条件 [Text等于 时政要闻],并提示”已唯一标识元素”

对于这样的元素,我们直接单击页面右下角的”声明元素”,即可将其保存到左下角的”已声明元素”,之后机器人在寻找该元素时就会根据[Text等于 时政要闻]来找,而页面内只有一个元素是符合条件的

 

再抓取一个外汇新闻按钮:

在同一个界面的屏幕截图中,单击”时政要闻”右侧的”外汇新闻”右侧会显示“元素详细信息“,”识别条件”下自动选用的条件是[Text等于 外汇新闻],而这时候的提示则是黄色的”已标识2个元素”,为什么和时政要闻不一样呢?这是因为符合[Text等于 外汇新闻]的元素有两个。

看看屏幕截图,可以看到第二个元素在屏幕截图的左上部位,而这个元素也是一个A标签,它的Text也是”外汇新闻”,那我们怎么区分他们两个呢?

 

首先,经过实际点击,可以发现点击两个元素的效果是一样的,都会打开新页面,所以我们可以直接将这两个元素声明为一个集合(因为点哪个都一样),单击”识别条件”右下方的”三个三角形”按钮,之后就会提示”已唯一标识集合”,之后在使用Click控件调用时填写一个序号1即可(因为Click控件只能针对单个元素,所以序号1就代表着在集合中选定第1个元素来执行Click操作)

 

其次,如果需要区分开两个元素,我们可以看看其他的”可用条件”,能不能额外区分他们俩,

最后,如果两个元素完全无法区分,我们将界面中间的”两者”打开,可以观察到我们的目标元素归属在一个LI下,先尝试右击该LI – “添加到条件”,会发现为目标元素自动添加了一个识别条件[Text等于 外汇新闻]的父项, 但是发现还是无法唯一识别,这是因为另一个元素也有一个这样的父项,


但是我们发现,另一个元素的直接父项不是LI,而是隔了一个H3才到LI, 那么我们就可以点击 ”识别条件” – 父项条件 右侧的三个点,选择”直接父项”,这样就可以唯一识别了

亦或者右击目标元素上两层的UL,使用它作为父项条件,因为另一个元素没有符合[Text 等于 时政要闻外汇新闻]的UL父项,这样也可以唯一识别

最后单击右下角的”声明元素”即可

 

2.时政要闻页面抓取

先手动在外汇管理局页面单击时政要闻按钮,进入新页面

再在开发界面,点开左上角的小照相机,将这个新页面抓取下来,新页面会自动使用一个[URL等于https://www.safe.gov.cn/safe/szyw/index.html] 作为识别条件,这样就和旧屏幕区分开了,

但是在其他系统内,如果URL无法区分怎么办呢?首先,和元素一样,我们先尝试其他识别条件,例如这里我们就可以把URL条件删掉,从”可用条件”中选择TITLE条件,因为这两个屏幕的TITLE很明显不同,

而有的系统,屏幕就是多形态的,都是在同一个URL下变化,那么这些屏幕都可以作为同一个屏幕的不同捕获而存在,单击屏幕右侧的三个点 - ”将捕获添加到当前屏幕” 即可

 

3.全流程细节讲解

结合我们入门练习的结果,在执行时,

1.第一个控件是Start Application,针对的对象是”外汇管理局system”,那么实际上机器人会启动“应用程序 - 左侧”已声明应用程序”下第一条 – 右侧应用程序详细信息 – 高级 – 应用程序路径”内的URL,也就是自动识别出来的 http://www.safe.gov.cn/

2.Open excel instance会打开一个excel程序

3.Add workbook会打开一个未保存的空白excel

4.Push Value会将输入值”塞入”当前打开着的excel workbook,而这个”塞入”的行位置则是最后一行内容的行序号+1, 列位置则是从0开始,简单理解就是塞到最后面,而对步骤3打开的新workbook自然就是第一排从第一列开始,塞入” ['金额1', '币种1', '金额2', '币种2']”这四个值

5.For each针对的是一个元素集合,符合两个条件的元素会被认为属于集合:[其归属于[id等于rmb_query]的UL下],以及[其本身类型为LI]

所以机器人会先找到所有[id等于rmb+query]的UL,然后在这些UL下找到所有LI

集合确定之后,就会根据For each内的操作对集合内元素依次执行操作:Get Element获取元素字符值,将Get Element的输出Push到当前打开的excel文件内

6.如果你抓取并点击了” 时政要闻”按钮,那么机器人会找到唯一一个字符值为”时政要闻”的按钮,进行点击

7.如果你抓取并点击了”外汇新闻”按钮,机器人也会按照条件找到元素并点击

(关于每个控件的官方解释文档:在搜索控件窗口,每个控件的右边都有"惊叹号",点开里面有"打开文档"

 

4.深度概念讲解:

机器人在启动运行后,会按照”自动化”项目中定义的流程去顺序执行动作,

如果动作涉及屏幕和元素,机器人就会在当前电脑上寻找目标屏幕/元素,例如寻找应用程序AppA的ScreenB屏幕内的ElementC, 寻找的过程如下所述:

1.列出当前电脑打开的所有屏幕,确认这些屏幕中有哪些符合AppA的识别条件

(在应用程序界面,单击左侧”已声明应用程序”下第一条后,右侧会显示”应用程序详细信息”,该部分就有”识别条件”,旧条件不够用的话就,点击”识别条件”的下方”可用条件”就可以添加新条件

(例如[EXE等于SAPLOGON.EXE]就可以识别SAP GUI程序,[DOMAIN等于www.baidu.com] 就可以识别出所有URLwww.baidu开头的网页)

­

这一步可以在所有屏幕中圈出一批备选

 

2.将这些备选屏幕的参数和ScreenB的识别条件进行匹配,找出哪一个是ScreenB

(在应用程序界面内,单击左侧的目标屏幕名,右侧会显示”屏幕详细信息”,该部分就包含了”识别条件”,旧条件不够用的话就,点击”识别条件”的下方”可用条件”就可以添加新条件)

(例如[Name等于SAP Logon 770]一般对应着打开SAPLOGON之后出现的第一个选择系统的屏幕,[Name 等于SAP 轻松访问 -  用户菜单 - XXX]的一般对应着完成SAP登录后的第一个界面)

 

这一步可以唯一确认屏幕

 

3.最后则是在确认的屏幕中,将所有元素和ElementC的识别条件进行匹配

(在应用程序界面内,单击左侧的目标屏幕名,再单击左下角”已声明元素”下的目标元素,就会在右边看到”元素详细信息”,该部分就包含了”识别条件”,旧条件不够用的话就,点击”识别条件”的下方”可用条件”就可以添加新条件)

这一步可以找到动作的唯一执行对象,最后再具体对这个对象完成动作

(例如”自动化”中的Click控件就是一个点击动作)

 

 

解读:

机器人在实际运行中,可能会看到一批各种各样的屏幕,但是机器人需要唯一确定它要操作的屏幕,所以需要检测所有屏幕,但这样工作量太大,

所以RPA用”应用程序”的概念来先将屏幕们分群,而符合该”应用程序”标准的屏幕们就会归于一群,这个标准一般也可以拿来衡量这些屏幕是否属于”同一个系统”

例如”exe 等于 SAPLogon.exe”这个标准就可以用于定义SAP GUI系统的所有屏幕,”DOMAIN  等于www.safe.gov.cn”就可以定义外汇管理局网页系统的所有屏幕

点击”应用程序”内的第一行(即”应用程序”本身,也是左侧”已声明应用程序”下第一条),就可以在右侧看到该”应用程序”的识别条件(如下图),

 

 

而屏幕内不同元素之间,首先可以尝试根据Name, text, ID等常见参数作为识别条件,同时也可以把”等于”修改成”包含”,或者”开始于”等条件,来用单一参数识别,如果右侧显示”已唯一识别元素”则有可能就识别成功了

单一参数无法识别时,我们可以用多参数识别,每一个参数都可以用来缩小范围

当有两个十分相似,参数也基本一模一样的元素无法识别时,可以把这两个元素声明为一个集合,在每次操作时针对该集合的第X个元素操作,也可以达到效果

 

5.常见问题Q&A

Q: 页面明明是在这个系统打开的,为什么不符合应用程序的识别条件?

例如SAP GUI系统的弹窗,有些时候使用的是windows的弹窗,其exe不等于SAPLogon.exe,故而无法用常见的[ EXE 等于 SAPLOGON.EXE ]来判断。这个时候可以找别的条件添加到应用程序的识别条件内,用”或”来和原有的识别条件并列,以将目标页面纳入范围

当然也可以为目标页面单独建一个应用程序

 

Q: 两个页面参数基本一致,无法唯一区分:

首先需要确认这不同页面内的元素有没有区别,如果没有区别的话可以直接当同一个页面,或者一个页面的多个捕获来使用,例如有时从SAP导出文件时会弹出多次GUI安全性提示,尽管这几次提示的文字略有区别,但是元素基本没有区别,故可以当做同一个屏幕

如果元素有区别,则可以定义有区别的元素,并为其赋予”必须存在”和”必须不存在”条件,来辅助页面识别,当机器人利用识别条件无法分辨两个屏幕时,就会通过检查”必须存在”的元素是否存在,来判断要操作的是哪个屏幕

 

Q: 页面中看见了很多元素,但是抓取时无法选中这些元素,选中的是一个iframe

iframe其实可能是因为你看到的这部分网页元素其实来自其他URL地址,所以我们可以单独将这个iframe作为一个screen进行抓取:在页面抓取器里找到主页面,左侧可能有箭头,点开去找目标元素位置所在的子页面,并进行抓取

 

Q:Get used Range Row有什么用?

Get used Range Row控件会获取到当前打开着的excel workbook最后一行内容的行序号

 

Q:电脑自动打开的Excel无法关闭页面怎么办?

excel instance代表的是excel这个app

机器人并不知道电脑有没有自行打开instance和workbook、但是可以通过get open workbook list检测当前有哪些workbook是打开的,

该控件返回值为当前打开着的workbook名字的列表”workbookList”,而如果电脑当前只有一个新打开的workbook,这样” workbookList[0]”就是电脑当前workbook的名字了

而Get excel instance就可以通过workbook名字获取instance,最后再恢复正常的close workbook和close instance 操作

 

Q: 怎么模拟键盘按键?

选用控件keystroke,在输入值的表达式页面填入irpa_core.enums.key,再输入一个点 . 就会提示各种键盘按钮,例如Enter

如果需要同时按下多个按钮,例如ctrl+enter+P,需在表达式页面填入[irpa_core.enums.key.Ctrl+irpa_core.enums.key.Enter + ’P’]

 

6.一点开发小技巧:

在测试运行流程时,左侧会有测试运行的记录,每一步的输入与输出都可以在点选中后从右侧的”测试”部分看到,测试运行还可以打断点,来更好的查看每一步的变化

 

而开始测试运行前,如果担心页面识别条件设置不准确,可以在抓取页面的地方左上角启动页面测试器,再启动要检测的屏幕,来看看页面和元素是否真正能被识别

 

对于页面测试器检测到了的屏幕和元素,还可以直接在页面测试器里调用控件,执行动作,通过查看返回值以及屏幕是否发生变化来判断该控件是否正确使用了,例如下图,可以对时政要闻元素执行Click操作来观察结果

 

关于本文内容有任何问题或见解,欢迎在评论区留下你的想法,如果需要帮助,也可以直接联系到我 arthuryang1996@foxmail.com,感谢你的时间

 

ArthurYang_15-1706324819934.png

ArthurYang_14-1706324819917.png

ArthurYang_13-1706324819915.png

ArthurYang_12-1706324819912.png

ArthurYang_11-1706324819909.png

ArthurYang_10-1706324819904.png

ArthurYang_9-1706324819895.png

ArthurYang_8-1706324819889.png