Selenium 等待元素出現(xiàn)的方式有以下三種
1、顯式等待
通俗點說享怀,就是死等,很死板不靈活的等待。
即在指定的時間內(nèi)一定要等到某個元素的出現(xiàn)或可操作的狀態(tài),如果等不到,就一直等,直到在規(guī)定的時間之內(nèi)都要操作的元素仍沒找到,那么就拋出Exception
WebDriverWait wait = new WebDriverWait(driver, 20)
/**
* 等待頁面元素出現(xiàn)
*
* @param xpath
*/
public void waitWebElementDisplay(String xpath) {
long startTime = System.currentTimeMillis();
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath(xpath)));
long endTime = System.currentTimeMillis();
float seconds = (endTime - startTime) / 1000F;
log.debug("等待時間:" + Float.toString(seconds) + " seconds.");
}
/**
* 等待輸入框enable
*
* @param webElement
*/
public void waitElementClickable(WebElement webElement) {
long startTime = System.currentTimeMillis();
wait.until(ExpectedConditions.elementToBeClickable(webElement));
long endTime = System.currentTimeMillis();
float seconds = (endTime - startTime) / 1000F;
log.debug("等待時間:" + Float.toString(seconds) + " seconds.");
}
上述代碼中,設(shè)置要等待的時間為20秒.如果沒有滿足until()方法中的條件,就會始終在這里wait 20秒,仍然找不到,就拋出異常柬帕。
2、隱式等待
隱式等待在整個自動化測試的腳本中看不到隱式等待的語句狡门。但它會在每個頁面加載的時候自動等待陷寝;隱式等待只需要聲明一次,一般在打開瀏覽器后進行聲明(即加載對應(yīng)瀏覽器driver之后)其馏。聲明之后對整個WebDriver的實例的生命周期都有效凤跑,后續(xù)無需重復(fù)聲明。如果不設(shè)置全局元素超時時間叛复,默認超時時間為0 仔引。
driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS); //1指等待1秒
更多詳細說明請參考文章:隱式等待
3扔仓、強制等待
即線程休眠,在代碼中強制當前正在執(zhí)行的線程休眠(暫停執(zhí)行)
Thread.sleep(long millis);
注意咖耘,上述三種等待方式翘簇,如果顯示等待和隱式等待同時使用,則最大等待時間為兩個等待時間的最大值鲤看。