Selenium-等待

分爲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)顯式等待。針對特定的元素

  • // 顯示等待,針對某一個元素等待,每500ms執行一次查詢,直到找到,若是在設定的時間內尚未找到,跑出異常
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"));

}

});

}

 

  • 顯式等待 使用ExpectedConditions類中自帶方法, 能夠進行顯試等待的判斷。 

顯式等待能夠自定義等待的條件,用於更加複雜的頁面等待條件

 

等待的條件

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); }
相關文章
相關標籤/搜索