分爲3種css
(1)就是經過線程強制等待html
Thread.sleep(1000);java
(2)隱示等待。就是全部的命令都等待。分爲3種app
// 這個方法表示全局的等待。意思是針對全部的findElement方法都執行,執行過程是若是第一次找不到,那麼每一個500ms再去找,直到設定的時間結束;若是找到了就不等待,繼續執行測試
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);spa
// 這個方法是針對網頁加載的。意思是加載網頁時,若是在設定的時間內加載成功了,繼續執行;若是在設定的時間到了尚未加載成功再拋出異常。解決有的時候加載慢拋異常的狀況。線程
driver.manage().timeouts().pageLoadTimeout(60, TimeUnit.SECONDS);code
// 針對執行的js腳本。意思是在設定的時間內等待腳本執行,若是設定的時間內腳本尚未執行成功再跑出異常。有的時候腳本執行很慢,沒有執行完就跑出異常,這個方法能夠設定時間。htm
driver.manage().timeouts().setScriptTimeout(60, TimeUnit.SECONDS);blog
(3)顯式等待。針對特定的元素
public void WaitUntil() { WebDriverWait wait=new WebDriverWait(driver, 10); WebElement rElement=wait.until(new ExpectedCondition<WebElement>() { public WebElement apply(WebDriver d) { return d.findElement(By.cssSelector("input[type='radio'][name='company']:checked")); } }); }
顯式等待能夠自定義等待的條件,用於更加複雜的頁面等待條件
等待的條件 |
WebDriver方法 |
頁面元素是否在頁面上可用和可被單擊 |
elementToBeClickable(By locator) |
頁面元素處於被選中狀態 |
elementToBeSelected(WebElement element) |
頁面元素在頁面中存在 |
presenceOfElementLocated(By locator) |
在頁面元素中是否包含特定的文本 |
textToBePresentInElement(By locator) |
頁面元素值 |
textToBePresentInElementValue(By locator, java.lang.String text) |
標題 (title) |
titleContains(java.lang.String title) |
只有知足顯式等待的條件知足,測試代碼纔會繼續向後執行後續的測試邏輯
若是超過設定的最大顯式等待時間閾值, 這測試程序會拋出異常。
public static void testWait2(WebDriver driver) { driver.get("E:\\StashFolder\\huoli_28@hotmail.com\\Stash\\Tank-MoneyProject\\浦東軟件園培訓中心\\個人教材\\Selenium Webdriver\\set_timeout.html"); WebDriverWait wait = new WebDriverWait(driver, 20); wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector(".red_box"))); WebElement element = driver.findElement(By.cssSelector(".red_box")); ((JavascriptExecutor)driver).executeScript("arguments[0].style.border = \"5px solid yellow\"",element); }