一、為什麼要元素等待?
在ui自動化過程中,元素的出現受網路環境、裝置效能等多種元素影響。因此,元素載入和指令碼執行到該元素的時間不一致,會報錯:元素無法定位。
簡單舉下例子:實際ui自動化測試中,點選乙個登入控制項需要啟動乙個新activity介面,或需要載入彈框,或請求網路載入資料成功後重新整理頁面,此時需要等待一段時間,新介面出現了才能繼續執行ui操作,否則資料還在載入ing,指令碼已開始執行新介面操作的**,指令碼就會報錯。
二、元素等待的作用
設定元素等待,增強指令碼的健壯性,提高執行效率;
本質是為了解決時序不匹配:指令碼執行時,指令碼的執行速度和頁面元素的載入速度未必一致
三、元素等待型別
強制等待:死等待,設定固定的等待時間 -- sleep(2) # 強制等待2s,要匯入時間包(import time)
隱性等待:針對全域性元素設定的等待時間 -- driver.implicitly_wait(5)
顯性等待:針對某個元素來設定的等待時間 -- webdriverwait(driver,timeout,poll_frequency=0.5,ignored_exception=none),要匯入包(from selenium.webdriver.support.ui import webdriverwait)
四、怎麼設定元素等待
1.強制等待的應用例項:
webdriver
import
time
desired_caps ={}
desired_caps[
'platformname
'] = '
android
'desired_caps[
'platformversion
'] = '
5.1.1
'desired_caps[
'devicename
'] = '
127.0.0.1:62001
'desired_caps[
'packagename
'] = '
com.cnblogs.android
'desired_caps[
'packagactivity
'] = '
com.cnblogs.android.splashactivity
'desired_caps[
'unicodekeyboard
'] =true
desired_caps[
'resetkeyboard
'] =true
driver = webdriver.remote('
',desired_caps)
#強制等待5s,不管等待的元素是否出現,都要等5s
time.sleep(5)
driver.find_element_by_id(
'com.cnblogs.android:id/tabsearch
').click()
time.sleep(2)
driver.find_element_by_id(
'com.cnblogs.android:id/txtsearch
').send_keys('方緣'
)driver.find_element_by_id(
'com.cnblogs.android:id/search_btn
').click()
driver.quit()
2.隱性等待:
webdriver
import
time
desired_caps ={}
desired_caps[
'platformname
'] = '
android
'desired_caps[
'platformversion
'] = '
5.1.1
'desired_caps[
'devicename
'] = '
127.0.0.1:62001
'desired_caps[
'packagename
'] = '
com.cnblogs.android
'desired_caps[
'packagactivity
'] = '
com.cnblogs.android.splashactivity
'desired_caps[
'unicodekeyboard
'] =true
desired_caps[
'resetkeyboard
'] =true
driver = webdriver.remote('
',desired_caps)
#隱性等待(等待所有元素),最長3s
driver.implicitly_wait(3)
driver.find_element_by_id(
'com.cnblogs.android:id/tabsearch
').click()
time.sleep(2)
driver.find_element_by_id(
'com.cnblogs.android:id/txtsearch
').send_keys('方緣'
)driver.find_element_by_id(
'com.cnblogs.android:id/search_btn
').click()
driver.quit()
3.顯性等待:
webdriver
from selenium.webdriver.support.ui import
webdriverwait
import
time
desired_caps ={}
desired_caps[
'platformname
'] = '
android
'desired_caps[
'platformversion
'] = '
5.1.1
'desired_caps[
'devicename
'] = '
127.0.0.1:62001
'desired_caps[
'packagename
'] = '
com.cnblogs.android
'desired_caps[
'packagactivity
'] = '
com.cnblogs.android.splashactivity
'desired_caps[
'unicodekeyboard
'] =true
desired_caps[
'resetkeyboard
'] =true
driver = webdriver.remote('
',desired_caps)
#顯性等待(等待特定元素出現)
#lambda 提供了乙個執行時動態建立函式的方法。
webdriverwait(driver,3).until(lambda x: x.find_element_by_id('
com.cnblogs.android:id/tabsearch
')).click()
driver.find_element_by_id(
'com.cnblogs.android:id/tabsearch
').click()
time.sleep(2)
driver.find_element_by_id(
'com.cnblogs.android:id/txtsearch
').send_keys('方緣'
)driver.find_element_by_id(
'com.cnblogs.android:id/search_btn
').click()
driver.quit()
webdrive 元素等待
1.顯示等待是針對某乙個元素進行相關等待判定 2.隱式等待不針對某乙個元素進行等待,全域性元素等待。1.webdriverwait 顯示等待針對元素必用 2.nosuchelementexception 用於隱式等待丟擲異常 3.by 用於元素定位 顯示等待from selenium import ...
Selenium 元素等待
這是乙個在寫自動化指令碼時經常遇到的問題。試想這樣的乙個場景,通過指令碼開啟乙個網頁,可是由於網路的問題頁面並沒有及時載入進來,這時候如果已經執行到之後查詢元素的 那麼勢必會丟擲錯誤找不到相應元素,而事實並非如此。如果沒有合適的元素等待處理,這樣的測試 不僅不夠健壯,過多的誤報會消耗測試人員大量的精...
Selenium元素等待
一 為什麼要使用元素等待?原因 由於電腦配置或者網路原因,在查詢元素時,元素 未在第一時間內被載入出來,而丟擲未能找到元素的異常。二 什麼是元素等待?元素在第一次未找到時,元素等待設定的時長被啟用,如果在設定的有效時長內找到元素,繼續執行 如果超出設定的時長未找到元素,丟擲未找到元素異常。三 元素等...