Selenium的三種等待方式(顯示等待WebDriverWait()、隱式等待implicitly_wait()、強制等待sleep())


我們在實際使用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次頁面變化,直到出現指定的元素后結束,否則拋出異常


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM