一、強(qiáng)制等待? time.sleep()
time模塊中的sleep()方法,程序執(zhí)行到此代碼時(shí)強(qiáng)制等待一段時(shí)間。
1、寫法
time.sleep(time),傳入具體的等待時(shí)間time
# 導(dǎo)入time模塊
import time
from selenium import webdriver
# 創(chuàng)建webdrive的實(shí)例對象
driver = webdriver.Chrome()
# 通過get()方法打開網(wǎng)址
driver.get("https://www.baidu.com/")
# 等待10s后代碼再繼續(xù)往下執(zhí)行
time.sleep(10)
2、優(yōu)點(diǎn)
可以控制等待的具體時(shí)間,一般在調(diào)試代碼時(shí)使用
3、缺點(diǎn)
無法準(zhǔn)確把握需要等待的時(shí)間
如果設(shè)置時(shí)間過短,操作還未完成,等待時(shí)間已到,會導(dǎo)致測試用例執(zhí)行報(bào)錯(cuò),影響測試用例的繼續(xù)執(zhí)行。
如果設(shè)置時(shí)間過長,操作執(zhí)行完畢,等待時(shí)間未到,會浪費(fèi)不必要的等待時(shí)間,影響測試用例的執(zhí)行效率。
二、隱式等待??implicitly_wait()
webdriver對象的implicitly_wait()方法,在設(shè)置時(shí)間內(nèi)周期性的尋找元素。
1、寫法
webdriver對象.implicitly_wait(time),傳入等待的最大時(shí)間time
from selenium import webdriver
# 創(chuàng)建webdrive的實(shí)例對象
driver = webdriver.Chrome()
# 通過get()方法打開網(wǎng)址
driver.get("https://www.baidu.com/")
# 設(shè)置隱式等待最大時(shí)間為10s
driver.implicitly_wait(10)
# 定位元素時(shí),隱式等待全局作用
driver.find_element("id", "kw")
2、優(yōu)點(diǎn)
在設(shè)置時(shí)間內(nèi)周期性(默認(rèn)0.5s)的尋找元素
如果元素還未找到,不會立即拋出異常,只有在超過設(shè)置的最大等待時(shí)間時(shí)才會報(bào)錯(cuò)
如果元素提前找到,就繼續(xù)執(zhí)行后面的代碼,不會浪費(fèi)過多的等待時(shí)間
在整個(gè)driver周期中都起作用,設(shè)置一次全局有效,所有查找元素的操作都會進(jìn)行等待
可以隨時(shí)更改隱式等待的時(shí)間,對更改位置之后的查找元素操作起作用
3、缺點(diǎn)
隱式等待只能解決元素查找問題,不能解決元素交互問題。
頁面加載完成,定位的元素已經(jīng)找到,找到了元素就結(jié)束等待繼續(xù)執(zhí)行之后的代碼。但是可能因?yàn)閖s設(shè)置等情況,元素非可交互狀態(tài),無法通過交互實(shí)現(xiàn)想要的結(jié)果,從而導(dǎo)致報(bào)錯(cuò)。
注:隱式等待只對查找元素起作用。查找元素的操作需要等到頁面加載完成,才會執(zhí)行。因此隱式等待是在頁面完全加載,開始查找元素時(shí)計(jì)時(shí)。
三、顯示等待??WebDriverWait
selenium中的WebDriverWait類,可以針對某一個(gè)元素進(jìn)行等待設(shè)置
使用顯示等待時(shí)一般 WebDriverWait 和 expected_conditions 兩個(gè)類結(jié)合使用
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
1、寫法
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
- driver:webdriver實(shí)例對象
- timeout:最長超時(shí)時(shí)間,以秒為單位
- poll_frequency:檢測的間隔步長,默認(rèn)為0.5s。(可不填)
- ignored_exceptions:超時(shí)后拋出的異常信息,默認(rèn)拋出NoSuchElementExeception異常。(可不填)
until/until_not(self, method, message: str = "")
until():條件成立返回True,等待結(jié)束,如果超時(shí),拋出TimeoutException異常。
until_not():條件不成立返回True,等待結(jié)束,如果超時(shí),拋出TimeoutException異常。
- method:每次輪詢時(shí)執(zhí)行的等待條件。
- message:輪詢超時(shí)后打印的信息。(可不填)
等待條件 method 由 expected_conditions?類提供,一般導(dǎo)入模塊為 EC,并將該模塊提供的方法傳入
from selenium import webdriver
# 導(dǎo)入WebDriverWait 和 expected_conditions
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 創(chuàng)建webdrive的實(shí)例對象
driver = webdriver.Chrome()
# 通過get()方法打開網(wǎng)址
driver.get("https://www.baidu.com/")
# 顯示等待元素為可點(diǎn)擊狀態(tài)
WebDriverWait(driver, 5).until(EC.element_to_be_clickable(("id", "kw")))
# 操作元素
driver.find_element("id", "kw").click()
2、expected_conditions模塊
頁面標(biāo)題內(nèi)容
方法 | 描述 |
---|---|
title_is(title: string) | 精準(zhǔn)匹配頁面標(biāo)題 title |
title_contains(title: string) | 模糊匹配頁面標(biāo)題 title |
元素是否在DOM中
注:元素在 DOM 出現(xiàn)不代表該元素一定可見
方法 | 描述 |
---|---|
presence_of_element_located(locator) | locator 指定的元素出現(xiàn)在 DOM 中 |
presence_of_all_elements_located(locator) | locator 指定的所有元素出現(xiàn)在 DOM 中 |
元素是否可見
方法 | 描述 |
---|---|
visibility_of_element_located(locator) | locator 指定的元素可見 |
visibility_of(element) | 元素 element 可見 |
visibility_of_any_elements_located(locator) | locator 指定的元素中至少一個(gè)可見 |
invisibility_of_element_located(locator) | locator 指定的元素不可見 |
invisibility_of_element(element) | 元素 element 不可見 |
元素是否被選中
方法 | 描述 |
---|---|
element_to_be_selected(element) | 元素 element 被選中 |
element_located_to_be_selected(locator) | locator 指定的元素被選中 |
element_selection_state_to_be(element, is_selected) | 元素 element 的選中狀態(tài)符合 is_selected,True 表示被選中,F(xiàn)alse 表示未選中。 |
element_located_selection_state_to_be(locator, is_selected) | locator 指定元素的選中狀態(tài)符合 is_selected,True 表示被選中,F(xiàn)alse 表示未選中。 |
元素是否可點(diǎn)擊
方法 | 描述 |
---|---|
element_to_be_clickable(mark) | 元素可見并可點(diǎn)擊,mark 可以是 locator,也可以是 element |
元素是否存在
方法 | 描述 |
---|---|
staleness_of(element) | 元素 element 存在,在等待時(shí)間內(nèi)被移除 |
元素文本內(nèi)容
方法 | 描述 |
---|---|
text_to_be_present_in_element(locator, text_) | locator 指定的元素上包含文本 text |
text_to_be_present_in_element_value(locator, text_) | locator 指定的元素的 value 屬性值包含文本 text |
text_to_be_present_in_element_attribute(locator, attribute_, text_) | locator 指定的元素的 attribute 指定的屬性值中包含文本 text |
切換frame
方法 | 描述 |
---|---|
frame_to_be_available_and_switch_to_it(locator) | 切換到 locator 指定的 frame |
頁面窗口狀態(tài)
方法 | 描述 |
---|---|
number_of_windows_to_be(num_windows) | 當(dāng)前窗口數(shù)為 num_windows |
new_window_is_opened(current_handles) | 有新窗口被打開,current_handles 為調(diào)用該方法前的窗口句柄列表 |
alert_is_present() | 出現(xiàn) alert 窗口 |
復(fù)合條件
將等待條件通過逗號或者邏輯操作符連接起來進(jìn)行判定。邏輯操作包括:與、或、非。
方法 | 描述 |
---|---|
all_of(*expected_conditions) | expected_conditions 列表中條件都符合 |
any_of(*expected_conditions) | expected_conditions 列表中條件符合其一 |
none_of(*expected_conditions) | expected_conditions 列表中條件都不符合 |
2、優(yōu)點(diǎn)
可以精確定位元素的狀態(tài),每個(gè)元素分別設(shè)置,不會浪費(fèi)過多的等待時(shí)間,提高測試效率
3、缺點(diǎn)
使用相對比較復(fù)雜。每個(gè)元素要單獨(dú)設(shè)置,無法全局使用。文章來源:http://www.zghlxwxcb.cn/news/detail-771188.html
注:隱式等待和顯示等待可以混合使用,當(dāng)作用于同一個(gè)元素時(shí),等待時(shí)間取決于時(shí)間更長的等待文章來源地址http://www.zghlxwxcb.cn/news/detail-771188.html
到了這里,關(guān)于【selenium】三種等待方式的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!