參考:
java-selenium三種等待方式
Selenium+Java(六)Selenium 強(qiáng)制等待、顯式等待、隱實(shí)等待
1. 強(qiáng)制等待
強(qiáng)制等待是利用time模塊的sleep方法來實(shí)現(xiàn),最簡單粗暴的等待方法。
//強(qiáng)制等待1S
Thread.sleep(1000);
-
缺點(diǎn):不能準(zhǔn)確把握需要等待的時間(有時候操作未完成,等待就結(jié)束了,導(dǎo)致報錯;有時候操作已經(jīng)完成了,但時間還沒到,浪費(fèi)時間),如果再用例中大量使用,會浪費(fèi)不必要的等待時間,影響用例的執(zhí)行效率。
-
優(yōu)點(diǎn):使用簡單,可以在調(diào)試時使用。
2. 隱式等待
隱式等待只能作用于元素的等待。如果元素在指定的時間內(nèi)找到,則不會繼續(xù)等待,否則在指定時間內(nèi)未找到元素則拋出NoSuchElementException。
作用域是全局的,跟driver的生命周期一樣,一般定義在父類中,只要設(shè)置隱式等待后,頁面所有的元素都會被綁定這種等待機(jī)制,只需設(shè)置一次,全局有效(只作用于元素),直到driver實(shí)例被關(guān)閉。
//隱式等待等待5秒
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
-
缺點(diǎn):使用隱式等待,程序會一直等待頁面加載完成,才會執(zhí)行下一步操作(有時候頁面想要的元素早已加載完成了,但是頁面上個別元素還沒有加載完成,仍要等待頁面全部完成才能執(zhí)行下一步,使用也不是很靈活)
-
優(yōu)點(diǎn):隱式等待對整個driver的周期都起作用,所以只要設(shè)置一次即可
3. 顯式等待
除了作用于元素等待還可以實(shí)現(xiàn)各種場景的等待,例如頁面加載等。
智能的等待方式,元素在指定的時間內(nèi)找到,則不會繼續(xù)等待,否則拋出TimeOutException。
非全局設(shè)置,可以針對不同的元素綁定不同的等待機(jī)制。
只有滿足顯式等待的條件滿足(這里是滿足頁面出現(xiàn)name=wd的元素),測試代碼才會繼續(xù)向后執(zhí)行后續(xù)的測試邏輯,如果超過設(shè)定的最大顯式等待時間閾值, 這測試程序會拋出異常。
//顯式等待3秒
WebDriverWait wait = new WebDriverWait(driver, 3);
//3秒內(nèi)找不到此元素,TimeOutException報錯
wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.name("wd")))
-
缺點(diǎn):使用相對比較復(fù)雜
-
優(yōu)點(diǎn):判斷準(zhǔn)確,不會浪費(fèi)多余的等待時間,在用例中使用,可以提高執(zhí)行效率
附:ExpectedConditions其他用法
- titleIs判斷當(dāng)前頁面的title是否等于預(yù)期。
- titleContains判斷當(dāng)前頁面的title是否包含預(yù)期字符串。
- urlToBe判斷當(dāng)前頁面的url是否等于預(yù)期。
- urlContains判斷當(dāng)前頁面的url是否包含預(yù)期字符串。
- presenceOfElementLocated判斷元素是否出現(xiàn),出現(xiàn)就通過。
- visibilityOfElementLocated判斷某個元素是否可見,可見代表元素非隱藏。
- elementToBeSelected頁面元素處于被選中狀態(tài)。
4. 隱式等待與顯示等待結(jié)合使用
一般來說,在項(xiàng)目中會使用隱式等待與顯式等待結(jié)合的方式,定義完 driver 之后立即設(shè)置一個隱式等待,在測試過程中需要判斷某個元素屬性的時候,再加上顯式等待。
若隱式等待時間與顯式等待時間不同,當(dāng)隱式等待時間大于顯式等待時間時,最終等待時間等于隱式等待時間;當(dāng)顯式等待時間大于隱式等待時間時,會循環(huán)隱式等待時間,最終等待時間大于等于顯式等待時間。文章來源:http://www.zghlxwxcb.cn/news/detail-448939.html
詳細(xì)說明:e.g.
隱式等待時間設(shè)置為10秒,A元素的顯式等待時間設(shè)置為5秒,若沒有定位到A元素時,會等待10秒。
隱式等待時間設(shè)置為3秒,A元素的顯式等待時間設(shè)置為7秒,若沒有定位到A元素時,會等待3+3+3=9秒。
隱式等待時間設(shè)置為9秒,A元素的顯式等待時間設(shè)置為10秒,若沒有定位到A元素時,會等待9+9=18秒。文章來源地址http://www.zghlxwxcb.cn/news/detail-448939.html
到了這里,關(guān)于Appium/Selenium+Java的三種等待方式的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!