1、最直接普通的方式:這個是設置固定的等待時間
Thread.sleep(1000);
2、顯示等待方式(Explicit Wait):就是明確的要等待的元素在規定的時間之內都沒找到,那么就拋出Exception.代碼示例如下
public LoginPage LoginExpectingFailure(){
WebDriverWait wait = new WebDriverWait(driver,10);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("dologin")));
這里,10是要等待的秒數.如果沒有滿足until()方法中的條件,就會始終在這里wait 10秒,依然找不到,就拋出異常 。
還可以這樣寫:
WebDriver chrome= new ChromeDriver() ;
chrome.get( http://somedomain/url_that_delays_loading);
WebElement e = (new WebDriverWait( chrome, 10)) .until(
new ExpectedCondition< WebElement>(){
@Override //方法重寫
public WebElement ByPresent( WebDriver d) {
return d.findElement( By.id("id locator"));
}
}
);
這樣就通過回調函數,直接獲得了這個WebElement.也就是頁面元素 。
3、隱式等待方式(implicitlyWait):設置腳本在查找元素時的最大等待時間;
隱式等待方式(implicitlyWait):設置腳本在查找元素時的最大等待時間;
driver.manage().timeouts().implicitlyWait(second, TimeUnit.SECONDS);
代碼示例如下:
public boolean isByElementDisplayed(By by, int time,WebDriver chrome) {
boolean status = true;
while(!isByPresent(chrome, by)){
chrome.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
}
return status;
}
public boolean isByPresent(WebDriver chrome, By by){
boolean display = false;
try{
chrome.findElement(by).isDisplayed();
return display= true;
}catch(NoSuchElementException e){
return display;
}
}
這里用while循環是如果明確需要查找的元素未找到,就繼續循環等待;