1. 程式人生 > >Selenium+Java(六)Selenium 強制等待、顯式等待、隱實等待

Selenium+Java(六)Selenium 強制等待、顯式等待、隱實等待

前言

在實際測試過程中,由於網速或效能方面的原因,開啟相應的網頁後或在網頁上做了相應的操作,網頁上的元素可能不會馬上加載出來,這個時候需要在定位元素前等待一下,等元素加載出來後再進行定位,根據實際使用選擇需要的等待方式。

一、強制等待

 強制等待是利用time模組的sleep方法來實現,最簡單粗暴的等待方法。但是此方法影響指令碼的執行效率,所以不太推薦使用此方法。

//強制等待1S
Thread.sleep(1000);

二、隱式等待

 隱式等待只能作用於元素的等待。

如果元素在指定的時間內找到,則不會繼續等待,否則在指定時間內未找到元素則丟擲NoSuchElementException。
作用域是全域性的,跟driver的生命週期一樣,一般定義在父類中,只要設定隱式等待後,頁面所有的元素都會被繫結這種等待機制,只需設定一次,全域性有效(只作用於元素),直到driver例項被關閉。

//隱式等待等待5秒
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);

三、顯式等待

除了作用於元素等待還可以實現各種場景的等待,例如頁面載入等。
智慧的等待方式,元素在指定的時間內找到,則不會繼續等待,否則丟擲TimeOutException。
非全域性設定,可以針對不同的元素繫結不同的等待機制。

//顯式等待3秒
WebDriverWait wait = new WebDriverWait(driver, 3);
//3秒內找不到此元素,TimeOutException報錯
wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.name("wd")))

擴充套件

ExpectedConditions其他用法

1. titleIs判斷當前頁面的title是否等於預期。
2. titleContains判斷當前頁面的title是否包含預期字串。
3. urlToBe判斷當前頁面的url是否等於預期。
4. urlContains判斷當前頁面的url是否包含預期字串。
5. presenceOfElementLocated判斷元素是否出現,出現就通過。
6. visibilityOfElementLocated判斷某個元素是否可見,可見代表元素非隱藏。
7. elementToBeSelected頁面元素處於被選中狀態。


ExpectedConditions還有很多其他方法,在此不一一列