Python實(shí)現(xiàn)元素等待代碼實(shí)例
這篇文章主要介紹了python實(shí)現(xiàn)元素等待代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
一、為什么要元素等待?
在UI自動(dòng)化過程中,元素的出現(xiàn)受網(wǎng)絡(luò)環(huán)境、設(shè)備性能等多種元素影響。因此,元素加載和腳本運(yùn)行到該元素的時(shí)間不一致,會(huì)報(bào)錯(cuò):元素?zé)o法定位。
簡(jiǎn)單舉下例子:實(shí)際UI自動(dòng)化測(cè)試中,點(diǎn)擊一個(gè)登錄控件需要啟動(dòng)一個(gè)新activity界面,或需要加載彈框,或請(qǐng)求網(wǎng)絡(luò)加載數(shù)據(jù)成功后刷新頁面,此時(shí)需要等待一段時(shí)間,新界面出現(xiàn)了才能繼續(xù)執(zhí)行UI操作,否則數(shù)據(jù)還在加載ing,腳本已開始執(zhí)行新界面操作的代碼,腳本就會(huì)報(bào)錯(cuò)。
二、元素等待的作用
- 設(shè)置元素等待,增強(qiáng)腳本的健壯性,提高執(zhí)行效率;
- 本質(zhì)是為了解決時(shí)序不匹配:腳本執(zhí)行時(shí),腳本的執(zhí)行速度和頁面元素的加載速度未必一致
三、元素等待類型
- 強(qiáng)制等待:死等待,設(shè)置固定的等待時(shí)間 -- sleep(2) # 強(qiáng)制等待5s,要導(dǎo)入時(shí)間包(import time)
- 隱性等待:針對(duì)全度元素設(shè)置的等待時(shí)間 -- driver.implicitly_wait(5)
- 顯性等待:針對(duì)某個(gè)元素來設(shè)置的等待時(shí)間 -- WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exception=None),要導(dǎo)入包(from selenium.webdriver.support.ui import WebDriverWait)
四、怎么設(shè)置元素等待
1.強(qiáng)制等待的應(yīng)用實(shí)例:
from appium import 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('http://127.0.0.1:8888/wd/hub',desired_caps) # 強(qiáng)制等待5s,不管等待的元素是否出現(xiàn),都要等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.隱性等待:
from appium import 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('http://127.0.0.1:8888/wd/hub',desired_caps) # 隱性等待(等待所有元素),最長(zhǎng)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.顯性等待:
from appium import 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('http://127.0.0.1:8888/wd/hub',desired_caps) # 顯性等待(等待特定元素出現(xiàn)) # lambda 提供了一個(gè)運(yùn)行時(shí)動(dòng)態(tài)創(chuàng)建函數(shù)的方法。 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()
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python數(shù)據(jù)結(jié)構(gòu)之棧、隊(duì)列及雙端隊(duì)列
在上一章的學(xué)習(xí)中,我們主要學(xué)習(xí)了怎么去衡量一個(gè)算法的好壞,比較常見的方式是使用大O記法,就是所謂的時(shí)間復(fù)雜度,這一章節(jié)我來學(xué)習(xí)基本的數(shù)據(jù)結(jié)構(gòu),如棧、隊(duì)列和雙端隊(duì)列等等。感興趣的小伙伴可以參考一下2021-12-12解決pytorch 損失函數(shù)中輸入輸出不匹配的問題
這篇文章主要介紹了解決pytorch 損失函數(shù)中輸入輸出不匹配的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06Python3日期與時(shí)間戳轉(zhuǎn)換的幾種方法詳解
我們可以利用內(nèi)置模塊 datetime 獲取當(dāng)前時(shí)間,然后將其轉(zhuǎn)換為對(duì)應(yīng)的時(shí)間戳。這篇文章主要介紹了Python3日期與時(shí)間戳轉(zhuǎn)換的幾種方法,需要的朋友可以參考下2019-06-06實(shí)現(xiàn)Python3數(shù)組旋轉(zhuǎn)的3種算法實(shí)例
在本篇文章里小編給大家整理的是一篇關(guān)于實(shí)現(xiàn)Python3數(shù)組旋轉(zhuǎn)的3種算法實(shí)例內(nèi)容,需要的朋友們可以學(xué)習(xí)參考下。2020-09-09Python中%是什么意思?python中百分號(hào)如何使用?
最近在學(xué)習(xí)python過程中,發(fā)現(xiàn)了%的一些情況,這里就簡(jiǎn)單介紹一下,,需要的朋友可以參考下2018-03-03NumPy.npy與pandas DataFrame的實(shí)例講解
今天小編就為大家分享一篇NumPy.npy與pandas DataFrame的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-07-07