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

Appium+python自動化(十二)- Android

系統 2040 0

簡介

? ? ? 乍眼一看,小伙伴們覺得這部分其實在異性兄弟那里就做過介紹和分享了,其實不然,上次介紹和分享的大哥是uiautomatorviewer,是一款定位工具。今天介紹的是一個java庫,提供執行自動化測試的各種API。

  Android團隊在4.1版本(API 16)中推出了一款全新的UI自動化測試工具UiAutomator,用來幫助開發人員更有效率的完成App的Debug工作,同時對于測試人員也是一大福音,為什么這么說呢?

?
?

QA:“那個誰誰誰,我剛剛操作的時候,我發現了一個bug,你寫的App打開A頁面,再打開B頁面有時會出現閃屏問題。(內心獨白:我去,這個奇怪的問題”

DEV:“嗯?還有這樣的問題,麻煩你復現給我看看。(內心獨白:吹牛逼,我這么牛逼,我寫的App怎么會可能有bug,一定是你用的姿勢不對)”

QA:一段忙碌的神操作之后...“咦,怎么不出現了?(內心獨白:我去,怎么搞的啊,關鍵時刻掉鏈子,你倒是快點出來,讓我丟臉丟大發了)”

DEV:“那你先回去吧,復現再告訴我。(內心獨白:呵呵,和我心里想的一樣,我寫的怎么可能會有bug呢)”

幾天過去了......

QA:滿心歡喜狀,那個誰誰誰“上次那個問題我復現了,操作給你看....我去,怎么又不出現了!(內心獨白:一臉淫笑,我說有bug,你讓我復現,這又回復現出來吧,剛想完。。。。。額。又看不到了,怎么搞的,氣死我)”

DEV:“是不是設備有問題,你換個設備再試試呢?(內心獨白:小樣,都和你說了沒有bug你不信非要復現)”

QA:“寶寶心里苦,但是寶寶不說?。▋刃莫毎祝哼@個。唉。。。。。。。)”

有了UiAutomator之后:

QA:“我發現了一個bug,你寫的App打開A頁面,再打開B頁面有時會出現閃屏問題?!?

DEV:“這個簡單,我用UiAutomator寫個測試用例,分分鐘解決。(內心獨白:牛氣哄哄的)”

QA:“厲害了Word哥?。▋刃莫毎祝赫嫣孛磁1?,愛死你了)”

全劇終!

UiAutomator提供了以下兩種工具來支持UI自動化測試:

  • uiautomatorviewer:用來分析UI控件的圖形界面工具,位于SDK目錄下的tools文件夾中。

  • uiautomator:一個java庫,提供執行自動化測試的各種API。

1、android uiautomator text定位

  可能有人不知道為什么說android?uiautomator是終極定位,而且android?uiautomator和appium有什么關系呢?如果之前寫了一些腳本,發現有的時候一些元素不能夠很好的定位時,那么就需要采用android?uiautomator去定位,它是一種非常強有力的定位方式,原理是通過android 自帶的android uiautomator的類庫去查找元素,都直接用官方公布出來的方法去找了還能找不到嗎?

  首先和宏哥一起看一下下面的圖片:

?

Appium+python自動化(十二)- Android UIAutomator終極定位兇器(超詳解)_第1張圖片

?

在上面的圖片中我們不采用appium封裝好的方法,直接使用android 的uiautomator去定位結果如下:

            
              1
            
             user = 
            
              new
            
             Uiobject(
            
              new
            
             UiSelector().text(
            
              "
            
            
              請輸入淘寶賬戶
            
            
              "
            
            
              ))

            
            
              2
            
             user.setText(
            
              "
            
            
              test
            
            
              "
            
            )
          

  這兩句話看不懂也沒關系,因為我們接下來講的是appium已經對他進行了封裝的方法,這里只是讓你看一下他原始方法是怎么做的。首先他會根據你的定位信息new一個對象出來,然后再在你new的對象之上進行相關操作。下面我們看一下在appium中的實現方法:

            
              1
            
             ele = self.driver.find_element_by_android_uiautomator(
            
              '
            
            
              new UiSelector().text("請輸入淘寶賬戶")
            
            
              '
            
            
              )

            
            
              2
            
             ele.send_keys(
            
              "
            
            
              123
            
            
              "
            
            )
          

  對比兩種代碼的寫法,我們可以發現他們的相同之處只是最后的定位信息是一樣的,即:new UiSelector().text("請輸入淘寶賬戶"),這句話是什么意思呢?簡單的話就是根據一定條件來查找元素,我們這里的條件就是text屬性為“請輸入淘寶賬戶”,再根據圖片去理解是不是很容易呢?android uiautomator的元素定位其實和appium的定位一樣,或者說它比appium的定位方式更加多以及更加適用,并不是只有這一個,它也不僅支持className、id等定位,而且還支持模糊匹配進行定位,這樣是不是感覺更高大上呢?下面我們簡單介紹一下這幾種定位方式。

2 、uiautomator text模糊定位

  模糊定位故名思義,通過text的部分信息就能夠進行定位,我們直接看代碼:

            
              1
            
             ele = self.driver.find_element_by_android_uiautomator(
            
              '
            
            
              new UiSelector().textContains("請輸入淘")
            
            
              '
            
            
              )

            
            
              2
            
             ele.send_keys(
            
              "
            
            
              123
            
            
              "
            
            )
          

  在上面的代碼中我們只是將.text()的方法變成了.textContains(),在方法中傳入模糊的數據就好??吹竭@里是否有人思考過一個問題,既然有類似的模糊尋找,那么有沒有像正則表達式一樣的查找呢?答案是肯定的,看我們下面的方法。

3、 textMatches 正則匹配查找

  textMatches故名思義就是通過正則的來進行查找定位,他也是通過text的屬性來進行正則匹配,我們直接看代碼:

            
              1
            
             ele = self.driver.find_element_by_android_uiautomator(
            
              '
            
            
              new UiSelector().textMatches("^請輸入淘.*")
            
            
              '
            
            
              )

            
            
              2
            
             ele.send_keys(
            
              "
            
            
              123
            
            
              "
            
            )
          

  上面匹配的一些信息可能一些剛做測試的小伙伴不是很了解,這個不要緊,下來可以搜索一下正則表達式教程,稍微了解一下就可以。

4、 uiautomator resourceID定位

  resourceId定位和appium封裝好的id定位是一樣的,只是這里將寫法變成了uiautomator的寫法而已,看下面代碼:

            
              1
            
            
              1
            
             ele = self.driver.find_element_by_android_uiautomator(
            
              '
            
            
              new UiSelector().resourceId("com.taobao.taobao:id/aliuser_login_account_et")
            
            
              '
            
            
              )

            
            
              2
            
            
              2
            
             ele.send_keys(
            
              '
            
            
              234
            
            
              '
            
            )
          

  通過上面的代碼和之前的代碼對比大家可能發現其實他們前面都是一樣的,只是在定位的時候發生了一些變化,text變換成了resourceID即可,也就是頁面對象屬性的信息進行變更了,其他方法都是一樣。下面其他方法我就不浪費篇幅,只給大家做一個簡單的案例展示。

5、 resourceIDMatches 定位

  通過id進行正則匹配定位

            
              1
            
             ele = self.driver.find_element_by_android_uiautomator(
            
              '
            
            
              new UiSelector().resourceIdMatches(".+aliuser_login_account_et")
            
            
              '
            
            
              )

            
            
              2
            
             ele.send_keys(
            
              '
            
            
              234
            
            
              '
            
            )
          

6、uiautomator className定位

  通過調用android uiautomator使用className進行定位

            
              1
            
             ele = self.driver.find_element_by_android_uiautomator(
            
              '
            
            
              new UiSelector().className("android.widget.EditText")
            
            
              '
            
            
              )

            
            
              2
            
             ele.send_keys(
            
              '
            
            
              234
            
            
              '
            
            )
          

7、 uiautomator classNameMatches定位

  通過className正則匹配進行定位

            
              1
            
             ele = self.driver.find_element_by_android_uiautomator(
            
              '
            
            
              new UiSelector().classNameMatches (".*EditText")
            
            
              '
            
            
              )

            
            
              2
            
             ele.send_keys(
            
              '
            
            
              234
            
            
              '
            
            )
          

  通過上面的學習我相信大家對uiautomator的定位有一定的了解了,但是我想告訴大家的是這個并不是所有的,還有很多很多的定位方式,這個需要大家在以后不斷的學習中去積累,我也不可能把所有的方法都告訴大家,這里只是給大家一個起頭,但是我希望大家在學習定位的時候不只是看appium的定位,畢竟他也是封裝的uiautomator的定位方式,所以在學習appium的同時把uiautomator去大概學習一下這個很有幫助,并且對以后的提升自己以及工作中重新封裝appium有很大的幫助。

8、小結

1、以前運行工具沒有問題。今天使用uiautomatorviewer 查看android某些頁面元素,出現錯誤Error obtaining UI hierarchy? Reason: Error taking device screenshot: null 如圖:

Appium+python自動化(十二)- Android UIAutomator終極定位兇器(超詳解)_第2張圖片

再網上找了很多解決辦法依然沒解決

宏哥總結了一下原因:

1、該app不支持該頁面的截屏功能所以uiautomatorviewer捕捉不到

2、手機需要重啟

3、非原裝數據線

4、appium服務異常需要重新連接

5、可以嘗試切換USB接口

6、最后可以把手機開發者選項的USB調試撤銷權限,在重新獲取

最后記住重啟再重啟解決一切問題,可能這次報錯了,但是重啟之后就成功了,這個一般是沒地方說理的。

支持宏哥的朋友們和宏哥的宏粉記得點波推薦哦,您的肯定就是我進步的動力。宏哥先在這里給您道謝了,謝您嘞~~

個人公眾號

Appium+python自動化(十二)- Android UIAutomator終極定位兇器(超詳解)_第3張圖片

? ? ? ? ? ? ?

?

?

?

?

微信群

Appium+python自動化(十二)- Android UIAutomator終極定位兇器(超詳解)_第4張圖片

?


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。。?/p>

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 色综合久久中文字幕网 | 精品国产欧美一区二区 | 顶级欧美色妇xxxxbbbb | 欧美激情久久欧美激情 | 国产91久久久久久久免费 | 一本到亚洲网 | 国产99视频精品一区 | 久久精品国产99国产 | 啪啪网站免费 | 香蕉在线影院 | 久久综合九色综合欧美狠狠 | 中国一级毛片aaa片 中国一级毛片录像 | 日韩 欧美 中文 | 亚洲一区二区免费在线观看 | 激情五月开心婷婷 | 久久精品免视看国产成人2021 | 久久黄色影片 | 亚洲精品乱码久久久久久蜜桃欧美 | 综合婷婷丁香 | 爽爽影院在线免费观看 | 欧美日韩不卡视频 | 在线播放免费一级毛片欧美 | 国产欧美久久精品 | 久操视频免费看 | 天天热天天干 | 欧美日韩高清观看一区二区 | 久久中文视频 | 宅男看片午夜大片啪啪mv | 91精品国产99久久 | 97se亚洲综合在线 | 亚洲精品9999久久久久 | 亚洲综合第一欧美日韩中文 | 中文字幕亚洲无线码在线一区 | 国产精品成人第一区 | 特黄特a级特别特级特毛片 特黄特黄aaaa级毛片免费看 | 久久精品国产亚洲a不卡 | 羞羞视频网 | 成人区精品一区二区毛片不卡 | 中文字幕在线精品 | 欧美日韩综合精品一区二区三区 | 国产精品一区二区三区四区五区 |