我們在實際使用selenium或者appium時,等待下個等待定位的元素出現,特別是web端加載的過程,都需要用到等待,而等待方式的設置是保證腳本穩定有效運行的一個非常重要的手段,在selenium中(appium通用)常用的等待分為顯示等待WebDriverWait()、隱式等待implicitly_wait()、強制等待sleep()三種
- sleep(): 強制等待,設置固定休眠時間。 python 的 time 包提供了休眠方法 sleep() , 導入 time 包后就可以使用 sleep(),進行腳本的執行過程進行休眠。
- implicitly_wait():隱式等待,也叫智能等待,是 webdirver 提供的一個超時等待。等待一個元素被發現,或一個命令完成。如果超出了設置時間的則拋出異常。
- WebDriverWait():顯示等待,同樣也是 webdirver 提供的方法。在設置時間內,默認每隔一段時間檢測一次當前頁面元素是否存在,如果超過設置時間檢測不到則拋出異常。默認檢測頻率為0.5s,默認拋出異常為:NoSuchElementException
WebDriverWait() 顯示等待,語法格式如下:
WebDriverWait(self,driver,timeout,poll_frequency=POLL_FREQUENCY,ignored_exceptions=None).until(self,method,message=)
WebDriverWait(self,driver,timeout,poll_frequency=POLL_FREQUENCY,ignored_exceptions=None).until_not(self,method,message=)
WebDriverWait 只有兩種方法until與until_not
until(method,message=") 當某元素出現或什么條件成立則繼續執行
until_not(method,message=")當某元素消失或什么條件不成立則繼續執行
WebDriverWait參數:
self -- 函數本身,在實際使用的時候不需要輸入
driver -- webdriver的驅動程序,如(IE、FireFox、chrome、safari等)
timeout -- 超時時間,默認以秒為單位
poll_frequency -- 輪詢頻率,休眠時間(步長)的間隔,默認為0.5秒,即檢測元素是否存在的頻率
ignored_exceptions -- 超時后的異常信息,默認情況下拋 “NoSuchElementException",大家可以定義忽略的異常信息
實例
from selenium import webdriver from selenium.common.exception import NoSuchElementException from selenium.webdriver.support.ui import WebDriverWait
dr = webdriver.Chrome() dr.get('http://www.baidu.com') WebDriverWait(dr,10,1,NoSuchElementException).until( lambda dr: dr.find_element_by_id("kw"),message='沒有此元素,定義超時!!') # WebDriverWait(dr,10)的意思是10秒內每隔0.5秒掃描1次頁面變化,直到出現指定的元素后結束,否則拋出異常
