三種等待方式 強制等待 顯式等待 隱式等待

2022-06-18 15:42:12 字數 1763 閱讀 3502

我們在使用selenium的時候,會遇到一種定位不到的情況,因為web頁面有乙個載入的過程 當頁面元素未出現時,

去定位肯定是定位不到的,所以我們需要用到了『等待』,該如何使用等待呢,讓我們一起來**一下吧!

time.sleep()強制等待

time模組,是python專門用來處理時間的內建庫。

我們可以使用它時需要匯入  import   time

time.sleep(2) 意思是強制休眠2秒種的時間

這樣等待的弊端是,我們已經定位到元素的時候,還會繼續等待,導致我們工作效率很低 所以webdriver提供了兩種型別的等待:隱式等待和顯式等待

implicitly_wait()隱式等待

該方法來實現隱式等待,預設引數的單位為秒,如裡面的引數設定等待時長為10秒。  

當指令碼執行到某個元素定位時,如果元素可以定位,則繼續執行;

如果元素定位不到,則它將以輪詢的方式不斷地判斷元素是否被定位到。假設在第6秒定位到了元素則繼續執行,

若直到超出設定時長(10秒)還沒有定位到元素,則丟擲異常  

該等待設定完是對整個全域性起作用,所以只需設定一次即可,不需要匯入任何模組,直接使用

webdriverwait():顯式等待

是針對於某個特定的元素設定的等待時間,在設定時間內,預設每隔0.5時間檢測一次特定的元素是否存在,

如果在設定的時間內找到了元素,則直接執行。如果超過設定最長等待時間檢測不到則丟擲異常。

預設檢測頻率為0.5s,預設丟擲異常為:nosuchelementexception。

該方法需要匯入by 、webdriverwait 、expected_conditions

下面的**是對三種等待的具體例子:

from selenium import webdriver

from selenium.webdriver.common.by import by

from selenium.webdriver.support.ui import webdriverwait

from selenium.webdriver.support import expected_conditions as ec

import time

driver=webdriver.chrome() driver.implicitly_wait(5) #隱式等待

driver.get('')

time.sleep(3) #強制等待

driver.find_element_by_id('kw').send_keys('川普')

#每隔0.5秒檢查一次(預設就是0.5秒。也可以修改),最多等待10秒,直到找到id="su"元素就執行,否則丟擲異常

element=webdriverwait(driver,10,0.5).until(ec.visibility_of_element_located((by.id,'su'))) #顯式等待

element.click()

time.sleep(2)

driver.quit()

補充一點

presence_of_element_located           檢查元素是否存在,但是並不一定可見。

visibility_of_element_located              檢查元素存在,並且可見於頁面,也就是能定位到它

Selenium強制等待 顯式等待 隱式等待的區別

學習這一章的時候,無法清楚的了解到顯式等待與隱式等待的區別。這一篇講得挺清楚的 為什麼需要設定元素等待?usr bin env python coding utf 8 title time 2020 3 25 17 52 author 小菠蘿測試筆記 blog from time import sl...

顯式等待 隱式等待

現在的網頁越來越多採用了 ajax 技術,這樣程式便不能確定何時某個元素完全載入出來了。如果實際頁面等待時間過長導致某個dom元素還沒出來,但是你的 直接使用了這個webelement,那麼就會丟擲nullpointer的異常。為了避免這種元素定位困難而且會提高產生 elementnotvisibl...

定時器 強制等待 顯式等待和隱式等待

1.強制等待 time.sleep 單位s。等待時,程式停止執行,直到設定的等待時間結束。當等待時間設定為5s或者以上時,程式執行會報錯。2.隱式等待 device a.implicitly wait 5 單位s.在設定等待時間內,程式一直在嘗試查詢元素,直到超時結束。此項設定,全域性有效。3.顯式...