欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Python中如何添加Selenium WebDriver等待

 更新時(shí)間:2023年11月05日 10:39:32   作者:跡憶客  
Selenium Web 驅(qū)動(dòng)程序提供兩種類型的等待, 第一個(gè)是隱式等待,第二個(gè)是顯式等待,本文主要為大家介紹了Python如何在Selenium Web驅(qū)動(dòng)程序中添加這兩種等待,需要的可以參考下

本文將介紹在Python中在Selenium Web驅(qū)動(dòng)程序中添加等待的示例。

Python Selenium Web 驅(qū)動(dòng)程序等待

大多數(shù) Web 應(yīng)用程序都使用 AJAX 技術(shù)。 因此,網(wǎng)頁上存在的不同元素需要不同的時(shí)間間隔才能完全上傳,因?yàn)槲诰W(wǎng)頁上存在之前無法找到任何文本。

我們可能會(huì)發(fā)現(xiàn)某些應(yīng)用程序的網(wǎng)頁在上傳之前并不存在特定文本。 這會(huì)在測(cè)試應(yīng)用程序時(shí)產(chǎn)生錯(cuò)誤。

這個(gè)問題可以通過等待來解決。 這些等待在網(wǎng)頁上搜索元素或任何其他操作時(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ì)是相同的量。

讓我們來看一個(gè)示例,我們將訪問一個(gè)網(wǎng)站并等待 10 秒鐘,然后單擊“關(guān)于我們”頁面鏈接,如下所示。

示例代碼:

# 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 秒,然后才轉(zhuǎn)到“關(guān)于我們”頁面。

Selenium Web 驅(qū)動(dòng)程序中的顯式等待

顯式等待是一種定義為等待特定條件發(fā)生并在代碼中進(jìn)一步處理的代碼類型。 顯式等待的極端情況是 time.sleep()。

這將等待的條件設(shè)置為精確的時(shí)間段。

一些適當(dāng)?shù)姆椒梢詭椭覀兙帉戯@式的代碼。 顯式等待是使用 Web 驅(qū)動(dòng)程序等待類并與 Expected_conditions 相結(jié)合來實(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)頁地址(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

我們可以通過導(dǎo)入以下庫將這些預(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。

因此,我們通過一些示例討論了在 Python 中添加等待的不同方法。 我們希望您喜歡這個(gè)主題并從中學(xué)到一些東西。

到此這篇關(guān)于詳解Python中如何添加Selenium WebDriver等待的文章就介紹到這了,更多相關(guān)python添加Selenium Web等待內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論