前言
在實際測試過程中,由於網速或性能方面的原因,打開相應的網頁后或在網頁上做了相應的操作,網頁上的元素可能不會馬上加載出來,這個時候需要在定位元素前等待一下,等元素加載出來后再進行定位,根據實際使用選擇需要的等待方式。
一、強制等待
強制等待是利用time模塊的sleep方法來實現,最簡單粗暴的等待方法。但是此方法影響腳本的執行效率,所以不太推薦使用此方法。
//強制等待1S Thread.sleep(1000);
二、隱式等待
隱式等待只能作用於元素的等待。
如果元素在指定的時間內找到,則不會繼續等待,否則在指定時間內未找到元素則拋出NoSuchElementException。
作用域是全局的,跟driver的生命周期一樣,一般定義在父類中,只要設置隱式等待后,頁面所有的元素都會被綁定這種等待機制,只需設置一次,全局有效(只作用於元素),直到driver實例被關閉。
//隱式等待等待5秒 driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
三、顯式等待
除了作用於元素等待還可以實現各種場景的等待,例如頁面加載等。
智能的等待方式,元素在指定的時間內找到,則不會繼續等待,否則拋出TimeOutException。
非全局設置,可以針對不同的元素綁定不同的等待機制。
//顯式等待3秒 WebDriverWait wait = new WebDriverWait(driver, 3); //3秒內找不到此元素,TimeOutException報錯 wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.name("wd")))
擴展
ExpectedConditions其他用法
1. titleIs判斷當前頁面的title是否等於預期。
2. titleContains判斷當前頁面的title是否包含預期字符串。
3. urlToBe判斷當前頁面的url是否等於預期。
4. urlContains判斷當前頁面的url是否包含預期字符串。
5. presenceOfElementLocated判斷元素是否出現,出現就通過。
6. visibilityOfElementLocated判斷某個元素是否可見,可見代表元素非隱藏。
7. elementToBeSelected頁面元素處於被選中狀態。
ExpectedConditions還有很多其他方法,在此不一一列舉。