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

Selenium?三種等待方式(強(qiáng)制等待、隱式等待、顯示等待)

 更新時(shí)間:2022年02月15日 08:35:15   作者:小碼哥說測(cè)試  
這篇文章主要介紹了Selenium?三種等待方式(強(qiáng)制等待、隱式等待、顯示等待),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

1、強(qiáng)制等待(sleep)

from time import sleep
sleep(3)  # 強(qiáng)制等待3秒

缺點(diǎn):由于Web加載的速度取決于測(cè)試的硬件、網(wǎng)速、服務(wù)器的響應(yīng)時(shí)間等因素。如果等待時(shí)間太長(zhǎng),容易造成時(shí)間浪費(fèi),如果等待時(shí)間太短又可能會(huì)造成在web還沒有加載完所需要定位的element,而出現(xiàn)報(bào)錯(cuò)。
由于等待時(shí)間無法確定,使用太多的sleep會(huì)影響運(yùn)行速度,大大地降低效率,所以建議測(cè)試中盡量少使用強(qiáng)制等待。

2、隱式等待 ( implicitly_wait)

# 隱式等待10s
driver.implicitly_wait(10) 

簡(jiǎn)介:隱式等待是全局的是針對(duì)所有元素,設(shè)置等待時(shí)間如10秒,如果10秒內(nèi)出現(xiàn),則繼續(xù)向下,否則拋異常??梢岳斫鉃樵?0秒以內(nèi),不停刷新看元素是否加載出來。

使用場(chǎng)景:隱式等待只需要聲明一次,一般在打開瀏覽器后進(jìn)行聲明。聲明之后對(duì)整個(gè)drvier的生命周期都有效,后面不用重復(fù)聲明。隱式等待存在一個(gè)問題,那就是程序會(huì)一直等待整個(gè)頁面加載完成,也就是一般情況下你看到瀏覽器標(biāo)簽欄那個(gè)小圈不再轉(zhuǎn),才會(huì)執(zhí)行下一步,但有時(shí)候頁面想要的元素早就在加載完成了,但是因?yàn)閭€(gè)別js之類的東西特別慢,仍得等到頁面全部完成才能執(zhí)行下一步。

3、顯示等待 ( expected_conditions)

簡(jiǎn)介:顯示等待是單獨(dú)針對(duì)某個(gè)元素,設(shè)置一個(gè)等待時(shí)間如5秒,每隔0.5秒檢查一次是否出現(xiàn),如果在5秒之前任何時(shí)候出現(xiàn),則繼續(xù)向下,一般需要配合該類的 until() 和 until_not() 方法一起用,直到超過設(shè)置的最長(zhǎng)時(shí)間,然后拋出超時(shí)錯(cuò)誤 TimeoutException,以下介紹幾個(gè)最常用的方法:

1. 判斷element是否可見:visibility_of_element_located(locator) (可見代表element非隱藏,并且element寬和高都不等于 0)

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
# 示例
target = EC.visibility_of_element_located(By.ID,'user')
?
# 配合until()使用(等待元素可見)
# 5表示 最長(zhǎng)超時(shí)時(shí)間,默認(rèn)以秒為單位; 1表示檢測(cè)的間隔步長(zhǎng),在等待期間,每隔一定時(shí)間(默認(rèn)0.5秒),調(diào)用until或until_not里的方法,直到它返回True或False.
WebDriverWait(driver, 5, 1).until(EC.visibility_of_element_located(By.ID,'user'))
# 配合until_not()使用(等待元素不可見)
WebDriverWait(driver, 5, 1).until_not(EC.visibility_of_element_located(By.ID,'user'))
?
# 在類中封裝為一個(gè)函數(shù)
? ? def wait_eleLocated(self, loc, timeout=30, poll_frequency=0.5, model=None):
? ? ? ? """
? ? ? ? :param loc:元素定位表達(dá);元組類型,表達(dá)方式(元素定位類型,元素定位方法),示例:(By.ID, "kw")
? ? ? ? :param timeout:超時(shí)時(shí)間
? ? ? ? :param poll_frequency:輪詢頻率
? ? ? ? :param model:等待失敗時(shí),截圖操作,圖片文件中需要表達(dá)的功能標(biāo)注
? ? ? ? :return:None
? ? ? ? """
? ? ? ? self.logger.info(f'等待"{model}"元素,定位方式:{loc}')
? ? ? ? try:
? ? ? ? ? ? start = datetime.now()
? ? ? ? ? ? WebDriverWait(self.driver, timeout, poll_frequency).until(EC.visibility_of_element_located(loc))
? ? ? ? ? ? end = datetime.now()
? ? ? ? ? ? self.logger.info(f'等待"{model}"時(shí)長(zhǎng):{end - start}')
? ? ? ? except TimeoutException:
? ? ? ? ? ? self.logger.exception(f'等待"{model}"元素失敗,定位方式:{loc}')
? ? ? ? ? ? # 截圖
? ? ? ? ? ? self.save_webImgs(f"等待元素[{model}]出現(xiàn)異常")
? ? ? ? ? ? raise

2. 判斷某個(gè)element是否被加載到dom樹:presence_of_element_located(locator) (并不代表該element一定可見)

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
?
target = EC.presence_of_element_located(By.ID,'user')

3. 判斷某個(gè)element中是否可見并且可點(diǎn)擊:element_to_be_clickable(locator)

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
?
target = EC.element_to_be_clickable(By.ID,'user')

4. 判斷某個(gè)element是否被選中:element_to_be_selected(element) (一般用在下拉列表)

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
?
element = driver.find_element_by_class_name('selector')
EC.element_to_be_selected(element)

到此這篇關(guān)于Selenium 三種等待方式(強(qiáng)制等待、隱式等待、顯示等待)的文章就介紹到這了,更多相關(guān)Selenium 等待方式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python opencv檢測(cè)目標(biāo)顏色的實(shí)例講解

    python opencv檢測(cè)目標(biāo)顏色的實(shí)例講解

    下面小編就為大家分享一篇python opencv檢測(cè)目標(biāo)顏色的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • zip在python中的用法小結(jié)

    zip在python中的用法小結(jié)

    Python中的zip函數(shù)是一個(gè)非常有用的工具,可以幫助我們同時(shí)處理多個(gè)可迭代對(duì)象,通過使用zip函數(shù),我們可以將多個(gè)列表或迭代器中的元素打包成一個(gè)個(gè)元組,然后返回由這些元組組成的列表,這篇文章介紹zip在python中的用法,感興趣的朋友一起看看吧
    2024-02-02
  • Python3使用tesserocr識(shí)別字母數(shù)字驗(yàn)證碼的實(shí)現(xiàn)

    Python3使用tesserocr識(shí)別字母數(shù)字驗(yàn)證碼的實(shí)現(xiàn)

    這篇文章主要介紹了Python3使用tesserocr識(shí)別字母數(shù)字驗(yàn)證碼的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • python pandas 如何替換某列的一個(gè)值

    python pandas 如何替換某列的一個(gè)值

    python pandas 如何替換某列的一個(gè)值?今天小編就為大家分享一篇python pandas 實(shí)現(xiàn)替換某列的一個(gè)值方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助
    2018-06-06
  • python 如何讀取列表中字典的value值

    python 如何讀取列表中字典的value值

    這篇文章主要介紹了python 如何讀取列表中字典的value值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Python高級(jí)特性——詳解多維數(shù)組切片(Slice)

    Python高級(jí)特性——詳解多維數(shù)組切片(Slice)

    今天小編就為大家分享一篇Python高級(jí)特性——詳解多維數(shù)組切片(Slice),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • Python階乘求和的代碼詳解

    Python階乘求和的代碼詳解

    在本篇文章里小編給大家整理的是關(guān)于Python階乘求和的代碼實(shí)例,有需要的朋友們可以跟著學(xué)習(xí)下。
    2020-02-02
  • 利用Python生成文件md5校驗(yàn)值函數(shù)的方法

    利用Python生成文件md5校驗(yàn)值函數(shù)的方法

    這篇文章主要給大家介紹了利用Python生成文件md5校驗(yàn)值函數(shù)的方法,文中給出了詳細(xì)的示例代碼,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,有需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-01-01
  • Django 接收Post請(qǐng)求數(shù)據(jù),并保存到數(shù)據(jù)庫的實(shí)現(xiàn)方法

    Django 接收Post請(qǐng)求數(shù)據(jù),并保存到數(shù)據(jù)庫的實(shí)現(xiàn)方法

    今天小編就為大家分享一篇Django 接收Post請(qǐng)求數(shù)據(jù),并保存到數(shù)據(jù)庫的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python 剪繩子的多種思路實(shí)現(xiàn)(動(dòng)態(tài)規(guī)劃和貪心)

    Python 剪繩子的多種思路實(shí)現(xiàn)(動(dòng)態(tài)規(guī)劃和貪心)

    這篇文章主要介紹了Python 剪繩子的多種思路實(shí)現(xiàn)(動(dòng)態(tài)規(guī)劃和貪心),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02

最新評(píng)論