在這篇文章中,我們將探討 Selenium 4 中不同類型的等待,包括新的改進和使用的最佳實踐。
Selenium 4 中的等待類型
Selenium 4 提供了三種主要的等待類型:
讓我們深入了解每一個!
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
在此範例中,Selenium 在拋出 NoSuchElementException 之前將等待長達 10 秒的元素出現。等待適用於整個會話期間的每個元素查找。
優點:
易於實作。
適合簡單的項目。
缺點:
即使不需要,也會減慢測試執行速度,因為它在全域範圍內應用等待。
與其他等待類型一起使用時可能會導致不可預測的測試行為。
程式碼範例:
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(15)); WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("example")));
在此範例中,WebDriver 將等待最多 15 秒,直到元素變得可見。如果該元素出現在 15 秒之前,則等待提前結束。
常見明確等待條件:
visibilityOfElementLocated()
elementToBeClickable()
enceOfElementLocated()
AlertIsPresent()
優點:
高度可定制,比隱式等待更有效率。
僅在需要特定條件時等待。
缺點:
需要更多程式碼,這會增加複雜性。
在大型專案中,管理多個顯式等待可能會變得很棘手。
Wait<WebDriver> fluentWait = new FluentWait<>(driver) .withTimeout(Duration.ofSeconds(20)) .pollingEvery(Duration.ofMillis(500)) .ignoring(NoSuchElementException.class); WebElement element = fluentWait.until(driver -> driver.findElement(By.id("example")));
這裡,WebDriver 將每 500 毫秒檢查一次元素,並在超時前等待最多 20 秒。在此期間它也會忽略 NoSuchElementException。
優點:
為如何處理等待提供更大的靈活性和控制。
允許自訂輪詢間隔和異常處理。
缺點:
設定和理解可能會更複雜。
過度客製化可能會導致程式碼混亂且難以維護。
Selenium 4 Waits 的改良
Selenium 4 引入了一些改進,特別是在如何管理等待方面:
更好的語法:Selenium 4 使用 Duration 取代先前的 TimeUnit,使其更加直觀和可讀。
相對定位器:您現在可以等待與其他元素相關的元素(例如,左側、附近等)。
增強的 WebDriverWait:Selenium 4 中的 WebDriverWait 類別更加精簡,更容易使用現代語法。
在 Selenium 4 中使用等待的最佳實踐
使用顯式等待而不是隱式等待:為了更好的控制和效能,更喜歡顯式等待,尤其是在複雜的場景中。
避免混合隱式和顯式等待:使用兩者可能會導致不可預測的行為並增加等待時間。
設定合理的超時值:避免設定不必要的長時間等待。分析應用程式的行為以確定適當的等待時間。
對動態元素使用流暢等待:如果元素高度動態,請考慮使用具有輪詢間隔的流暢等待來減少不必要的等待。
結論
在 Selenium 4 中有效處理等待對於編寫穩定可靠的自動化測試至關重要。了解何時以及如何使用隱式、顯式和流暢的等待可以大大提高測試套件的穩健性。隨著 Selenium 4 的改進,您擁有更強大的工具來管理同步問題。
以上是了解 Selenium 4 中的等待的詳細內容。更多資訊請關注PHP中文網其他相關文章!