我們在做UI自動化時,經常會遇到元素不可用或不可見的情況,除定位錯誤外,大部分原因是元素還未加載出來。
那么如何解決此類問題呢?
這里就用到了等待,今天主要基於RF的應用介紹常用的幾種等待方式。
一、強制等待
即達到等待時間后再執行操作,最為常用、最簡單的等待方式。
缺點是:假設等待設置為5s,不管1s還是2s內元素加載出來,也要等到5s后才會執行下一步操作。
在RF中的關鍵詞是:Sleep
二、隱式等待
全局等待變量的設置,等待時間內會一直刷新頁面,直到元素加載出來為止,所以會增加無效的等待時間。
如果超出等待時間,則會拋出異常。
在RF中對應的關鍵詞為:
Get Selenium Implicit Wait【獲取默認等待時間】
Set Selenium Implicit Wait【設置隱式等待時間】
Set Browser Implicit Wait【設置隱式等待時間,僅影響當前瀏覽器】
三、顯式等待
局部等待變量設置,針對某個元素設置等待。
等待時間內會定時檢測某個元素是否存在或可用,然后再執行下一步操作。
由於針對單個元素,一些加載比較快的元素無需設置,可以針對加載慢的元素進行設置,相對來說可以減少等待時間,便於腳本高效執行。
超出等待時間,則拋異常。
在RF中的關鍵詞是:
Wait Until Element Contains【等待元素匹配】
Wait Until Element Is Enabled 【等待元素可用】
Wait Until Element Is Visible 【等待元素可見】
Wait Until Page Contains 【等待頁面內容匹配】
Wait Until Page Contains Element 【等待頁面元素匹配】
上述關鍵字后邊加定位元素或文本等,當條件為True時,執行下一步操作。
四、其它關於等待的設置
關鍵字:Get Selenium Speed 與 Set Selenium Speed
從Speed看的出,此關鍵字用於設置執行速度的,一般用於調試使用,真正執行時一般不會用到哦。
關鍵字:Get Selenium Timeout 與 Set Selenium Timeout
全局超時等待時間,默認為5s,可根據需要進行設置,真正執行時一般不會用到哦。
${Implicit_time} Get Selenium Implicit Wait
log ${Implicit_time}
${speed} Get Selenium Speed
log ${speed}
${timeout} Get Selenium Timeout
log ${timeout}
INFO : ${Implicit_time} = 0 seconds
INFO : 0 seconds
INFO : ${speed} = 0 seconds
INFO : 0 seconds
INFO : ${timeout} = 5 seconds
INFO : 5 seconds
可以看出SeleniumLibrary默認值:timeout=5,implicit_wait=0,selenium speed=0
設置全局的話可以再Suite中設置,與其它suite一起執行的話全局通用
在真正構建UI自動化時,使用那種等待方式需要結合自身產品的應用,選擇適合自己的。