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