python如何實現元素等待

2022-04-07 16:10:05 字數 4130 閱讀 1695

一、為什麼要元素等待?

在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元素等待

一 為什麼要使用元素等待?原因 由於電腦配置或者網路原因,在查詢元素時,元素 未在第一時間內被載入出來,而丟擲未能找到元素的異常。二 什麼是元素等待?元素在第一次未找到時,元素等待設定的時長被啟用,如果在設定的有效時長內找到元素,繼續執行 如果超出設定的時長未找到元素,丟擲未找到元素異常。三 元素等...