一、uiautomator:
uiautomator是為數不多的Android官方支持的自動化框架之一,uiautomator隨着Android版本發布而更新。作為基於控件的自動化框架,uiautomator的整體框架以及API簡單明了,發布后受到好評,但是也有人認為不支持resourcedid檢索空間不合理,隨后官方彌補了這一缺陷。
二、uiautomator2:
這里要說的uiautomator2是一個python庫,用於Android的UI自動化測試,項目地址https://github.com/openatx/uiautomator2. 項目發源於xiaocong的uiautomator這個項目,新項目最大的改變要數原來手機必須數據線連接電腦的,但是使用了uiautomator2這個項目,就可以用WiFi代替USB連接電腦了。簡單來說就是可以不用數據線了。
python-uiautomator2封裝了谷歌自帶的uiautomator2測試框架,提供便利的python接口,允許測試人員直接在PC上編寫python的測試代碼,操作手機應用,完成自動化
三、uiautomator2工作原理:

如圖所示,python-uiautomator2主要分為兩個部分,python客戶端,移動設備
- python端: 運行腳本,並向移動設備發送HTTP請求
- 移動設備:移動設備上運行了封裝了uiautomator2的HTTP服務,解析收到的請求,並轉化成uiautomator2的代碼。
整個過程
- 在移動設備上安裝
atx-agent(守護進程), 隨后atx-agent啟動uiautomator2服務(默認7912端口)進行監聽 - 在PC上編寫測試腳本並執行(相當於發送HTTP請求到移動設備的server端)
- 移動設備通過WIFI或USB接收到PC上發來的HTTP請求,執行制定的操作
四、環境搭建
電腦安裝 adb、python-uiautomator2、
設備安裝atx-agent:首先設備連接到PC,並能夠adb devices發現該設備。
# 從github下載atx-agent文件,並推送到手機。在手機上安裝包名為`com.github.uiautomator`的apk
$ python -m uiautomator2 init
success
最后提示success,代表atx-agent初始化成功。其實這個命令就是在手機上安裝這5個東西minicap 、minitouch、 uiautomator_apk 、atx-agent , uiautomator_apk安裝了app-uiautomator.apk和app-uiautomator-test.apk兩個apk
minicap 用於手機的快速截圖
minitouch 用於遠程控制
app-uiautomator.apk (UiAutomator2服務,Toast)
app-uiautomator-test.apk (UiAutomator2服務)
atx-agent (可以直接在安卓上運行的二進制程序)
五、應用及操作
調用uiautomator2的過程
- 配置手機設備參數,設置具體操作的是哪一台手機
- 抓取手機上應用的控件,制定對應的控件來進行操作
- 對抓取到的控件進行操作,比如點擊、填寫參數等。
配置手機設備參數
python-uiautomator2連接手機的方式有兩種,一種是通過WIFI,另外一種是通過USB。兩種方法各有優缺點。
WIFI最便利的地方要數可以不用連接數據線,USB則可以用在PC和手機網絡不在一個網段用不了的情況。
-
使用WIFI連接
手機獲取到手機的IP,並確保電腦可以PING通手機。手機的IP可以在設置-WIFI設置里面獲取到。
比如手機的IP是192.168.0.100,連接設備的代碼為import uiautomator2 as u2
d = u2.connect('192.168.0.100') -
使用USB連接
手機的序列號可以通過
adb devices獲取到,假設序列號是123456f,連接代碼為import uiautomator2 as u2
d = u2.connect_usb('123456f')
抓取手機上應用的控件
雖然很想用Android SDK內置工具uiautomatorviewer.bat,但是運行uiautomator2的時候,uiautomatorviewer.bat運行不起來,兩者之間沖突太嚴重。
使用python-uiautomator2的兩個接口screenshot和dump_hierarchy這樣就不會有沖突問題了
安裝方法: pip install --pre weditor
使用方法:
首先運行python -m weditor,之后瀏覽器會自動打開一個網頁 http://atx.open.netease.com (注:這個網址僅提供一個前端,而python -mweditor這個命令則本地開放了HTTP的接口,前端去跟本地的服務去通信)
定位方式
- ResourceId定位:
d(resourceId="com.smartisanos.clock:id/text_stopwatch").click() - Text定位
d(text="秒表").click() - Description定位
d(description="..").click() - ClassName定位
d(className="android.widget.TextView").click()
