為什么要設(shè)置元素等待直白點(diǎn)說,怕報(bào)錯(cuò),哈哈哈!
肯定有人會(huì)說,這也有點(diǎn)太直白了吧 。
用一句通俗易懂的話就是:等待元素已被加載完全之后,再去定位該元素,就不會(huì)出現(xiàn)定位失敗的報(bào)錯(cuò)了 。
如何避免元素未加載出來而導(dǎo)致定位失敗 ?三種方式,強(qiáng)制等待、隱式等待、顯式等待!
1、強(qiáng)制等待就是sleep() ,也叫硬等待;缺點(diǎn)就是:如果等待時(shí)間過長(zhǎng),即使元素已被加載出來了,但還是要繼續(xù)等,這樣會(huì)導(dǎo)致整個(gè)腳本的執(zhí)行上會(huì)浪費(fèi)很多時(shí)間 。
示例代碼如下:
# 強(qiáng)制等待案例driver.get("http://localhost:8080/wait.html")driver.find_element(By.ID, "wait").click()time.sleep(3)text = driver.find_element(By.ID, "green_box").textprint('text is : '+text)2、隱式等待WebDriver 提供了三種隱性等待方法:
implicitly_wait
NoSuchElementException 異常 。set_script_timeout
WebDriver 可以異步執(zhí)行腳本,這個(gè)是設(shè)置異步執(zhí)行腳本,腳本返回結(jié)果的超時(shí)時(shí)間 。set_page_load_timeout
WebDriver 會(huì)等頁面加載完畢再進(jìn)行后面的操作,所以如果頁面超過設(shè)置時(shí)間依然沒有加載完成,那么 WebDriver 就會(huì)拋出異常 。以上三種都是在整個(gè)webDriver生命周期有效,即全局設(shè)置,相當(dāng)于全局變量!
示例代碼如下:
def init():# 最大化操作driver.maximize_window()driver.set_script_timeout(60)# 智能等待60秒,找到元素后立即繼續(xù)執(zhí)行,全局生效driver.implicitly_wait(60)driver.set_page_load_timeout(60)init()# 強(qiáng)制等待案例driver.get("http://localhost:8080/wait.html")driver.find_element(By.ID, "wait").click()# 硬等待# time.sleep(3)text = driver.find_element(By.ID, "green_box").textprint('text is : '+text)3、顯式等待就是明確的要等到指定元素(相當(dāng)于局部變量)的出現(xiàn)或者是某個(gè)元素的可點(diǎn)擊等條件等到為止,才會(huì)繼續(xù)執(zhí)行后續(xù)操作,等不到,就一直等,如果在規(guī)定的時(shí)間之內(nèi)都沒找到,就會(huì)拋出異常!顯示等待與隱式等待相對(duì),顯示等待必須在每個(gè)需要等待的元素前面進(jìn)行聲明 。
示例代碼如下:
# -*- coding: utf-8 -*-"""@Time : 2022/10/31 8:12 PM@Auth : 軟件測(cè)試君@File :test_wait.py@IDE :PyCharm@Motto:ABC(Always Be Coding)"""from selenium import webdriverfrom selenium.webdriver.chrome.service import Servicefrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.support.wait import WebDriverWaitfrom webdriver_manager.chrome import ChromeDriverManager'''初始化操作'''driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))def init():# 最大化操作driver.maximize_window()init()driver.get("http://localhost:8080/wait.html")driver.find_element(By.ID, "wait").click()# 顯示等待案例# 設(shè)置元素等待實(shí)例,最多等5秒,每0.5秒查看條件是否成立element = WebDriverWait(driver, 5, 0.5).until(EC.presence_of_element_located((By.ID, "green_box")))print('text is : ' + element.text)driver.quit()3.1、顯示等待需要用到兩個(gè)類WebDriverWait和expected_conditions兩個(gè)類 。WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)參數(shù)說明:
driver:瀏覽器驅(qū)動(dòng)timeout:最長(zhǎng)超時(shí)時(shí)間,默認(rèn)以秒為單位poll_frequency:
經(jīng)驗(yàn)總結(jié)擴(kuò)展閱讀
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 辟邪植物盆栽有哪些 六大辟邪盆栽植物排行榜
- 什么盆栽越久越值錢 越養(yǎng)越貴的六種盆栽排行榜
- 沙發(fā)旁邊適合放什么植物 沙發(fā)邊上適合放的六種盆栽植物排行榜
- flutter 系列之:flutter 中的幽靈offstage
- 女性辦公室適合放什么植物 辦公室適合擺放的六大植物排行榜
- Redis系列8:Bitmap實(shí)現(xiàn)億萬級(jí)數(shù)據(jù)計(jì)算
- .NET性能系列文章二:Newtonsoft.Json vs. System.Text.Json
- 夢(mèng)幻西游手游妙法試煉第六章怎么通關(guān)
- 之六 2流高手速成記:從SpringBoot到SpringCloudAlibaba
- 筷子的長(zhǎng)度為什么是七寸六分
