簡(jiǎn)介
許仙小時(shí)候最喜歡吃又甜又軟的湯圓了,一次一顆湯圓落入西湖,被一條小白蛇銜走了。十幾年后,一位身著白衣、有青衣丫鬟相伴的美麗女子與許仙相識(shí)了,她叫白娘子。白娘子聰明又善良,兩個(gè)人很快走到了一起。靠著自己的力量,他們過(guò)上了幸福的生活。一天,僧人法海找到許仙,警告說(shuō)白娘子是一條修行千年的蛇精,許仙不信。到了端午節(jié),勉強(qiáng)喝下了雄黃酒的白娘子現(xiàn)了原形,許仙被嚇得昏死過(guò)去。原來(lái)白娘子真的是之前吃下許仙湯圓的小蛇。白娘子辛苦救回了許仙的性命,但之后法海卻以保護(hù)許仙的名義將他囚禁起來(lái),白娘子與小青召集蝦兵蟹將,要逼法海放出許仙。突然一座寶塔從天而降,把白娘子鎮(zhèn)在了塔下……??想必小伙伴和童鞋們都聽(tīng)過(guò),或者是看過(guò)這個(gè)故事,是多么的癡情感人,尤其是千年等一回的歌曲是一個(gè)經(jīng)典音樂(lè)。好了廢話還是少說(shuō),進(jìn)入今天的主題--元素等待
前邊介紹了APP頁(yè)面元素的識(shí)別定位、操作等技術(shù),可能你會(huì)覺(jué)得掌握這兩項(xiàng)技術(shù)就可以實(shí)施APP自動(dòng)化了,答案基本是這樣的,畢竟元素定位和操作是核心技術(shù)。但是,在某些場(chǎng)景,腳本的運(yùn)行并非預(yù)期那樣,如,要操作的元素用常規(guī)方法無(wú)法識(shí)別、元素可以識(shí)別但在腳本運(yùn)行時(shí)卻未如期而至等。為了解決這些疑難雜癥,接下來(lái)內(nèi)容將會(huì)介紹處理這些問(wèn)題的通用方法。
在本節(jié),主要介紹元素等待的使用方法和場(chǎng)景,該方法是開(kāi)發(fā)穩(wěn)定、高容錯(cuò)性自動(dòng)化腳本的前提。
思考
在自動(dòng)化過(guò)程中,元素出現(xiàn)受網(wǎng)絡(luò)環(huán)境,設(shè)備性能等多種因素影響。因此元素加載的時(shí)間可能不一致,從而會(huì)導(dǎo)致 元素?zé)o法定位超時(shí)報(bào)錯(cuò),但是實(shí)際上元素是正常加載了的,只是出現(xiàn)時(shí)間晚一點(diǎn)而已。那么如何解決這個(gè)問(wèn)題呢?
實(shí)際測(cè)試過(guò)程中,比如點(diǎn)擊一個(gè)控件需要啟動(dòng)一個(gè)新activiy界面,或需要加載彈框,或請(qǐng)求網(wǎng)絡(luò)加載數(shù)據(jù)成功后刷新界面,此時(shí)需要等待一段時(shí)間,新界面出現(xiàn)了才能繼續(xù)執(zhí)行UI操作,否則還在加載中,程序已開(kāi)始執(zhí)行新界面操作的代碼,腳本就會(huì)報(bào)錯(cuò)了。
元素等待作用
1.設(shè)置元素等待可以更加靈活的制定等待定位元素的時(shí)間,從而增強(qiáng)腳本的健壯性,提高執(zhí)行效率。
2.元素等待是為了解決如下場(chǎng)景的問(wèn)題:腳本執(zhí)行時(shí),腳本的執(zhí)行速度和頁(yè)面元素的加載速度未必一致,也就是說(shuō),可能出現(xiàn)腳本已經(jīng)運(yùn)行到某個(gè)元素,但該元素尚未加載到頁(yè)面,此時(shí)腳本會(huì)因無(wú)法定位到該元素而導(dǎo)致執(zhí)行失敗。元素等待本質(zhì)是為了解決時(shí)序上不匹配的問(wèn)題。
元素等待類型
類型 | 特點(diǎn) | 舉例 |
強(qiáng)制等待 |
設(shè)置固定的等待時(shí)間 |
from time import sleep
|
隱式等待 |
針對(duì)全部元素設(shè)置的等待時(shí)間 |
driver.implicitly_wait(5) |
顯示等待 |
針對(duì)某個(gè)元素來(lái)設(shè)置的等待時(shí)間 |
from selenium.webdriver.support.ui import WebDriverWait WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None) |
強(qiáng)制等待
這種方法的等待,就相當(dāng)于白素貞到西湖去等待許仙去,不管許仙是否出現(xiàn),都要癡情地從白天等到晚上。 說(shuō)白了這種就是白素貞站在西湖那里一動(dòng)不動(dòng)地死等許仙出現(xiàn)。純粹一個(gè)傻子!!!
設(shè)置固定的等待時(shí)間,使用 sleep()方法即可實(shí)現(xiàn)
sleep(): 設(shè)置固定休眠時(shí)間。 python 的 time 包提供了休眠方法 sleep() , 導(dǎo)入 time包后就可以使用 sleep()進(jìn)行腳本的執(zhí)行過(guò)程進(jìn)行休眠。
1 from time import sleep 2 3 #強(qiáng)制等待5秒 4 5 sleep( 5 )
隱式等待
隱式等待是針對(duì)全部元素設(shè)置的等待時(shí)間
這種方法的等待,就相當(dāng)于白素貞到西湖去等待許仙去,白素貞到了西湖先看看許仙在不在,一看在,白素貞完了再看看小青妹妹來(lái)沒(méi)來(lái),等小青這個(gè)電燈泡來(lái)了,再去和許仙匯合。
1 #implicitly_wait():是 webdirver 提供的一個(gè)超時(shí)等待。隱的等待一個(gè)元素被發(fā)現(xiàn),或一個(gè)命令完成。如果超出了設(shè)置時(shí)間的則拋出異常。 2 #implicitly_wait():隱式等待 3 #當(dāng)使用了隱士等待執(zhí)行測(cè)試的時(shí)候,如果 WebDriver沒(méi)有在 DOM中找到元素,將繼續(xù)等待,超出設(shè)定時(shí)間后則拋出找不到元素的異常 4 #換句話說(shuō),當(dāng)查找元素或元素并沒(méi)有立即出現(xiàn)的時(shí)候,隱式等待將等待一段時(shí)間再查找 DOM,默認(rèn)的時(shí)間是0 5 #一旦設(shè)置了隱式等待,則它存在整個(gè) WebDriver 對(duì)象實(shí)例的聲明周期中,隱式的等到會(huì)讓一個(gè)正常響應(yīng)的應(yīng)用的測(cè)試變慢, 6 #它將會(huì)在尋找每個(gè)元素的時(shí)候都進(jìn)行等待,這樣會(huì)增加整個(gè)測(cè)試執(zhí)行的時(shí)間。 7 8 #implicitly_wait()方法比 sleep() 更加智能,后者只能選擇一個(gè)固定的時(shí)間的等待,前者可以在一個(gè)時(shí)間范圍內(nèi)智能的等待。 9 10 driver.implicitly_wait( 20 )
顯式等待
顯式等待是針對(duì)某個(gè)元素來(lái)設(shè)置的等待時(shí)間。
這種方法的等待,就相當(dāng)于白素貞到西湖去等待許仙去,白素貞到了西湖先看看許仙在不在,一看不在,白素貞自己先去做個(gè)頭發(fā);過(guò)一個(gè)小時(shí)了,白素貞回來(lái)到西湖再去看許仙在不在,一看還是不在,再去買件衣服去;過(guò)一個(gè)小時(shí)了,白素貞回來(lái)到西湖再去看許仙在不在,一看仍然不在,再去買個(gè)包包去;過(guò)一個(gè)小時(shí)了,白素貞回來(lái)到西湖再去看許仙在不在,一看還是不在,白素貞郁悶了,出去喝個(gè)小酒去;過(guò)了一小時(shí)了。。。。。。就這么來(lái)來(lái)回回的折騰的等許仙。這個(gè)白素貞通過(guò)修煉進(jìn)化變得聰明了。
WebDriverWait():同樣也是 webdirver 提供的方法。在設(shè)置時(shí)間內(nèi),默認(rèn)每隔一段時(shí)間檢測(cè)一次當(dāng)前。頁(yè)面元素是否存在,如果超過(guò)設(shè)置時(shí)間檢測(cè)不到則拋出異常。
方法 WebDriverWait格式參數(shù)如下:
1 ''' 詳細(xì)格式如下: 2 WebDriverWait(driver, timeout, poll_frequency= 0.5 , ignored_exceptions= None) 3 driver - WebDriver 的驅(qū)動(dòng)程序(Ie, Firefox, Chrome 或遠(yuǎn)程) 4 timeout - 最長(zhǎng)超時(shí)時(shí)間,默認(rèn)以秒為單位 5 poll_frequency - 休眠時(shí)間的間隔(步長(zhǎng))時(shí)間,默認(rèn)為 0.5 秒 6 ignored_exceptions - 超時(shí)后的異常信息,默認(rèn)情況下拋 NoSuchElementException 異常。 7 WebDriverWai()一般由 until()或 until_not()方法配合使用,下面是 until()和 until_not()方法的說(shuō)明。 8 until(method, message= ’’) 9 調(diào)用該方法提供的驅(qū)動(dòng)程序作為一個(gè)參數(shù),直到返回值不為 False。 10 until_not(method, message= ’’) 11 調(diào)用該方法提供的驅(qū)動(dòng)程序作為一個(gè)參數(shù),直到返回值為 False。 12 lambda 13 lambda 提供了一個(gè)運(yùn)行時(shí)動(dòng)態(tài)創(chuàng)建函數(shù)的方法。 ''' 14 15 from selenium.webdriver.support.ui import WebDriverWait 16 17 WebDriverWait(driver, 10 ).until(lambda x:x.find_element_by_id( " elementID " ))
其中,三種等待方法的作用和區(qū)別,如下:
強(qiáng)制等待 ,也就是常說(shuō)的死等待,使用time模塊提供的sleep方法,腳本在等待sleep(x)?x秒后才執(zhí)行,此時(shí)腳本也許出現(xiàn)了無(wú)效等待,即元素已經(jīng)出現(xiàn),可以繼續(xù)操作,但因指定的時(shí)間未到,腳本無(wú)法執(zhí)行,因而,在實(shí)際Web UI開(kāi)發(fā)中應(yīng)杜絕sleep等待;
顯式等待, WebDriver提供的針對(duì)元素級(jí)別的、靈活、智能的等待方法,通過(guò)配合until()、until_not()、ExpectedCondition等條件的使用,默認(rèn)每500ms檢查一次條件狀態(tài),可以及時(shí)將腳本從等待中喚醒,避免無(wú)效等待,在實(shí)際應(yīng)用中推薦使用該方法。
該等待的調(diào)用方法如下:
WebDriverWait(driver,?超時(shí)時(shí)長(zhǎng),?調(diào)用頻率,?忽略異常).until(可執(zhí)行方法,?超時(shí)時(shí)返回的信息)
隱式等待, WebDriver提供的針對(duì)driver級(jí)別的適用整個(gè)生命周期的等待方法,該等待是全局設(shè)置,因而只需在實(shí)例化driver后設(shè)置一次即可。從等待作用上看,是可以滿足需要的,但是考慮到實(shí)際應(yīng)用場(chǎng)景,driver要等待的元素和腳本要操作的元素未必相同,也就是說(shuō),腳本要操作的元素已經(jīng)出現(xiàn),但因?yàn)樵O(shè)置了全局等待,driver也會(huì)繼續(xù)等待頁(yè)面上其他無(wú)關(guān)元素,直至整個(gè)頁(yè)面加載完畢。因而,與顯式等待相比,可能出現(xiàn)無(wú)效等待的情況。
等待方法實(shí)戰(zhàn)舉例
1.強(qiáng)制等待方法應(yīng)用實(shí)例
1 # coding=utf- 8 2 # 1 .先設(shè)置編碼,utf- 8可支持中英文,如上,一般放在第一行 3 4 # 2 .注釋:包括記錄創(chuàng)建時(shí)間,創(chuàng)建人,項(xiàng)目名稱。 5 ''' 6 Created on 2019 - 7 - 26 7 @author: 北京-宏哥 QQ交流群: 707699217 8 Project:學(xué)習(xí)和使用appium自動(dòng)化測(cè)試- 元素等待 9 ''' 10 # 3 .導(dǎo)入模塊 11 from appium import webdriver 12 import time 13 desired_caps = {} 14 desired_caps[ ' platformName ' ] = ' Android ' #android的apk還是IOS的ipa 15 desired_caps[ ' platformVersion ' ] = ' 8.0 ' #android系統(tǒng)的版本號(hào) 16 desired_caps[ ' deviceName ' ] = ' 127.0.0.1:62001 ' #手機(jī)設(shè)備名稱,通過(guò)adb devices 查看 17 desired_caps[ ' appPackage ' ] = ' com.taobao.taobao ' #apk的包名 18 desired_caps[ ' appActivity ' ] = ' com.taobao.tao.welcome.Welcome ' #apk的launcherActivity 19 desired_caps[ ' unicodeKeyboard ' ] = True #使用unicodeKeyboard的編碼方式來(lái)發(fā)送字符串 20 desired_caps[ ' resetKeyboard ' ] = True #將鍵盤(pán)給隱藏起來(lái) 21 driver = webdriver.Remote( ' http://127.0.0.1:4723/wd/hub ' , desired_caps) #啟動(dòng)服務(wù)器地址,后面跟的是手機(jī)信息 22 # 休眠五秒等待頁(yè)面加載完成 23 time.sleep( 5 ) #強(qiáng)制等待5s,不管等待的元素是否出現(xiàn),都要等5s 24 driver.find_element_by_id( " com.taobao.taobao:id/home_searchedit " ).click() 25 time.sleep( 3 ) #演示效果 26 driver.find_element_by_id( " com.taobao.taobao:id/searchEdit " ).click() 27 driver.find_element_by_id("com.taobao.taobao:id/searchEdit").send_keys(u"北京-宏哥")
28 driver.quit()
2.顯示等待方法應(yīng)用實(shí)例
1 # coding=utf- 8 2 # 1 .先設(shè)置編碼,utf- 8可支持中英文,如上,一般放在第一行 3 4 # 2 .注釋:包括記錄創(chuàng)建時(shí)間,創(chuàng)建人,項(xiàng)目名稱。 5 ''' 6 Created on 2019 - 7 - 26 7 @author: 北京-宏哥 QQ交流群: 707699217 8 Project:學(xué)習(xí)和使用appium自動(dòng)化測(cè)試- 元素等待 9 ''' 10 # 3 .導(dǎo)入模塊 11 from appium import webdriver 12 from selenium.webdriver.support.ui import WebDriverWait 13 import time 14 desired_caps = {} 15 desired_caps[ ' platformName ' ] = ' Android ' #android的apk還是IOS的ipa 16 desired_caps[ ' platformVersion ' ] = ' 8.0 ' #android系統(tǒng)的版本號(hào) 17 desired_caps[ ' deviceName ' ] = ' 127.0.0.1:62001 ' #手機(jī)設(shè)備名稱,通過(guò)adb devices 查看 18 desired_caps[ ' appPackage ' ] = ' com.taobao.taobao ' #apk的包名 19 desired_caps[ ' appActivity ' ] = ' com.taobao.tao.welcome.Welcome ' #apk的launcherActivity 20 desired_caps[ ' unicodeKeyboard ' ] = True #使用unicodeKeyboard的編碼方式來(lái)發(fā)送字符串 21 desired_caps[ ' resetKeyboard ' ] = True #將鍵盤(pán)給隱藏起來(lái) 22 driver = webdriver.Remote( ' http://127.0.0.1:4723/wd/hub ' , desired_caps) #啟動(dòng)服務(wù)器地址,后面跟的是手機(jī)信息 23 try : 24 # 顯示等待(等待特定元素出現(xiàn)) 25 WebDriverWait(driver, 3 ).until(lambda x: x.find_element_by_id( ' com.taobao.taobao:id/home_searchedit ' )) 26 driver.find_element_by_id( " com.taobao.taobao:id/home_searchedit " ).click() 27 time.sleep( 3 ) # 演示效果 28 driver.find_element_by_id( " com.taobao.taobao:id/searchEdit " ).click() 29 driver.find_element_by_id( " com.taobao.taobao:id/searchEdit " ).send_keys(u " 北京-宏哥 " ) 30 finally : 31 driver.quit()
3.隱式等待方法應(yīng)用實(shí)例
1 # coding=utf- 8 2 # 1 .先設(shè)置編碼,utf- 8可支持中英文,如上,一般放在第一行 3 4 # 2 .注釋:包括記錄創(chuàng)建時(shí)間,創(chuàng)建人,項(xiàng)目名稱。 5 ''' 6 Created on 2019 - 7 - 26 7 @author: 北京-宏哥 QQ交流群: 707699217 8 Project:學(xué)習(xí)和使用appium自動(dòng)化測(cè)試- 元素等待 9 ''' 10 # 3 .導(dǎo)入模塊 11 from appium import webdriver 12 from selenium.webdriver.support.ui import WebDriverWait 13 import time 14 desired_caps = {} 15 desired_caps[ ' platformName ' ] = ' Android ' #android的apk還是IOS的ipa 16 desired_caps[ ' platformVersion ' ] = ' 8.0 ' #android系統(tǒng)的版本號(hào) 17 desired_caps[ ' deviceName ' ] = ' 127.0.0.1:62001 ' #手機(jī)設(shè)備名稱,通過(guò)adb devices 查看 18 desired_caps[ ' appPackage ' ] = ' com.taobao.taobao ' #apk的包名 19 desired_caps[ ' appActivity ' ] = ' com.taobao.tao.welcome.Welcome ' #apk的launcherActivity 20 desired_caps[ ' unicodeKeyboard ' ] = True #使用unicodeKeyboard的編碼方式來(lái)發(fā)送字符串 21 desired_caps[ ' resetKeyboard ' ] = True #將鍵盤(pán)給隱藏起來(lái) 22 driver = webdriver.Remote( ' http://127.0.0.1:4723/wd/hub ' , desired_caps) #啟動(dòng)服務(wù)器地址,后面跟的是手機(jī)信息 23 24 # 隱式等待(等待所有元素) 25 driver.implicitly_wait( 3 ) #隱式等待,最長(zhǎng)3s 26 driver.find_element_by_id( " com.taobao.taobao:id/home_searchedit " ).click() 27 time.sleep( 3 ) #演示效果 28 driver.find_element_by_id( " com.taobao.taobao:id/searchEdit " ).click() 29 driver.find_element_by_id( " com.taobao.taobao:id/searchEdit " ).send_keys(u " 北京-宏哥 " ) 30 driver.quit()
小結(jié)
1.本節(jié)主要介紹appium自動(dòng)化中三種元素等待方法,并講解了各自的優(yōu)缺點(diǎn),實(shí)際開(kāi)發(fā)中推薦使用顯示等待,最后,為了便于理解和應(yīng)用,針對(duì)每種等待方法,編寫(xiě)了對(duì)應(yīng)的腳本。
2.強(qiáng)制等待的方法,在debug時(shí)候很有用,不過(guò)建議慎用這種方法,因?yàn)樘腊澹瑖?yán)重影響程序執(zhí)行速度!
3.以上三種等待方法,在具體的場(chǎng)景中需要根據(jù)情況選擇合適的方法,靈活運(yùn)用。。。
4.做過(guò)自動(dòng)化的小伙伴們或者童鞋們,在啟動(dòng)app的時(shí)候,幸運(yùn)的小伙伴和同學(xué)們都會(huì)中這個(gè)大獎(jiǎng):如果直接做下一步點(diǎn)擊操作,經(jīng)常會(huì)報(bào)錯(cuò),于是我們便會(huì)自然而然的想到上邊介紹的三種方法,會(huì)在啟動(dòng)完成的時(shí)候加sleep等方法。那么問(wèn)題來(lái)了,宏哥問(wèn)你這個(gè)sleep時(shí)間到底設(shè)置多少合適呢?你不知道宏哥也不知道這個(gè)問(wèn)題的答案,如果設(shè)置長(zhǎng)了,就浪費(fèi)時(shí)間,設(shè)置短了,就會(huì)找不到元素報(bào)錯(cuò)了。過(guò)長(zhǎng)過(guò)短都是個(gè)讓你頭疼的事,那么有沒(méi)有別的方法可以克服這個(gè)問(wèn)題了。當(dāng)然有,宏哥一般人都不告訴他,大家都是二般人,就分享給各位吧!但是這個(gè)只是針對(duì)安卓手機(jī)的哦,要記住了,iPhone不適合的。這個(gè)時(shí)候我們可以用wait_activity的語(yǔ)法,等到你想點(diǎn)擊的頁(yè)面activity出現(xiàn)了,再點(diǎn)擊,可以有效的節(jié)省時(shí)間。
wait_activity
(1)查看源碼
1 def wait_activity(self, activity, timeout, interval= 1 ): 2 """ Wait for an activity: block until target activity presents 3 or time out . 4 5 This is an Android- only method. 6 7 :Agrs: 8 - activity - target activity 9 - timeout - max wait time, in seconds 10 - interval - sleep interval between retries, in seconds 11 """ 12 try : 13 WebDriverWait(self, timeout, interval).until( 14 lambda d: d.current_activity == activity) 15 return True 16 except TimeoutException: 17 return False
(2)解釋說(shuō)明:
1 wait_activity(self, activity, timeout, interval= 1 ): 2 3 等待指定的activity出現(xiàn)直到超時(shí),interval為掃描間隔1秒 4 5 即每隔幾秒獲取一次當(dāng)前的activity 6 7 android特有的 8 9 返回的True 或 False 10 11 :Agrs: 12 13 - activity - 需等待的目標(biāo) activity 14 15 - timeout - 最大超時(shí)時(shí)間,單位是s 16 17 - interval - 循環(huán)查詢時(shí)間 18 19 用法:driver.wait_activity(‘.activity.xxx’, 5 , 2 )
獲取current_activity
(1)打開(kāi)app后,先sleep10秒,等app完全啟動(dòng)完成進(jìn)入主頁(yè)面,然后獲取當(dāng)前界面的activity
1 # coding=utf- 8 2 # 1 .先設(shè)置編碼,utf- 8可支持中英文,如上,一般放在第一行 3 4 # 2 .注釋:包括記錄創(chuàng)建時(shí)間,創(chuàng)建人,項(xiàng)目名稱。 5 ''' 6 Created on 2019 - 7 - 26 7 @author: 北京-宏哥 QQ交流群: 707699217 8 Project:學(xué)習(xí)和使用appium自動(dòng)化測(cè)試- 元素等待 9 ''' 10 # 3 .導(dǎo)入模塊 11 from appium import webdriver 12 from time import sleep 13 desired_caps = { 14 ' platformName ' : ' Android ' , 15 ' deviceName ' : ' 127.0.0.1:62001 ' , 16 ' platformVersion ' : ' 4.4.2 ' , 17 ' appPackage ' : ' com.baidu.yuedu ' , 18 ' appActivity ' : ' com.baidu.yuedu.splash.SplashActivity ' 19 } 20 driver = webdriver.Remote( ' http://127.0.0.1:4723/wd/hub ' , desired_caps) 21 22 sleep( 10 ) 23 # 獲取當(dāng)前界面activity 24 ac = driver.current_activity 25 print(ac)
(2)運(yùn)行結(jié)果:
等待activity
(1)用sleep太浪費(fèi)時(shí)間了,并且不知道什么時(shí)候能啟動(dòng)完成,所以盡量不用sleep,宏哥也不推薦使用。因?yàn)檫@個(gè)確實(shí)是太low了。
(2)上一步已經(jīng)獲取當(dāng)主頁(yè)面的activity了,那就可以用wait_activity等它出現(xiàn)了,再做下一步的點(diǎn)擊操作
(3)參考代碼
1 # coding=utf- 8 2 # 1 .先設(shè)置編碼,utf- 8可支持中英文,如上,一般放在第一行 3 4 # 2 .注釋:包括記錄創(chuàng)建時(shí)間,創(chuàng)建人,項(xiàng)目名稱。 5 ''' 6 Created on 2019 - 7 - 26 7 @author: 北京-宏哥 QQ交流群: 707699217 8 Project:學(xué)習(xí)和使用appium自動(dòng)化測(cè)試- 元素等待 9 ''' 10 # 3 .導(dǎo)入模塊 11 from appium import webdriver 12 from time import sleep 13 desired_caps = { 14 ' platformName ' : ' Android ' , 15 ' deviceName ' : ' 127.0.0.1:62001 ' , 16 ' platformVersion ' : ' 4.4.2 ' , 17 ' appPackage ' : ' com.baidu.yuedu ' , 18 ' appActivity ' : ' com.baidu.yuedu.splash.SplashActivity ' 19 } 20 driver = webdriver.Remote( ' http://127.0.0.1:4723/wd/hub ' , desired_caps) 21 22 # sleep( 10 ) # 不用sleep 23 24 # 獲取當(dāng)前界面activity 25 ac = driver.current_activity 26 print(ac) 27 28 # 等主頁(yè)面activity出現(xiàn),30秒內(nèi) 29 driver.wait_activity( " .base.ui.MainActivity " , 30 ) 30 31 # 點(diǎn)知道了 32 driver.find_element_by_id( " com.baidu.yuedu:id/positive " ).click()
5.? 好了,關(guān)于元素等待目前就說(shuō)這么多!!!
您的肯定就是我進(jìn)步的動(dòng)力。
如果你感覺(jué)還不錯(cuò),就請(qǐng)鼓勵(lì)一下吧!記得點(diǎn)波?
推薦
?哦!!!(點(diǎn)擊右邊的小球即可,膽子大的可以試一下?
:)
)
個(gè)人公眾號(hào)
微信群
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
