一、隱式等待 -- implicitlyWait
調用方式:driver.manage().timeouts().implicitlyWait(long time, TimeUnit unit);
//隱式等待調用方式,5秒+時間單位(枚舉類型) driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
注意:
1.隱式等待只能作用於元素的等待。
2.智能等待,如果元素在指定的時間內找到,則不會繼續等待,否則在指定時間內未找到元素則拋出NoSuchElementException。
3.作用域是全局的,跟driver的生命周期一樣,一般定義在父類中,只要設置隱式等待后,頁面所有的元素都會被綁定這種等待機制,只需設置一次,全局有效(只作用於元素),直到driver實例被關閉!
二、顯式等待 -- WebDriverWait(顯式等待)
//調用方式 WebDriverWait wait = new WebDriverWait(); WebElement element = wait.until(ExpectedConditions.xxx)
注意:
1.除了作用於元素等待還可以實現各種場景的等待,例如頁面加載等!
2.智能的等待方式,元素在指定的時間內找到,則不會繼續等待,否則拋出TimeOutException.
3.非全局設置,可以針對不同的元素綁定不同的等待機制,推薦優先使用這一種方式.
4.除了可以等待元素的查找,還可以支持多種其他的等待場景(例如:當加載頁面的url出現預期值,具體參見ExceptedConditions類的方法)
@Test public void test2() { driver.get("http://www.baidu.com"); long startTime = System.currentTimeMillis(); try { //程序一共等待5s,默認0.5秒檢查一次元素是否加載完成 WebDriverWait wait = new WebDriverWait(driver, 5); //until方法,返回一個Boolean類型,判斷元素現在是否存在在頁面上。locator的元素如果可見就停止等待,如果不可見就繼續等待直到超過規定的時間后,報超時異常; WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("kw"))); element.sendKeys("自動化測試!"); } catch (Exception e) { e.printStackTrace(); } long overTime = System.currentTimeMillis(); System.out.println("等待時間:"+(overTime-startTime)/1000+"秒"); }
如果在設置時間5s內找到元素則執行通過,如果未找到元素則拋異常TimeoutException
三、顯式等待中ExpectedConditions 用法說明
//程序一共等待5s,默認0.5秒檢查一次元素是否加載完成 WebDriverWait wait = new WebDriverWait(driver, 5); //until方法,返回一個Boolean類型,判斷元素現在是否存在在頁面上。locator的元素如果可見就停止等待,如果不可見就繼續等待直到超過規定的時間后,報超時異常 WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("w")));
1.判斷當前頁面的title是否精確等於預期
titleIs( String title)
2.判斷當前頁面的title是否包含預期字符串
titleContains( String title)
3.判斷當前頁面的url是否精確等於預期
urlToBe( String url)
4.判斷當前頁面的url是否包含預期字符串
urlContains( String fraction)
5.字符串正則表達式
urlMatches( String regex)
6.判斷元素是否出現,只要有一個元素出現,就通過。(代表在不代表可見)
判斷是否至少有 1 個元素存在於 dom 樹中。舉個例子,如果頁面上有 n 個元素的 class 都是’column-md-3’,那么只要有 1 個元素存在,這個方法就返回 True。
presenceOfElementLocated( By locator)
7.判斷元素是否出現,必須所有符合條件的元素都加載出來,才通過。
presenceOfElementsLocated( By locator)
8.如果給定元素是可見的且具有非零大小,否則為null
elementIfVisible(WebElement element)
9.判斷元素是否出現。
presenceOfAllElementsLocatedBy( By locator)
10.傳入類型為:locator , 判斷某個元素是否可見. 可見代表元素非隱藏,並且元素寬和高都不等於 0
visibilityOfElementLocated( By locator)
11.判斷某組元素是否可見
visibilityOfAllElementsLocatedBy( By locator)
12.傳入類型為:element
判斷某個元素是否可見. 可見代表元素非隱藏,並且元素寬和高都不等於 0
visibilityOfAllElements(final List<WebElement> elements)
13.判斷某個元素中的text是否包含了預期的字符串;
textToBePresentInElement( WebElement element, String text)
14.判斷某個元素中的 text 是否 包含 了預期的字符串
textToBePresentInElement(By locator, String text)
15.判斷某個元素中的 text 是否 包含 了預期的字符串
textToBePresentInElementLocated(final By locator, final String text)
16.判斷某個元素中的 value 屬性是否包含 了預期的字符串
textToBePresentInElementValue( WebElement element, String text)
17.判斷某個元素中的 value 屬性是否包含 了預期的字符串
textToBePresentInElementValue(final By locator, final String text)
18.判斷該 frame 是否可以 switch進去,如果可以的話,返回 True 並且 switch 進去,否則返回 False
frameToBeAvailableAndSwitchToIt(final String frameLocator)
19.斷該 frame 是否可以 switch進去,如果可以的話,返回 True 並且 switch 進去,否則返回 False
frameToBeAvailableAndSwitchToIt(final By locator)
20.某個元素中是否不存在於dom樹或不可見;
invisibilityOfElementLocated(final By locator)
21.判斷帶有文本的元素要么不可見,要么文本不存在於元素上
invisibilityOfElementWithText(final By locator, final String text)
22.判斷某個元素中是否可見並且是enable的,這樣的話才叫clickable;
elementToBeClickable(final By locator)
23.判斷某個元素中是否可見並且是enable的,這樣的話才叫clickable;
elementToBeClickable(final WebElement element)
24.判斷一個元素是否仍在DOM中,傳入WebElement對象,可以判斷頁面是 否刷新了。
stalenessOf(final WebElement element)
25.判斷一個元素是否仍在DOM中,傳入WebElement對象,可以判斷頁面是 否刷新了。
refreshed(final ExpectedCondition<T> condition)
26.頁面元素處於被選中狀態
elementToBeSelected(WebElement element)
27.判斷某個元素的選中狀態是否符合預期,傳入element
elementSelectionStateToBe( WebElement element, boolean selected)
28.判斷某個元素是否被選中了,一般用在下拉列表;
elementToBeSelected(By locator)
29.判斷某個元素的選中狀態是否符合預期,傳入locator
elementSelectionStateToBe(final By locator, final boolean selected)
30.判斷頁面上是否存在alert。
alertIsPresent()
注意: 從原文檔一個個扒出來翻譯的,有不對的地方還請批評指正。
參考原地址:Selenium 中ExpectedConditions 用法說明(最全整理)