UiPath不能稳定点击IE下载通知条“保存”按钮旁小三角按钮的问题

转载注意:本文由思想瞭望者于2020年7月3日首发于博客园,转载请注明出处!安全

 

现象:用UiPath自动操纵IE下载文件另存为时,许多同行遇到不能稳定点击“保存”按钮旁边的小三角按钮的问题。如方图1红框所示。服务器

红框中的小三角按钮令许多同行头痛

(图1:小三角按钮)app

 

缘由:IE的下载通知条其实有两种状态,一是常见的“通知”(如图2),二是“警报”(如图3)。当咱们用UiPath在IE点击一个网页的下载连接,会先弹出“下载通知”,而后“下载通知”有可能很快转变成“下载警报”。对于UiPath来讲已是两个下载通知条了(只是外观相近而已),可是人眼看起来好像按钮仍是那个按钮,除了底色在黄白间渐变,并无感受到什么不一样。工具

 下载通知

 

 

 

(图2:下载通知)测试

 

下载警报

 

 

 (图3:下载警报)优化

 

多数时候“下载通知”和“下载警报”的完整Selector是相同的,但有时候两者会有细微然而关键的差别致使UiPath难以稳定点击那个小三角按钮。spa

有趣的是,一方面下载通知条的“警报”状态每每很是短暂,容易被人无心中忽略。另外一方面,当下载通知条处于“警报”状态时,光标移到上面会令它瞬间转变为“通知”状态,因而难以经过Indicate on screen (UiPath Studio)或者Indicate Element(UI Explorer)捕捉到“警报”状态的对应Selector。设计

许多人不知道IE的这个行为,觉得二者是一个东西。因此针对“下载通知”优化了Selector以后,一旦出现“下载警报”便会报错报异常,因而再想办法针对“下载警报”调整Selector,结果又致使“下载通知”不能稳定点击了,就显得一头雾水摸不着方向。code

有的人利用两个状态容易互相转化的特色,有许多土办法来完成这个点击动做,包括但不限于:blog

  • 连续尝试单击那个小三角直至点击成功(用Retry Scope或者While/Do While),实际上是他们的Selector只能处理其中一种状况,因此他们就不断重试直到下载通知条对应的状态出现。
  • 让光标先滑过下载通知条(用Hover),使下载通知条直接进入“下载通知”状态。

这些我认为只能视为Work around,而不是针对问题的Solution。

下面给你们展现一下我能够提供的线索。

首先以个人笔记本为例。环境信息以下:

系统信息

 

 

 (图4:笔记本系统信息)

 

IE版本信息

 

 

 (图5:IE版本信息)

 

网页所处安全区域及区域安全级别

 

 

 (图6:网页所处安全区域及区域安全级别)

 

在笔记本环境下,对于同一个下载连接,不论出现的是“下载通知”仍是“下载警告”,我都捕获到了同样的完整Selector。所以在个人笔记本上,对于这个下载连接我能够写出一个通用的Selector来覆盖所有下载场景。

1 <wnd app='iexplore.exe' cls='IEFrame' title='邮件 - XX XXXXXX - Outlook - Internet Explorer' aastate='可调大小, 可移动, 可设定焦点' />
2 <wnd cls='Frame Notification Bar' aastate='可设定焦点' />
3 <wnd aaname='通知' cls='DirectUIHWND' />
4 <ctrl automationid='IENotificationBar' name='通知' role='tool bar' text='通知' />
5 <ctrl name='保存' role='split button' text='保存' />
6 <ctrl name='6' role='drop down button' text='6' />

 

可是在个人服务器上,我观察到IE有不同的行为。服务器的环境信息以下。

系统信息

 

 

 (图7:系统信息)

 

IE版本信息

 

 

 (图8:IE版本信息)

 

网页所处安全区域及区域安全级别

 

 

 (图9:网页所处安全区域及区域安全级别)

 

当出现“下载通知”时,小三角按钮的完整Selector以下。

1 <wnd app='iexplore.exe' cls='IEFrame' title='邮件 - XXXXXXXXXX@cn.gt.com - Internet Explorer' aastate='可调大小, 可移动, 可设定焦点' />
2 <wnd cls='Frame Notification Bar' aastate='可设定焦点' />
3 <wnd aaname='通知' cls='DirectUIHWND' />
4 <ctrl automationid='IENotificationBar' name='通知' role='tool bar' text='通知' />
5 <ctrl name='保存' role='split button' text='保存' />
6 <ctrl role='drop down button' />

而出现“下载警报”时,小三角按钮的完整Selector以下。

1 <wnd app='iexplore.exe' cls='IEFrame' title='邮件 - XXXXXXXXXX@cn.gt.com - Internet Explorer' aastate='可调大小, 可移动, 可设定焦点' />
2 <wnd cls='Frame Notification Bar' aastate='可设定焦点' />
3 <wnd aaname='通知' cls='DirectUIHWND' aastate='中级警报' />
4 <ctrl automationid='IENotificationBar' aastate='中级警报' name='通知' role='tool bar' text='通知' />
5 <ctrl name='保存' role='split button' text='保存' />
6 <ctrl role='drop down button' />

可见,区别在于行号#3和#4出现了“aastate='中级警报'”的属性,而这个属性在“下载通知”的完整Selector中则彻底没有出现。通过实际测试,正是这个属性影响到小三角按钮点击动做的稳定性。而因为许多人并无捕捉到或者仔细观察过“下载警报”的完整Selector,所以不容易发现这个细微的问题。

并且能够合理推测,随着安全区域的不一样,以及对应的区域安全级别的不一样,有可能会出现“初级警报”或者“高级警报”。再加上IE的Selector会随着系统语言变化。所以这里隐藏的变化比较多,要用一个Selector搞定各类场景仍是有点困难的。

顺便也能够理解许多同行开发的IE下载文件动做在本身的机器上就是好的,部署到生产服务器就各类不稳定的状况。

 

个人解决方案:

RPA永远只有更好的办法,没有最好的办法。我就拿个人办法来抛砖引玉一下。你们能够发挥想象力,看看有没有更好的作法。

我会针对“下载通知”和“下载警报”分别设计一套逻辑,出现哪一个用哪一个。我习惯先用Pick看看能不能搞定,结果目前看来一直很稳定,可供你们参考。若是Pick不行的话,能够考虑依次尝试用两种Selector去前后点击,一个点不了的话另外一个就会成功的。

解决方案

 

(图10:仅供参考)

 

这个问题相信不止是UiPath会遇到,其它的RPA工具在作IE自动化的时候应该也会遇到的,所以仍是有必要稍微研究一下。

 

欢迎加入“UiPath精英群”参与深度探讨

加入UiPath精英群

相关文章
相关标签/搜索