1. 程式人生 > 其它 >Selenium中元素的三種等待方式

Selenium中元素的三種等待方式

技術標籤:Web自動化seleniumpython軟體測試

Selenium中元素的三種等待方式

(1)隱式等待:implicitly_wait()

通過一定時長等待頁面上某元素載入完成。如果超出了設定的時長元素還沒有被載入,則丟擲NoSuchElementException異常。
語法:在這裡插入圖片描述
缺點:當頁面某些js無法載入,但是想找的元素已經出來了,它還是會繼續等待,直到頁面載入完成(瀏覽器標籤左上角圈圈不再轉),才會執行下一句。某些情況下會影響指令碼執行速度。

(2)顯式等待:WebDriverWait()

等待某個條件成立時繼續執行,否則在達到最大時長時丟擲超時異常。
顯示等待語法如下:

WebDriverWait(driver,timeout,poll_frequency,ignored_exceptions)

driver: 傳入WebDriver例項,即webdriver.Chrome()
timeout: 超時時間,等待的最長時間(同時要考慮隱性等待時間)
poll_frequency: 呼叫until或until_not中的方法的間隔時間,預設是0.5秒
ignored_exceptions: 忽略的異常,如果在呼叫until或until_not的過程中丟擲這個元組中的異常, 則不中斷程式碼,繼續等待,如果丟擲的是這個元組外的異常,則中斷程式碼,丟擲異常。預設只有NoSuchElementException

WebDriverWait 的兩種等待方式
until(method,message)
method: 在等待期間,每隔一段時間(__init__中的poll_frequency)呼叫這個傳入的方法,直到返回值不是False
message: 如果超時,丟擲TimeoutException,將message傳入異常
until_not(method,message)
與until相反,until_not是當某元素出現或什麼條件成立則繼續執行,
until_not是當某元素消失或什麼條件不成立則繼續執行,引數也相同,不再贅述。
呼叫方法:WebDriverWait(driver, 超時時長, 呼叫頻率, 忽略異常).until(可執行方法, 超時時返回的資訊)
下面是根據until和until_not在百度輸入框進行操作的demo

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait

browser = webdriver.Chrome()
browser.get("https://www.baidu.com")

一行程式碼完成

WebDriverWait(browser,10).until(lambda browser:browser.find_element_by_id("kw")).send_keys("pytest")

定義方法完成

def kw(driver,times,func):
    return WebDriverWait(driver,times).until(func)
kw(browser,10,lambda x:x.find_element_by_id("kw")).send_keys("selenium")

(3)sleep():強制等待/休眠方法

由time模組提供的方法,用來做固定時間的休眠,尤其在指令碼除錯的過程中使用比較多。
語法:

from selenium import time

time.sleep(2)

缺點:不智慧,使用太多的sleep會影響指令碼執行速度。