Google 官方提供了一個 Android 自動化測驗工具(Java 庫),基于 Accessibility 服務,功能很強,可以對第三方 App 進行測驗,獲取螢屏上任意一個 App 的任意一個控制元件屬性,并對其進行任意操作,但有兩個缺點:
1.測驗腳本只能使用 Java 語言;
2.測驗腳本要打包成 jar 或者 apk 包上傳到設備上才能運行;
實際作業中,我們希望測驗邏輯能夠用 Python 撰寫,能夠在電腦上運行的時候就控制手機,所以基于這個目的開發了 python-uiautomator2 自動化測驗開源工具,其封裝了谷歌自帶的 uiautomator2 測驗框架,可以運行在支持 Python 的任一系統上,目前版本為 V2.10.2,
GitHub 開源地址:
如圖所示,python-uiautomator2 主要分為兩個部分,python 客戶端,移動設備
- python 端: 運行腳本,并向移動設備發送 HTTP 請求;
- 移動設備:移動設備上運行了封裝了 uiautomator2 的 HTTP 服務,決議收到的請求,并轉化成 uiautomator2 的代碼;
整個程序:
3.在移動設備上安裝 atx-agent(守護行程),隨后 atx-agent 啟動 uiautomator2 服務(默認 7912 埠)進行監聽;
4.在 PC 上撰寫測驗腳本并執行(相當于發送 HTTP 請求到移動設備的 server 端);
5.移動設備通過 WIFI 或 USB 接收到 PC 上發來的 HTTP 請求,執行制定的操作;
使用 pip 安裝
安裝完成后,使用如下 python 代碼查看環境是事配置成功
說明:后文中所有代碼都需要匯入 uiautomator2 庫,為了簡化我使用 u2 代替,d 代表 driver
能正確列印出設備的資訊則表示安裝成功
注意:需要安裝 adb 工具,并配置到系統環境變數,才能操作手機,
安裝有問題可以到 issue 串列查詢:
weditor 是一款基于瀏覽器的 UI 查看器,用來幫助我們查看 UI 元素定位,
因為 uiautomator 是獨占資源,所以當 atx 運行的時候 uiautomatorviewer 是不能用的,為了減少 atx 頻繁的啟停,就需要用到此工具
使用 pip 安裝
查看安裝是否成功
出現如下資訊表示安裝成功
運行 weditor
ui2 支持 android 中 UiSelector 類中的所有定位方式,詳細可以在這個網址查看 https://developer.android.com/reference/android/support/test/uiautomator/UiSelector 1
整體內容如下 , 所有的屬性可以通過 weditor 查看到
子元素定位
child()
兄弟元素定位
sibling()
鏈式呼叫
相對定位支持在left, right, top, bottom, 即在某個元素的前后左右
表格標注有 @property 裝飾的類屬性方法,均為下方示例方式

exists 其它使用方法:
info() 輸出資訊:
可以通過上方資訊分別獲取元素的所有屬性
因為 Java uiautoamtor 中默認是不支持 xpath,這是屬于 ui2 的擴展功能,速度會相比其它定位方式慢一些
在 xpath 定位中,ui2 中的 description 定位需要替換為 content-desc,resourceId 需要替換為 resource-id
使用方法
Android<4.3 時不能使用拖動
滑動有兩個,一個是在 driver 上操作,一個是在元素上操作
元素上操作
從元素的中心向元素邊緣滑動
driver 上操作
即對整個螢屏操作
driver 滑動的擴展方法,可以直接實作滑動,不需要再自己封裝定位點
android>4.3
對元素操作
封裝好的放大縮小操作
設定 scrollable 屬性為 True;
滾動型別:horiz 為水平,vert 為垂直;
滾動方向:
-
forward 向前
-
backward 向后
-
toBeginning 滾動至開始
-
toEnd 滾動至最后
-
to 滾動直接某個元素出現
所有方法均回傳 Bool 值;
5.8.1 輸入自定義文本
5.8.2 輸入按鍵
兩種方法
目前 press 支持的按鍵如下
keyevent 是通過 “adb shell input keyevent” 方式輸入,支持按鍵更加豐富
更多詳細的按鍵資訊 https://developer.android.com/reference/android/view/KeyEvent.html
5.8.3 輸入法切換
5.8.4 模擬輸入法功能
可以模擬的功能有 go ,search ,send ,next, done ,previous,
如果使用 press 輸入按鍵無效,可以嘗試使用此方法輸入
使用 wather 進行界面的監控,可以用來實作跳過測驗程序中的彈框
當啟動 wather 時,會新建一個執行緒進行監控
可以添加多個 watcher
用法
2.11.0 版本 新增了一個 watch_context 方法 , 寫法相比 watcher 更簡潔,官方推薦使用此方法來實作監控,目前只支持 click() 這一種方法,
這里可以用來實作圖案解鎖
使用 touch 類
這個感覺是比較有用的一個功能,可以在測驗用例開始時錄制,結束時停止錄制,然后如果測驗 fail,則上傳到測驗報告,完美復原操作現場,具體原理后面再去研究,
首先需要下載依賴,官方推薦使用鏡像下載:
執行錄制:
下載與錄制視頻同一套依賴,
這個功能是首先手動截取需要點擊目標的圖片,然后 ui2 在界面中去匹配這個圖片,目前我嘗試了精確試不是很高,誤點率非常高,不建議使用,
可以從本地路徑及 url 下載安裝 APP,此方法無回傳值,當安裝失敗時,會拋出 RuntimeError 例外
默認當應用在運行狀態執行 start 時不會關閉應用,而是繼續保持當前界面,
如果需要消除前面的啟動狀態,則需要加 stop=True 引數,
stop 和 clear 的區別是結束應用使用的命令不同
stop 使用的是 “am force-stop”
clear 使用的是 “pm clear”
卸載全部應用回傳的包名串列并一定是卸載成功了,最好使用 verbose=true 列印一下資訊,這樣可以查看到是否卸載成功
或者可以修改一下原始碼,使其只輸出成功的包名,注釋的為增加的代碼,未注釋的是原始碼
connect() 可以使用如下其它方式進行連接
8.2.1 獲取 driver 資訊
8.2.2 獲取設備資訊
會輸出測驗設備的所有資訊,包括電池,CPU,記憶體等
8.2.3 獲取螢屏解析度
8.2.4 獲取 IP 地址
8.3.1 使用 settings 設定
查看 settings 默認設定
修改默認設定,只需要修改 settings 字典即可
8.3.2 使用方法或者屬性設定 -
http 默認請求超時時間
-
當設備掉線時,等待設備在線時長
-
元素查找默認等待時間
-
打開 HTTP debug 資訊
-
休眠
value 值參考,只要是元組中的任一一個值就可以,
打開通知欄
打開快速設定
8.7.1 匯入檔案
8.7.2 匯出檔案
使用 shell 方法執行
8.8.1 執行非阻塞命令
output 回傳的是一個整體的字串,如果需要抽取值,需要對 output 進行決議提取處理
8.8.2 執行阻塞命令(持續執行的命令)
原始碼描述
因為有 atx-agent 的存在,Uiautomator 會被一直守護著,如果退出了就會被重新啟動起來,但是 Uiautomator 又是霸道的,一旦它在運行,手機上的輔助功能、電腦上的 uiautomatorviewer 就都不能用了,除非關掉該框架本身的 uiautomator
使用代碼停止
手動停止
直接打開 ATX APP(init 成功后,就會安裝上),點擊關閉 UIAutomator
以上,歡迎大家一起交流探討,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/493109.html
標籤:其他
