詳解Python中如何添加Selenium WebDriver等待
本文將介紹在Python中在Selenium Web驅動程序中添加等待的示例。
Python Selenium Web 驅動程序等待
大多數 Web 應用程序都使用 AJAX 技術。 因此,網頁上存在的不同元素需要不同的時間間隔才能完全上傳,因為硒在網頁上存在之前無法找到任何文本。
我們可能會發(fā)現某些應用程序的網頁在上傳之前并不存在特定文本。 這會在測試應用程序時產生錯誤。
這個問題可以通過等待來解決。 這些等待在網頁上搜索元素或任何其他操作時提供了靈活性。
Selenium Web 驅動程序提供兩種類型的等待。 第一個是隱式等待,第二個是顯式等待。
本文討論了這兩種等待類型的詳細信息。
Selenium Web 驅動程序中的隱式等待
由于網速慢或網站響應慢,有時我們需要等待幾秒鐘才能獲得所有結果。 對于這種情況,隱式等待效果最好。
隱式等待告訴 Web 驅動程序在特定時間輪詢 DOM,同時查找元素,以便在我們的 Web 驅動程序獲取元素時使所有元素可用。 該進程的默認設置為 0。
一旦我們設置了隱式等待,它將持續(xù)到 Web 驅動程序對象的生命周期。
只要我們運行相同的網絡驅動程序而不關閉或重新啟動并更改等待值,它就會是相同的量。
讓我們來看一個示例,我們將訪問一個網站并等待 10 秒鐘,然后單擊“關于我們”頁面鏈接,如下所示。
示例代碼:
# 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()輸出:

從上面的示例中可以看到,加載頁面后,它等待了整整 10 秒,然后才轉到“關于我們”頁面。
Selenium Web 驅動程序中的顯式等待
顯式等待是一種定義為等待特定條件發(fā)生并在代碼中進一步處理的代碼類型。 顯式等待的極端情況是 time.sleep()。
這將等待的條件設置為精確的時間段。
一些適當的方法可以幫助我們編寫顯式的代碼。 顯式等待是使用 Web 驅動程序等待類并與 Expected_conditions 相結合來實現的。
如下所示,讓我們看一個示例,其中我們將使用顯式等待而不是隱式等待。
示例代碼:
# 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()
輸出:

上述代碼的超時值為 10 秒。 Web 驅動程序將等待 10 秒,然后拋出超時異常。
應用程序的網頁地址(URL)和文本元素可以根據要求用給定的代碼編寫。
Web 驅動程序等待(顯式等待中使用的工具之一)具有這種內置質量,每 500 毫秒檢查一次預期條件,直到成功找到文本。
Python 中等待的預期條件
這些條件在自動化 Web 瀏覽器時最常用,并且在 Web 驅動程序中預定義。 這些條件包括:
- 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
我們可以通過導入以下庫將這些預期條件包含在我們的代碼中。
# python from selenium.webdriver.support import expected_conditions as ExpectedCond
Python 中的自定義等待條件
當上述方法均不能滿足用戶的要求時,可以創(chuàng)建自定義等待條件。 自定義條件是使用帶有 call() 方法的類創(chuàng)建的。
如下所示,讓我們看一個示例,在該示例中我們將創(chuàng)建一個自定義條件并嘗試讓我們的程序等待幾秒鐘。
示例代碼:
# 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。
因此,我們通過一些示例討論了在 Python 中添加等待的不同方法。 我們希望您喜歡這個主題并從中學到一些東西。
到此這篇關于詳解Python中如何添加Selenium WebDriver等待的文章就介紹到這了,更多相關python添加Selenium Web等待內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python cookbook(數據結構與算法)實現查找兩個字典相同點的方法
這篇文章主要介紹了Python實現查找兩個字典相同點的方法,涉及Python常見集合運算操作技巧,需要的朋友可以參考下2018-02-02
解決pyinstaller打包exe可執(zhí)行文件后運行找不到pandas或者XXX模塊
這篇文章主要介紹了解決pyinstaller打包exe可執(zhí)行文件后運行找不到pandas或者XXX模塊問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11
pycharm上的python虛擬環(huán)境移到離線機器上的方法步驟
本人在工作中需要在離線Windows環(huán)境中使用,本文主要介紹了pycharm上的python虛擬環(huán)境移到離線機器上的方法步驟,具有一定的參考價值,感興趣的可以了解一下2021-10-10

