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


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

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

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

    (图1:小三角按钮)

    原因:IE的下载通知条其实有两种状态,一是常见的“通知”(如图2),二是“警报”(如图3)。当我们用UiPath在IE点击一个网页的下载链接,会先弹出“下载通知”,然后“下载通知”有可能很快转变成“下载警报”。对于UiPath来说已经是两个下载通知条了(只是外观相近而已),但是人眼看起来好像按钮还是那个按钮,除了底色在黄白间渐变,并没有感觉到什么不同。

     下载通知

    (图2:下载通知)

    下载警报

     (图3:下载警报)

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

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

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

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

    • 连续尝试单击那个小三角直至点击成功(用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精英群

  • 相关阅读:
    Eclipse修改JSP文件的默认编码
    RPM常用命令总结
    软链接的妙用
    多线程练习
    Spring整合struts的配置文件存放问题
    使用struts框架后的404错误
    俄罗斯方块中的编程思想
    引用类型的强制类型转换
    数据库还原的问题
    常用sql语法初级
  • 原文地址:https://www.cnblogs.com/ybyebo/p/13228143.html
Copyright © 2020-2023  润新知