當瀏覽器在載入頁面時,網路不好、裝置的效能差導致與伺服器進行資料互動慢或者頁面渲染需要時間久等等,這些原因均會導致頁面的元素不是同時被載入完成的,所以元素定位可能會因為elementnotvisibleexception而定位不到,就會降低我們自動化測試指令碼的穩定性;故可通過設定元素等待來改善這種情況。
以下幾種情況是需要等待的
1、網路不好,服
webdriver的三大等待
顯式等待
隱式等待
強制等待
1、顯式等待
顯式等待是webdriver等待某個條件成立則繼續執行,否則在達到最大時長時丟擲異常(timeoutexception)
from selenium import webdriver
from selenium.webdriver.common.by import by
from selenium.webdriver.support.ui import webdriverwait
from selenium.webdriver.support import expected_conditions as ec
driver = webdriver.chrome()
driver.get('
ele = webdriverwait(driver, 10, 0.5).until(ec.visibility_of_element_located((by.id, 'kw')))
ele.send_keys('selenium')
driver.quit()
webdriverwait類是有webdriver提供的等待方法,在設定的時間內,預設每隔一段時間檢查一次當前頁面元素是否可見,如果超出設定時間檢測不到則丟擲異常。具體格式如下:
webdriverwait(driver, timeout,poll_frequency=0.5,ignored_exceptions=none)
driver:瀏覽器驅動
timeout:最長超時時間,預設以秒為單位
poll_frequency:檢測的間隔(步長)時間,預設為0.5 s
ignored_exceptions=none:超時後的異常資訊,預設情況下拋nosuchelementexception異常
webdriverwait()一般由until()或until_not()方法配合使用,下面是until()和until_not()方法的說明。
until(method,message=『』),呼叫該方法提供的驅動程式作為乙個引數,直到返回值為true
until_not(method,message=『』),呼叫該方法提供的驅動程式作為乙個引數,直到返回值為false
2、隱式等待
隱式等待是通過等待一定的時長等待頁面上某元素載入完成。如果超出了設定的時長元素還沒載入完成,則丟擲nosuchelementexception異常。webdriver提供了implicitly_wait()方法來實現隱式等待,預設設定為0.
from selenium import webdriver
from selenium.common.exceptions import
nosuchelementexception
driver = webdriver.chrome()
# 設定隱式等待為10s
driver.implicitly_wait(10)
driver.get('')
try:
driver.find_element_by_id('kw1').send_keys('test')
except nosuchelementexception as e:
print(e)
finally:
print('no exception')
driver.quit()
implicitly_wait()預設引數的單位為秒,而且這時間並非是乙個固定的等待時間,不影響指令碼的執行速度;其次,它也並不針對頁面上的某一元素進行等待。當指令碼執行到某個元素定位時,若定位到則繼續執行指令碼,若定位不到,則它以輪詢的方式不斷地判斷元素是否被定位到。
3、強制等待
當執行指令碼希望在某乙個位置時做固定的等待(休眠),就可以使用time.sleep()方法。
from selenium import webdriver
from time import sleep
driver = webdriver.chrome()
driver.get('')
sleep(5)
ele = driver.find_element_by_id('kw')
ele.click()
如上指令碼所示,當執行到sleep()方法時會休眠5s,然後繼續執行。sleep()預設引數的單位為秒,若設定時長小於1s,則可以用小數點表示,如:sleep(0.5)
webdriver中的三大等待及視窗的切換
一 傻等 適用於等待5s以內 time.sleep seconds 二 隱性等待 implicitly wait 30 乙個會話只需要呼叫一次即可,設定等待上限,比如30s,如果你在30秒內元素出現了,就不等了,去執行下一行 如果30秒還沒有出現,就報錯,超時 driver webdriver.ch...
webdriver中的等待
webdriver中的等待 主要講解webdriverwait 強制等待 sleep import time sleep 5 等待5秒 設定固定休眠時間,單位為秒。由python的time包提供,匯入 time 包後就可以使用。缺點 不智慧型,使用太多的sleep會影響指令碼執行速度。隱式等待 im...
WebDriver元素等待機制
能否構建健壯和可靠的測試是ui自動化測試能否成功的關鍵因素之一。但實際情況是當乙個測試接著乙個測試執行的時候,常會遇到各種不同的狀況。比如指令碼去定位元素或去驗證程式的執行狀態時,有時會發現找不到元素,這可能是由於突然的資源受限或網路延遲等引起響應速度太慢所導致,這時會返回測試失敗的結果。so我們需...