自動化測試穩定的關鍵 – Wait
這篇文章主要說明讓自動化測試執行更穩定的一個技巧 Wait。
為什麼 Wait 會讓自動化測試更穩定呢?
因為網站自動化測試會受到網路載入時間因素的影響,
有些網頁元件出現時間不一致,或是雖然有出現但是卻還暫時無法操作。
因此就需要利用 Selenium所提供的相關 Wait 的方式來處理。
Wait 可以幫助我們檢查該網頁元件的狀態,是否存在、顯示、可點擊等。
網頁元件是否存在?
以 Java 為範例程式,可以利用 wait來等待該網頁元件成功載入再繼續執行接下來的步驟。
WebDriverWait wait = new WebDriverWait(driver, waitTime);wait.until(ExpectedConditions.presenceOfElementLocated(locator)); |
|
另外可以用 findElements ,計算網頁元件的個數。如果大於 0 表示該網頁元件存在。
WebElement element = driver.findElements(By.cssSelector(“”));element.size()>0; |
是否可以看見
讀者會問這個 “是否可以看見” 跟上一個 “是否存在” 有什麼不同?
是否可以看見 Selenium會多檢查該網頁元件屬性長與寬是否大於 0
WebDriverWait wait = new WebDriverWait(driver, waitTime);wait.until(ExpectedConditions.visibilityOfElementLocated(locator)); |
List<WebElement> linkElements = driver.findelements(By.cssSelector(‘#linkhello’));WebDriverWait wait = new WebDriverWait(driver, waitTime);
wait..until(ExpectedConditions.visibilityOfAllElements(linkElements)); |
另外也可以利用網頁元件得到類似的判斷,缺點是這樣的方式不會等待指定秒數。
WebElement element = driver.findElement(By.id(“”));element.isDisplayed(); |
是否可以點擊
WebDriverWait wait = new WebDriverWait(driver, waitTime);wait.until(ExpectedConditions.elementToBeClickable(locator)); |
WebElement element = driver.findElement(By.id(“”));element.isEnabled(); |
是不是所有的元件都要特別等待呢?
不需要的! 大部分的網頁元件不需要這樣的處理。
筆者經驗,僅需要將常常會因為時間差而導致自動化測試失敗的網頁元件作上述特別的等待處理即可。
還有其他等待方式嗎? Implicit Wait
Implicit Wait 的設定可以讓 Selenium對於整個程式有 timeout 值。
例如:我們設定30秒的 timeout。當網頁元件等待超過 30 秒,該網頁元件都沒有出現的話,程式就會 exception。
|
固定等待時間 sleep
當上述方法還是都無法解決問題實,可以採用固定等待時間。例如下列範例為等待 10 秒。
|