一.前言:web
在自動化過程當中,元素出現受網絡環境,設備性能等多種因素影響。所以元素加載的時間可能不一致,從而會致使元素沒法定位超時報錯,可是實際上元素是正常加載了的,只是出現時間晚一點而已。那麼如何解決這個問題呢?網絡
二.正文ide
1.元素等待做用函數
設置元素等待能夠更加靈活的制定等待定位元素的時間,從而加強腳本的健壯性,提升執行效率。性能
2.元素等待類型ui
a.強制等待ci
設置固定的等待時間,使用sleep()方法便可實現element
from time import sleepselenium
強制等待5秒it
sleep(5)
b.隱式等待
隱式等待是針對所有元素設置的等待時間
driver.implicitly_wait(20)
c.顯式等待
顯式等待是針對某個元素來設置的等待時間。
方法WebDriverWait格式參數以下:
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」))
實戰案例
element_wait.py
from find_element.xiaomi_login import driver
from selenium.webdriver.support.ui import WebDriverWait
WebDriverWait(driver,3).until(lambda x:x.find_element_by_id(‘com.xiaomi.shopping:id/mainactivity_button_btn1’))
driver.find_element_by_id(‘com.xiaomi.shopping:id/mainactivity_button_btn1’).click()
三.寫在最後:
沒有一個寒冬不會過去,沒有一個春天不會來臨,不忘初心,繼續堅持,相信你終會開出一朵是屬於本身的花兒來。