詳解Python中如何添加Selenium WebDriver等待
本文將介紹在Python中在Selenium Web驅(qū)動(dòng)程序中添加等待的示例。
Python Selenium Web 驅(qū)動(dòng)程序等待
大多數(shù) Web 應(yīng)用程序都使用 AJAX 技術(shù)。 因此,網(wǎng)頁(yè)上存在的不同元素需要不同的時(shí)間間隔才能完全上傳,因?yàn)槲诰W(wǎng)頁(yè)上存在之前無(wú)法找到任何文本。
我們可能會(huì)發(fā)現(xiàn)某些應(yīng)用程序的網(wǎng)頁(yè)在上傳之前并不存在特定文本。 這會(huì)在測(cè)試應(yīng)用程序時(shí)產(chǎn)生錯(cuò)誤。
這個(gè)問(wèn)題可以通過(guò)等待來(lái)解決。 這些等待在網(wǎng)頁(yè)上搜索元素或任何其他操作時(shí)提供了靈活性。
Selenium Web 驅(qū)動(dòng)程序提供兩種類型的等待。 第一個(gè)是隱式等待,第二個(gè)是顯式等待。
本文討論了這兩種等待類型的詳細(xì)信息。
Selenium Web 驅(qū)動(dòng)程序中的隱式等待
由于網(wǎng)速慢或網(wǎng)站響應(yīng)慢,有時(shí)我們需要等待幾秒鐘才能獲得所有結(jié)果。 對(duì)于這種情況,隱式等待效果最好。
隱式等待告訴 Web 驅(qū)動(dòng)程序在特定時(shí)間輪詢 DOM,同時(shí)查找元素,以便在我們的 Web 驅(qū)動(dòng)程序獲取元素時(shí)使所有元素可用。 該進(jìn)程的默認(rèn)設(shè)置為 0。
一旦我們?cè)O(shè)置了隱式等待,它將持續(xù)到 Web 驅(qū)動(dòng)程序?qū)ο蟮纳芷凇?/p>
只要我們運(yùn)行相同的網(wǎng)絡(luò)驅(qū)動(dòng)程序而不關(guān)閉或重新啟動(dòng)并更改等待值,它就會(huì)是相同的量。
讓我們來(lái)看一個(gè)示例,我們將訪問(wèn)一個(gè)網(wǎng)站并等待 10 秒鐘,然后單擊“關(guān)于我們”頁(yè)面鏈接,如下所示。
示例代碼:
# python
from selenium import webdriver
ChromeDriver = webdriver.Chrome()
ChromeDriver.implicitly_wait(10)
ChromeDriver.get("https://www.inventicosolutions.com/")
getElemByLink = ChromeDriver.find_element_by_link_text("About Us")
getElemByLink.click()輸出:

從上面的示例中可以看到,加載頁(yè)面后,它等待了整整 10 秒,然后才轉(zhuǎn)到“關(guān)于我們”頁(yè)面。
Selenium Web 驅(qū)動(dòng)程序中的顯式等待
顯式等待是一種定義為等待特定條件發(fā)生并在代碼中進(jìn)一步處理的代碼類型。 顯式等待的極端情況是 time.sleep()。
這將等待的條件設(shè)置為精確的時(shí)間段。
一些適當(dāng)?shù)姆椒梢詭椭覀兙帉戯@式的代碼。 顯式等待是使用 Web 驅(qū)動(dòng)程序等待類并與 Expected_conditions 相結(jié)合來(lái)實(shí)現(xiàn)的。
如下所示,讓我們看一個(gè)示例,其中我們將使用顯式等待而不是隱式等待。
示例代碼:
# python
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as ExpectedCond
chromeDriver = webdriver.Chrome()
chromeDriver.get("https://inventicosolutions.com")
getElembyLinkText = WebDriverWait(chromeDriver, 10).until(ExpectedCond.presence_of_element_located((By.LINK_TEXT, "About Us")))
getElembyLinkText.click()
輸出:

上述代碼的超時(shí)值為 10 秒。 Web 驅(qū)動(dòng)程序?qū)⒌却?10 秒,然后拋出超時(shí)異常。
應(yīng)用程序的網(wǎng)頁(yè)地址(URL)和文本元素可以根據(jù)要求用給定的代碼編寫。
Web 驅(qū)動(dòng)程序等待(顯式等待中使用的工具之一)具有這種內(nèi)置質(zhì)量,每 500 毫秒檢查一次預(yù)期條件,直到成功找到文本。
Python 中等待的預(yù)期條件
這些條件在自動(dòng)化 Web 瀏覽器時(shí)最常用,并且在 Web 驅(qū)動(dòng)程序中預(yù)定義。 這些條件包括:
- title_is
- title_contains
- presence_of_element_located
- visibility_of_element_located
- visibility_of
- presence_of_all_elements_located
- text_to_be_present_in_element
- text_to_be_present_in_element_value
- frame_to_be_available_and_switch_to_it
- invisibility_of_element_located
- element_to_be_clickable
- staleness_of
- element_to_be_selected
- element_located_to_be_selected
- element_selection_state_to_be
- element_located_selection_state_to_be
- alert_is_present
我們可以通過(guò)導(dǎo)入以下庫(kù)將這些預(yù)期條件包含在我們的代碼中。
# python from selenium.webdriver.support import expected_conditions as ExpectedCond
Python 中的自定義等待條件
當(dāng)上述方法均不能滿足用戶的要求時(shí),可以創(chuàng)建自定義等待條件。 自定義條件是使用帶有 call() 方法的類創(chuàng)建的。
如下所示,讓我們看一個(gè)示例,在該示例中我們將創(chuàng)建一個(gè)自定義條件并嘗試讓我們的程序等待幾秒鐘。
示例代碼:
# python
class ElementWithClass(object):
def __init__(self, location, className):
self.location = location
self.className = className
def __call__(self, ChromeDriver):
findElem = ChromeDriver.find_element(*self.location)
if self.className in findElem.get_attribute("class"):
return findElem
else:
return False
wait = WebDriverWait(ChromeDriver, 10)
findElem = wait.until(element_has_css_class((By.ID, 'myId'), "myClass"))
如果找到該元素,此代碼將為用戶提供 true,否則返回 false。
因此,我們通過(guò)一些示例討論了在 Python 中添加等待的不同方法。 我們希望您喜歡這個(gè)主題并從中學(xué)到一些東西。
到此這篇關(guān)于詳解Python中如何添加Selenium WebDriver等待的文章就介紹到這了,更多相關(guān)python添加Selenium Web等待內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python根據(jù)字符串語(yǔ)義相似度計(jì)算的多種實(shí)現(xiàn)算法
這篇文章主要介紹了Python根據(jù)字符串語(yǔ)義相似度計(jì)算的多種實(shí)現(xiàn)算法,以下是幾種基于語(yǔ)義的字符串相似度計(jì)算方法,每種方法都會(huì)返回0.0到1.0之間的相似度分?jǐn)?shù)(保留一位小數(shù)),需要的朋友可以參考下2025-07-07
詳談python3 numpy-loadtxt的編碼問(wèn)題
下面小編就為大家分享一篇詳談python3 numpy-loadtxt的編碼問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04
Python腳本連接MySQL數(shù)據(jù)庫(kù)的完整指南
本文將詳細(xì)展示如何使用Python及其pymysql庫(kù)來(lái)連接MySQL數(shù)據(jù)庫(kù)并執(zhí)行SQL語(yǔ)句,除了基本查詢外,還會(huì)介紹如何進(jìn)行數(shù)據(jù)的插入,更新和刪除操作,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2026-01-01
利用pipenv和pyenv管理多個(gè)相互獨(dú)立的Python虛擬開(kāi)發(fā)環(huán)境
這篇文章主要介紹了利用pipenv和pyenv管理多個(gè)相互獨(dú)立的Python虛擬開(kāi)發(fā)環(huán)境,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
Pytest單元測(cè)試框架生成HTML測(cè)試報(bào)告及優(yōu)化的步驟
本文主要介紹了Pytest單元測(cè)試框架生成HTML測(cè)試報(bào)告及優(yōu)化的步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
python?實(shí)現(xiàn)syslog?服務(wù)器的詳細(xì)過(guò)程
這篇文章主要介紹了python?實(shí)現(xiàn)syslog服務(wù)器的詳細(xì)過(guò)程,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08

