UIPATH IE浏览器下载问题

Q:为什么要用ie浏览器操作而不用chrome或者edge?

A:有些政府,银行的网站只支持ie,所以坑就埋下了

现象:用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。

下面给大家展示一下我可以提供的线索。

首先以我的笔记本为例。

在笔记本环境下,对于同一个下载链接,不论出现的是“下载通知”还是“下载警告”,我都捕获到了一样的完整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有不一样的行为。服务器的环境信息如下。

当出现“下载通知”时,小三角按钮的完整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去先后点击,一个点不了的话另一个就会成功的。

![在这里插入图片描述](https://img-blog.csdnimg.cn/71fbf5545bc14d8f8a4dcc4a71a1b96a.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAU2VlbGVfMTAxOA==,size_20,color_FFFFFF,t_70,g_se,x_16)

(图10:仅供参考)

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值