Appium腳本(5) 元素等待方法示例

思考

在自動化過程當中,元素出現受網絡環境,設備性能等多種因素影響。所以元素加載的時間可能不一致,從而會致使元素沒法定位超時報錯,可是實際上元素是正常加載了的,只是出現時間晚一點而已。那麼如何解決這個問題呢?web

元素等待做用

設置元素等待能夠更加靈活的制定等待定位元素的時間,從而加強腳本的健壯性,提升執行效率。網絡

元素等待類型

強制等待

設置固定的等待時間,使用sleep()方法便可實現app

from time import sleep函數

#強制等待5秒性能

sleep(5)ui

隱式等待

隱式等待是針對所有元素設置的等待時間spa

driver.implicitly_wait(20)code

顯式等待

顯式等待是針對某個元素來設置的等待時間。blog

方法WebDriverWait格式參數以下:ci

from selenium.webdriver.support.ui import WebDriverWait

 

WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)

driver : WebDriver

timeout : 最長超時時間,默認以秒爲單位

poll_frequency : 休眠時間的間隔時間,默認爲0.5秒

ignored_exceptions : 超時後的異常信息,默認狀況下拋NoSuchElementException異常。

WebDriverWait()通常和until()或until_not()方法配合使用,另外,lambda提供了一個運行時動態建立函數的方法。

from selenium.webdriver.support.ui import WebDriverWait

WebDriverWait(driver,10).until(lambda x:x.find_element_by_id("elementID"))

 

實戰案例

 1 from app.find_element.capability import driver
 2 from time import sleep
 3 from selenium.webdriver.support.ui import WebDriverWait
 4 
 5 # 等待元素方法彙總
 6 
 7 # 隱式等待(等待全部元素)
 8 driver.implicitly_wait(3)
 9 
10 # 顯示等待(等待特定元素出現)
11 WebDriverWait(driver, 3).until(lambda x: x.find_element_by_id('com.tal.kaoyan:id/login_register_text'))
12 driver.find_element_by_id('com.tal.kaoyan:id/login_register_text').click()
13 
14 # 強制等待(秒)
15 sleep(3)
16 
17 driver.close_app()
相關文章
相關標籤/搜索