亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Appium+python自動(dòng)化(二十四)- 白素貞千年等一回許仙 - 元素

系統(tǒng) 1880 0

簡(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
#強(qiáng)制等待5秒
sleep(5)

隱式等待

針對(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)擊操作

Appium+python自動(dòng)化(二十四)- 白素貞千年等一回許仙 - 元素等待(超詳解)_第1張圖片

(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)擊右邊的小球即可,膽子大的可以試一下? :)
Appium+python自動(dòng)化(二十四)- 白素貞千年等一回許仙 - 元素等待(超詳解)_第2張圖片

個(gè)人公眾號(hào)

Appium+python自動(dòng)化(二十四)- 白素貞千年等一回許仙 - 元素等待(超詳解)_第3張圖片

微信群

Appium+python自動(dòng)化(二十四)- 白素貞千年等一回許仙 - 元素等待(超詳解)_第4張圖片


更多文章、技術(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ì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 看全色黄大色大片免费久久久 | 国产精品一区牛牛影视 | 三区在线观看 | 久久频这里精品99香蕉久网址 | 成人黄色小视频 | 久久国产精品-久久精品 | 国产啪爱视频精品免视 | 亚洲乱视频 | 欧美一级α片毛片免费观看 | 国产亚洲精品九九久在线观看 | 日本美女一区 | 伊人插插| 国产精品视频国产永久视频 | 日韩专区亚洲精品欧美专区 | 亚洲精品一区二区三区在线播放 | 国产精品久久久久影院嫩草 | 狠狠插天天干 | 亚洲综合色dddd26 | 精品一区二区三区在线观看l | 久草在线视频资源站 | 九九99热久久精品在线6手机 | 国产亚洲精品福利片 | 日韩欧美无线在码 | 日韩国产片 | 国产精品免费一级在线观看 | 在线观看h片 | h片免费在线观看 | 欧美白人猛性xxxxx交69 | 日韩国产精品视频 | 久久精品国产只有精品2020 | 国产在线五月综合婷婷 | 日韩色视频一区二区三区亚洲 | 天天摸天天草 | 奇米网奇米色 | 久久精品视频99 | 日本一区二区三区免费高清在线 | 欧美区亚洲区 | 91精品国产综合久久福利 | 国产免费青青青免费视频观看 | 99日韩| 经典日韩|