元素的多種延時等待
有時候頁面元素不是當下就出現的,這個時候就需要等待元素出現後再繼續後面的操作了。
/**
* 1. 執行緒休眠---Thread.sleep(long millis);
* 強制等待,硬性等待--不確定具體需要等待多久時間的時候,容易造成時間的浪費
* 例子:Thread.sleep(2000);
*
* 2. 隱式等待---TimeOuts--implicitlyWait
* 設定方式:driver.manage.timeouts().implictlyWait(long time,TimeUnit unit)
* 例子:driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
* 特點:相對靈活(優),設定是針對全域性的,在WebDriver例項整個生命週期有效,但並不是所有元素都需要等待(缺)
*
* 3. 顯式等待--可以自己指定某個元素需要等待(在有必要進行等待的時候再執行等待)
* 每隔0.5秒掃描一次頁面,檢查元素是否滿足等待結果條件,比如查詢元素,則檢查元素是否存在,存在的話返回true,不存在則繼續等待,知道找到或超時。
* 特點:不是針對全域性的,只有需要進行等待的元素才執行等待,可以自己設定場景(條件),條件滿足時再繼續執行
*/
顯式等待的程式碼如下:
/**
* 智慧查詢元素方法,設定任意等待時間
* @param by
* @param timeOutInSeconds
* @return
*/
public WebElement getElement(By by,long timeOutInSeconds) {
WebDriverWait wait=new WebDriverWait(driver, timeOutInSeconds);
WebElement element=wait.until(new ExpectedCondition<WebElement>() {
public WebElement apply(WebDriver driver) {
return driver.findElement(by);
}
});
return element;
}
/**
* 智慧查詢元素方法,設定等待時間為5s
* @param by
* @return
*/
public WebElement getElement(By by) {
return getElement(by,5);
}