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精英群

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM