Python自動化中三種等待時間方式
Python自動化三種等待時間方式
自動化測試,是交由機器來執(zhí)行的一種測試手段,用于提升測試效率,意味著每一次的自動化測試都需要有非常高的成功率,才可以達到提升效率的作用。
在自動化測試中,其實就是通過代碼,來執(zhí)行測試的流程,也就意味著機器自己對頁面元素來進行操作,如果說因為頁面加載速度過慢,導致元素無法被第一時間找到,則報錯,停止本次自動化測試,通過添加等待的方法,讓代碼在運行時,會進行等待頁面加載的操作,以便于更好的進行元素查找。通過等待會讓自動化測試變得更加穩(wěn)定。
我們平常用到的有三種等待方式:強制等待、隱式等待、顯式等待
1.強制等待
強制等待是最簡單的一種等待方式,強制讓瀏覽器等待X秒,不管當前操作是否完成,是否可以進行下一步操作,都必須等X秒的時間。
使用方法:
time.sleep(X)或者sleep(X)。在python中是基于time模塊的sleep方法來實現(xiàn)。
缺點:
- 不能準確把握需要等待的時間(有時操作還未完成,等待就結束了,導致報錯;有時操作已經(jīng)完成了,但等待時間還沒有到,浪費時間)
- 如果在用例中大量使用,會浪費不必要的等待時間,影響測試用例的執(zhí)行效率。
優(yōu)點:
- 使用簡單
- 可以在調試時使用。
案例1:????
from selenium import webdriver # 導包 import time driver = webdriver.Chrome() # 訪問百度 driver.get('https://www.baidu.com') # 搜索框輸入 明月 driver.find_element_by_id('kw').send_keys('明月') # 點擊百度一下按鈕 driver.find_element_by_id('su').click() # 強制等待 time.sleep(3) # 點擊結果中的某一個鏈接 driver.find_element_by_xpath('//a[@aria-label="明月,百度百科"]').click() driver.quit()
2.隱式等待
隱式等待是設置了一個最長等待時間,如果在規(guī)定時間內網(wǎng)頁加載完成,則執(zhí)行下一步,否則一直等到時間結束,然后再執(zhí)行下一步操作。
使用方法:
driver.implicitly_wait(X)。在X時間內,頁面加載完成,進行下一步操作。
缺點:
- 使用隱式等待,程序會一直等待整個頁面加載完成,才會執(zhí)行下一步操作;但有時候頁面想要的元素早已經(jīng)加載完成了,但是因為網(wǎng)頁上個別元素還沒有加載完成,仍要等到頁面全部完成才能執(zhí)行下一步,使用也不是很靈活。
- 在等待時間內頁面沒有加載完成,時間一到也會進入下一步操作;這種情況可能出現(xiàn)要定位的元素沒有出現(xiàn),從而報元素無法找到的錯誤。
優(yōu)點:
- 隱性等待對整個driver的周期都起作用
- 每一次操作都會調用隱式等待,所以只要設置一次即可。
案例2:
from selenium import webdriver driver = webdriver.Chrome()# 隱式等待 driver.implicitly_wait(10) # 訪問百度 driver.get('https://www.baidu.com') driver.find_element_by_id('kw').send_keys('明月')# 點擊百度一下按鈕driver.find_element_by_id('su').click()# 點擊結果中的某一個鏈接driver.find_element_by_xpath('//a[@aria-label="明月"]').click() driver.quit()
3.顯式等待
顯性等待是對指定元素進行等待的一種等待方式。
通過設置最大等待時間,檢查頻率對頁面的元素來進行等待,一旦找到元素,則停止等待,進入后續(xù)步驟。
它主要的意思就是:程序每隔X秒看一眼,如果條件成立了,則執(zhí)行下一步,否則繼續(xù)等待,直到超過設置的最長時間,然后拋出TimeoutException異常。
缺點:
- 使用相對比較復雜;
- 和強制等待類似,每一行等待只執(zhí)行一次,如果要進行多個元素的等待,則需要多次寫入
優(yōu)點:
- 等待判斷準確,不會浪費多余的等待時間
- 在用例中使用,可以提高執(zhí)行效率。
使用方法:
from selenium.webdriver.support.wait import WebDriverWait WebDriverWait(driver, timeout, poll_frequency=0.5,ignored_exceptions=None).until(method, message='') # driver:瀏覽器驅動 # timeout:最大等待時間# poll_frequency:檢測的間隔時間,默認0.5 # ignored_exceptions:超時后的異常信息,默認拋出NoSuchElementException # until()方法:直到條件成立返回為真,等待結束。如果超時,拋出TimeoutException,將message傳入異常 # method:在等待期間,每隔一段時間調用這個傳入的方法,直到返回值不是False,一般使用lambda匿名函數(shù) # message:提示信息,出現(xiàn)異常時會將這個信息輸出在控制臺
案例3:
from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait driver=webdriver.Chrome() # 訪問百度 driver.get("https://www.baidu.com") # 搜索框輸入明月 driver.find_element_by_id('kw').send_keys('明月') # 點擊百度一下按鈕 driver.find_element_by_id('su').click() # 鏈接元素的xpath路徑 path = '//a[@aria-label="明月"]' # 顯示等待:等待結果中要點擊的某個鏈接元素出現(xiàn) WebDriverWait(driver,10).until(lambda x:x.find_element_by_xpath(path),message='元素沒有顯示') # 點擊結果中的某一個鏈接 driver.find_element_by_xpath(path).click() driver.quit()
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
python數(shù)據(jù)分析工具之 matplotlib詳解
對于 Python 來說,matplotlib 是最著名的繪圖庫,它主要用于二維繪圖,當然也可以進行簡單的三維繪圖。這篇文章主要介紹了python數(shù)據(jù)分析工具之 matplotlib的相關知識,需要的朋友可以參考下2020-04-04如何將Pycharm中Terminal使用Powershell作為終端
這篇文章主要介紹了如何將Pycharm中Terminal使用Powershell作為終端問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-05-05