Thread.sleep(long millis)
隱性等待:設置一次,driver整個生命週期中都在使用,不須要針對元素明確設置web
driver.manage().timeouts().implicitlyWait(long outTime, TimeUnit unit);
全局設置,設置driver執行全部定位元素操做的超時時間 瀏覽器
Parameters:outTime– 超時等待時間;unit– 時間單位.app
Ex. 異步
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);//超時等待時間爲10S
顯性等待:須要等待的元素定位時須要逐一明確調用該等待方法 ide
Figure 1 Support.ui包經常使用類UMLui
[經常使用等待模板] spa
1)WebDriverWait firefox
new WebDriverWait(WebDriver driver, long timeOutInSeconds).until(ExpectedConditions.presenceOfElementLocated(By by))
註解:線程
2)FluentWait 調試
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver) .withTimeout(long timeOut, TimeUnit unit) .pollingEvery(long duration, TimeUnit unit) .ignoring(exceptionType); wait.until(ExpectedConditions.presenceOfElementLocated(By.by));
註解:
duration-查找元素時間間隔 ;exceptionType-忽略異常類型,例如 默認NoSuchElementException.class
2.等待並獲取元素—僅須要修改until方法體
WebElement element = wait.until( new ExpectedCondition<WebElement>(){ @Override public WebElement apply( WebDriver driver) { return driver.findElement( By by); } } );
註解:
[案例]
Wait<WebDriver> wait = new WebDriverWait(driver,10); wait.until( ExpectedConditions. presenceOfElementLocated(By.id("myDynamicElement")) );
方法功能:定位id=' myDynamicElement'的元素,超時等待時間爲10S
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver) .withTimeout(60, TimeUnit.SECONDS) .pollingEvery(10, TimeUnit.SECONDS) .ignoring(NoSuchElementException.class); wait.until(ExpectedConditions.presenceOfElementLocated(By.id("myDynamicElement")));
方法功能:定位id=' myDynamicElement'的元素,超時等待時間爲60S,每隔10S定位一次,遇到NoSuchElementException報錯忽略,繼續等待直到超過60s。
Wait<WebDriver> wait = new WebDriverWait(driver, 10); WebElement e = wait.until( new ExpectedCondition< WebElement>(){ @Override public WebElement apply( WebDriver d) { return d.findElement( By.id( " myDynamicElement " )); } } );
方法功能:定位id=' myDynamicElement'的元素,超時等待時間爲10S,若定位到元素,直接返回元素
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver) .withTimeout(60, TimeUnit.SECONDS) .pollingEvery(10, TimeUnit.SECONDS) .ignoring(NoSuchElementException.class); WebElement element= wait.until( new ExpectedCondition<WebElement>() { @Override public WebElement apply( WebDriver d) { return d.findElement( By.id( " myDynamicElement " )); } } );
方法功能:定位id=' myDynamicElement'的元素,超時等待時間爲60S,每隔10S定位一次,60s內遇到NoSuchElementException報錯忽略,繼續等待;若定位到元素,直接返回該頁面元素。
若是隻是僅僅想判斷頁面是否是加載到某個地方了,就能夠用第一種方法; 但若是須要獲得某個WebElement,兩種方式均可以,只是第一種方式還須要再多一步獲取的操做.
FluentWait類是Wait接口的實現,直接使用wait接口能夠更靈活的完成您須要的等待功能,例如
Wait w = new Wait(){ @Override public boolean until() { return webElement.isDisplayed(); } };
這種等待的方式,聽說在加載js代碼的時候作判斷會比較方便,目前沒有調試成功。
driver.manage().timeouts().pageLoadTimeout(100, SECONDS);
註解:
driver.manage().timeouts().setScriptTimeout(100,SECONDS);
還沒有調試經過