
相信很多使用appium做過APP自動化的人都深有感觸:
- appium運行慢、時間長
- uiautomatorviewer定位元素時得關掉appium server
- 在低版本的appium上獲取toast需要切換automationName
現在有一款自動化測驗工具uiautomator2,它幾乎完美的避免了以上的問題,簡單易學,對新手足夠友好,本次我們介紹一下這款工具,讓你在十分鐘之內能迅速掌握它
01、介紹
uiautomator2是uiautomator的升級版,uiautomator是Google開發的一款用來做安卓自動化測驗的Java庫,uiautomator2則是將uiautomator中的介面封裝成了Python庫,因此它支持的語言為Python
優點主要概括如下:
- 環境搭建簡單方便
- 執行速度很快
- UI元素定位便捷好用、可視化好
- 獲取toast非常簡單
根據官方檔案,要求:
- Andorid版本 4.4+
- Python版本 3.6+
02、環境部署
1、安裝adb并配置環境變數
這里不做詳述,網上的教程很多,安裝完查看一下版本資訊,能出現具體的版本號說明安裝成功

2、安裝python的uiautomator2庫
命令:
pip install -U uiautomator2

3、安裝atx-agent
這一步的目的是從github上下載atx-agent,推送到手機,作為服務端,因此先要保證adb devices能看到模擬器上的連接,這里開一臺夜神模擬器作為演示

開始安裝atx-agent,命令:
python-m uiautomator2 init
安裝成功后,可以看到模擬器桌面出現一個小汽車圖示,這個就是atx.apk

4、安裝weditor
命令:
pip install -U weditor
weditor是基于瀏覽器的UI元素查看器,安裝成功后我們做個演示

在命令列輸入 weditor 會自動打開瀏覽器,在頁面上輸入模擬器的設備序列號,點擊Connect,然后點擊Dump Hierarchy重繪,可以看到模擬器的界面

打開百度貼吧,彈出隱私政策彈窗,點擊UI查看器上的重繪按鈕(當然你也可以打開實時,這樣會自動重繪),滑鼠選中同意,在右邊就可以看到一些元素定位方式,如resourceId、Xpath等,是不是很方便,最方便的是它可以在運行的時候,同時開著weditor UI查看器

03、撰寫百度貼吧首頁腳本
這里我們一步一步來,通過撰寫百度貼吧自動化測驗的用例,來說明uiautomator2這個工具提供給我們的一些方法,為了使得代碼更直觀一點,這里就不使用PO模式了,直接把每一步寫在一個模塊中
1、先創建一個工程u2-autotest,然后在其下創建一個模塊test_tieba.py
2、匯入uiautomator2庫,取個別名u2,然后使用u2的connect_usb()方法連接,這個方法的引數是設備序列號(可以通過adb devices獲取),連接成功后回傳的device物件,我們取名為d,怎么檢查有沒有連接上?使用d.info能得到設備的基本資訊,說明已經連接成功

3、啟動指定的app,其語法是:
d.app_start(“指定的包名”)
怎么獲取包名,可以打開app,然后列印d.info,得到的結果里的currentPackageName即是包名

4、然后點擊百度貼吧,出現的第一個頁面就是隱私政策頁,打開weditor UI查看器,重繪后滑鼠移動到同意按鈕上,可以看到有兩種定位方式可選擇,一種是resourceId,一種是xpath,這里選擇resourceId

在uiautomator2里resourceId的定位方式是這樣的:
d(resourceId="元素定位運算式")
但是我們想想,能不能直接這樣寫

答案是否定的,因為啟動app后元素控制元件不會立即出現,因此需要等待時間,在uiautomator2中你可以用強制等待time.sleep(),也可以使用隱性等待implicitly_wait(),這和appium、selenium是一致的,
隱性等待的語法:
d.implicitly_wait(等待時長) #單位是s
整理下代碼,加上隱性等待時長10s,隱性等待只需要加一次,全域通用,
不管是等待第幾個元素,等待時長都是10s,但是如果第一個元素是2s出現,第二個元素是5s出現,那么第一個元素實際等待時長只是2s,第二個只是5s,元素出現就會進行下一步操作,而不像強制等待一直要等夠設定的時長,因此隱性等待相對比較節約時間

5、點擊同意后,我們進入滑屏頁面

滑屏操作在uiautomator2中是swipe()方法,和appium類似,sx, ex和sy,ey分別表示起點和終點的坐標
d.swipe(sx, sy, ex, ey, 0.5)
那么起點和終點的坐標如何獲取?
為了適應不同的解析度,可以獲取到螢屏的尺寸,然后分別乘以系數,
獲取螢屏尺寸的語法是:
d.window_size()
我們看到首頁滑動螢屏需要向左滑2次,因此可以寫個for回圈,這里有幾點需要注意下:
- 為了提高螢屏滑動的穩定性,需要加入強制等待,等待1s
- 滑動距離盡量大點,比如x軸起點終點可以設定系數分別為0.9, 0.1,如果你設定為0.9,
0.5,很可能會出現滑動距離太小,導致沒有滑過去的情況 - uiautomator2還提供了一個擴展的滑動功能,swipe_ext(),不需要坐標,只需提供方向如"left",“right”,“up”,“down”,經過試驗,感覺不太穩定,因此還是采用常規的方法

6、滑動到最后一頁,點擊立即體驗,可以進入首頁

這里可以使用resourceId或description或xpath,這里演示一下description的使用,
在uiautomator2中description定位的語法是:
d(description="元素定位運算式")
description也稱為"content-desc",一般情況下它是唯一的

7、在首頁,可以看到左上角有關注、推薦、話題、直播四個欄目,我們選擇推薦作為斷言的元素

看到推薦有文本值,那uiautomator2支持文本作為元素定位方式嗎?
可以的
d(text="元素定位運算式")
然后可以使用get_text()方法拿到文本值,使用assert進行斷言

8、一個用例運行完之后,需要停止app并清理環境,這里使用app_stop()和app_clear()方法
d.app_stop('指定的包名')
d.app_clear('指定的包名')
這時我們一個完整的用例就寫完了,當然為了演示起見,我省略了很多,比如PO模式、pytest、日志、報告等等

04、uiautomator2和appium運行速度比較
這里我更改了下代碼,使用uiautomator2和appium同時去執行百度貼吧搜索的用例,步驟一致,等待時長設定一致,看看相同的情況下哪個自動化工具更快點

事實證明,相同情況下,uiautomator2耗時1分鐘左右,而appium耗時1分鐘16s,比uiautomator2慢了約16s,當然用例越多、流程越長,效果越明顯
最后將uiautomator2的主要語法總結下,更多功能請閱讀官方檔案:http://8rr.co/Ngbk


最后: 可以關注公眾號:傷心的辣條 ! 進去有許多資料共享!資料都是面試時面試官必問的知識點,也包括了很多測驗行業常見知識,其中包括了有基礎知識、Linux必備、Shell、互聯網程式原理、Mysql資料庫、抓包工具專題、介面測驗工具、測驗進階-Python編程、Web自動化測驗、APP自動化測驗、介面自動化測驗、測驗高級持續集成、測驗架構開發測驗框架、性能測驗、安全測驗等,
如果我的博客對你有幫助、如果你喜歡我的博客內容,請 “點贊” “評論” “收藏” 一鍵三連哦!推薦軟體測驗交流學習群:914172719 里面會分享一些資深架構師錄制的視頻錄像
好文推薦
轉行面試,跳槽面試,軟體測驗人員都必須知道的這幾種面試技巧!
面試經:一線城市搬磚!又面軟體測驗崗,5000就知足了…
面試官:作業三年,還來面初級測驗?恐怕你的軟體測驗工程師的頭銜要加雙引號…
什么樣的人適合從事軟體測驗作業?
那個準點下班的人,比我先升職了…
測驗崗反復跳槽,跳著跳著就跳沒了…
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/300728.html
標籤:其他
下一篇:資料結構:佇列
