selenium三種等待方式

2022-06-15 13:06:11 字數 2820 閱讀 2328

很多時候,我們進行元素定位時無法按預期成功定位到元素,但是我們的**又確保準確無誤,那是什麼原因呢?

其實,原因很簡單,大致分為2種:

1,所定位的元素在frame/iframe中

2,未設定合理的等待

為什麼未設定合理等待的時候,很有可能無法正確定位元素呢?

我們知道,**的執行速度很快很快,但瀏覽器的渲染速度卻相對慢了很多,這就容易導致**執行完後還未渲染或載入成功過,從而導致無法成功定位元素。

等待分為3種:

1,強制等待

2,隱式等待

3,顯示等待

1,強制等待

強制等待是最為粗暴的一種等待方式,此等待方式不管定位結果如何都會一直等待,直到等待時長結束。此種等待方式會導致程式**中斷,當等待時間結束

後才會繼續往下執行。

所以,此種等待方式往往會拉低程式執行效率,拉長了測試時長。

在python種,強制等待用sleep()方法,使用此方法需匯入time(import)模組或time模組中的sleep()方法(from time import sleep)

from selenium import

webdriver

from selenium.webdriver.common.by import

byfrom time import

sleep

driver =webdriver.firefox()

driver.get(

"")sleep(3)

driver.find_element(by.id, 'kw

').send_keys("

python")

driver.find_element(by.id, 'su

').click()

sleep(3)

driver.quit()

2,隱式等待:implicitly_wait(xx)

隱私等待會在等待時長內等待整個頁面的載入完成,如果在等待時長內頁面載入完成,則進行下一步。否則會一直等待頁面載入完成,直到達到等待時長。

隱式等待的乙個明顯弊端:一定會等到頁面載入完成後才會執行下一步,即使可能元素已經被找到了。

注意:隱性等待對整個driver的週期都起作用,所以只要設定一次即可。

from selenium import

webdriver

from selenium.webdriver.common.by import

bydriver =webdriver.firefox()

driver.get(

"")driver.implicitly_wait(10)

driver.find_element(by.id, "kw

").send_keys("

python")

driver.find_element(by.id, 'su

').click()

既然,隱式等待也可能會導致我們的程式執行速度變慢,那有沒有更好的等待方式呢?當然,顯示等待就可以。

3,顯示等待:webdriverwait,配合該類的until()和until_not()方法

顯示等待會在一定的時間頻率上來檢視是否定位到了元素,若找到了元素則進行下一步。若未找到,則超時後丟擲異常:timeoutexception

webdriverwait類需要匯入:from selenium.webdriver.support.wait import webdriverwait

webdriverwait()物件需3個引數:driver, timeout,poll_frequency=poll_frequency。

其中:driver為瀏覽器驅動,timeout為超時時間,poll_frequency為查詢頻率。

ec為exceped_conditions模組(縮寫)呼叫presence_of_element_located()來判斷元素是否已經在頁面的dom中(不需要元素在頁面是

可見的),在則返回webelement物件。

from selenium import

webdriver

from selenium.webdriver.common.by import

byfrom selenium.webdriver.support.wait import

webdriverwait

from selenium.webdriver.support import

expected_conditions as ec

driver =webdriver.firefox()

driver.get(

"")ele = webdriverwait(driver, 10, 0.5).until(ec.presence_of_element_located((by.id, 'kw'

)))ele.send_keys(

"python

")

重點:理解並熟練使用顯示等待,並對涉及到的webdriverwait類,excepted_conditions模組理解充分。

在webui自動化中,會對元素的定位進行二次封裝,而通常元素的定位就會用到顯示等待,並結合try...except來捕獲異常。

Selenium 三種等待方式詳解

我們在做web自動化時,一般要等待頁面元素載入完成後,才能執行操作,否則會報找不到元素的錯誤,這樣就要求我們在有些場景下加等待時間。我們平常用到的有三種等待方式 利用time模組的sleep方法來實現,最簡單粗暴的等待方法 coding utf 8 from time import sleep fr...

selenium 延遲等待的三種方式

1 最直接普通的方式 這個是設定固定的等待時間 thread.sleep 1000 2 顯示等待方式 explicit wait 就是明確的要等待的元素在規定的時間之內都沒找到,那麼就丟擲exception.示例如下 public loginpage loginexpectingfailure 這樣...

selenium的三種等待

1 強制等待 不管頁面是否載入出來,強制讓進城等待。2 隱式等待 driver.implicitly wait 20 3 顯示等待 滿足一些內建的等待條件,這要這些條件滿足,就等待結束。這些條件比如 特定頁面元素載入出來。建立顯示等待的步驟 導包from selenium.webdriver.sup...