WinAppDriver 等待時間設定技巧
做桌面程式的自動化測試,難免會涉及到控制元件的等待,比如當點選一個Button時,要等待一個Window的出現,然後在該Window上操作其他控制元件。最簡單粗暴的方式是使用Thread.Sleep()
方法,直接阻塞執行緒,當然這也是最不推薦的方式,因為太不優雅的可擴充套件性太差,等待時間是寫死的?
那麼如何解決呢?
WinAppDriver提供一種根據條件判斷是否中止的方法 Until()
, 它會在指定時間內(Timeout)執行操作,如果沒有返回標誌,就會一直執行,一旦發現返回標誌,就會退出執行,其中返回的標誌有三種
- 返回 true
- 執行時間超過設定的超時時間
- 在執行期間丟擲的異常不在期望的異常列表裡
public static void WaitAction(this WindowsDriver<WindowsElement> driver, Action action, int secondTimeOut = 60)
{
// 設定超時時間
var waiter = new DefaultWait<WindowsDriver<WindowsElement>>(driver)
{
Timeout = TimeSpan.FromSeconds(secondTimeOut),
};
// 設定忽略異常,一般當尋找控制元件而有沒有找到時會丟擲該異常,設定後在等待中一旦發生該異常,還是會繼續尋找控制元件
waiter.IgnoreExceptionTypes(typeof(InvalidOperationException));
// 等待有三種結束標誌,
// 1. 當返回值為true
// 2. 當發生異常不在異常列表裡
// 3. 超過設定時間
waiter.Until((s) =>
{
// 執行我們想要執行的操作, 一旦發生錯誤,便不會到第二步 return true,而前面我們已經設定好忽略的異常, 所以
// 這裡會在Timeout時間內一直執行我們的操作,直到達到要求為止
action?.Invoke();
return true;
});
}
上面程式碼是我封裝好一個方法,目的是動態獲取控制元件,不必每次去 Thread.Sleep()
相應的時間
WindowsElement addDataButton = null;
_earthDriver.WaitAction(() =>
{
addDataButton = _earthDriver.FindElementByAccessibilityId("MainAddDataButton");
},300);
if (addDataButton == null)
{
// Do something
}
else
{
// Do other things
}
然後我們在應用的時候,就可以向上面的指令碼一樣去實踐,這樣就極大的增加了測試指令碼的穩定性?
相關文章
- Linux設定開機等待時間Linux
- 【Linux-時間設定】-設定時區並調整時間Linux
- 設定時間格式
- quartz定時任務時間設定quartz
- 手機小技巧:小米手機時間24小時制怎麼設定
- session超時時間的設定Session
- ECS設定時區與時間
- weblogic設定超時時間Web
- 【等待時間】asynch descriptor resize
- 蘋果手機使用技巧:iPhone怎麼設定自動鎖屏時間?蘋果iPhone
- HttpClient設定聯網超時時間HTTPclient
- C# UdpClient 設定超時時間C#UDPclient
- js時間顯示設定JS
- localStorage設定儲存時間
- redis設定過期時間Redis
- localStorage設定過期時間
- 設定history 帶時間點
- 設定oralce時間戳格式時間戳
- Linux時間設定系統時間、硬體時間和時間服務Linux
- Oracle CSS的引數設定 心跳時間設定OracleCSS
- Ubuntu 時間不準,怎麼設定NTP時間同步?Ubuntu
- win10要如何設定更新時間_win10怎麼設定更新時間Win10
- 為jQuery的$.ajax設定超時時間jQuery
- CSS 技巧篇(六):display設定元素為行內元素時,元素之間存在間隙問題CSS
- linux系統時間設定Linux
- JavaScript 設定cookie 過期時間JavaScriptCookie
- Linux設定系統時間Linux
- 設定phpsession過期時間PHPSession
- oracle rac中設定時間同步Oracle
- gc current request等待時間處理GC
- 【easyUI】date-box 設定預設時間UI
- linux下的系統時間、硬體時間設定Linux
- Linux設定和修改時間與時區Linux
- Linux時區設定及NTP時間同步Linux
- 電腦螢幕時間長短在哪裡設定 電腦螢幕息屏時間設定
- 如何在 Ubuntu 上設定時間同步Ubuntu
- mongodb中如何設定當前時間?MongoDB
- PHPUNIT MOCK設定時間 expectation 覆蓋PHPMock