uiautomator2
uiautomator2是一個(gè)可以使用Python對(duì)Android設(shè)備進(jìn)行UI自動(dòng)化的庫(kù)。其底層基于Google uiautomator,Google提供的uiautomator庫(kù)可以獲取屏幕上任意一個(gè)APP的任意一個(gè)控件屬性,并對(duì)其進(jìn)行任意操作,但有兩個(gè)缺點(diǎn):1. 測(cè)試腳本只能使用Java語(yǔ)言 2. 測(cè)試腳本必須每次被上傳到設(shè)備上運(yùn)行。 我們希望測(cè)試能夠用一個(gè)更腳本化的語(yǔ)言,例如Python編寫,同時(shí)可以每次所見即所得地修改測(cè)試、運(yùn)行測(cè)試。這里要非常感謝 Xiaocong He (@xiaocong),他將這個(gè)想法實(shí)現(xiàn)了出來(見xiaocong/uiautomator),原理是在手機(jī)上運(yùn)行了一個(gè)http服務(wù)器,將uiautomator中的功能開放出來,然后再將這些http接口,封裝成Python庫(kù)。
我們的uiautomator2項(xiàng)目是對(duì)xiaocong/uiautomator的增強(qiáng),主要有以下部分:
1. 設(shè)備和開發(fā)機(jī)可以脫離數(shù)據(jù)線,通過WiFi互聯(lián)(基于atx-agent)
2. 集成了openstf/minicap加快截圖速度
3. 集成了openstf/minitouch達(dá)到精確實(shí)時(shí)控制設(shè)備
4. 修復(fù)了xiaocong/uiautomator經(jīng)常性退出的問題
5. 代碼進(jìn)行了重構(gòu)和精簡(jiǎn),方便維護(hù)
工作原理

如圖所示,python-uiautomator2主要分為兩個(gè)部分,python客戶端,移動(dòng)設(shè)備
python端:運(yùn)行腳本,并向移動(dòng)設(shè)備發(fā)送HTTP請(qǐng)求
移動(dòng)設(shè)備?:移動(dòng)設(shè)備上運(yùn)行了封裝了uiautomator2的HTTP服務(wù),解析收到的請(qǐng)求,并轉(zhuǎn)化成uiautomator2的代碼。
整個(gè)過程
1. 在移動(dòng)設(shè)備上安裝atx-agent(守護(hù)進(jìn)程), 隨后atx-agent啟動(dòng)uiautomator2服務(wù)(默認(rèn)7912端口)進(jìn)行監(jiān)聽
2. 在PC上編寫測(cè)試腳本并執(zhí)行(相當(dāng)于發(fā)送HTTP請(qǐng)求到移動(dòng)設(shè)備的server端)
3. 移動(dòng)設(shè)備通過WIFI或USB接收到PC上發(fā)來的HTTP請(qǐng)求,執(zhí)行制定的操作
環(huán)境搭建
安裝Python
如命令行可以執(zhí)行python,則跳過此步驟
在python官網(wǎng)下載python,并配置環(huán)境變量,可點(diǎn)擊查看詳細(xì)教程
安裝adb
如命令行可以執(zhí)行adb devices,則跳過此步驟
從谷歌官網(wǎng)下載Android Platform Tools?,?解壓,并加包含adb.exe的目錄加入到系統(tǒng)的PATH中。
命令行窗口輸入:
pip install -U --pre uiautomator2
經(jīng)過短暫的等待,就安裝好了。部分情況可以因?yàn)橹袊?guó)互聯(lián)網(wǎng)防火墻的原因,安裝不了,這是可以試試用國(guó)內(nèi)的pypi鏡像
pip install -U --pre uiautomator2 -i https://pypi.doubanio.com/simple
此外,還需要pillow來處理截圖數(shù)據(jù)
命令行窗口輸入:
pip install pillow
設(shè)備安裝atx-agent(將相關(guān)聯(lián)的守護(hù)進(jìn)程部署到設(shè)備上)
電腦連接上一個(gè)手機(jī)或多個(gè)手機(jī), 確保adb已經(jīng)添加到環(huán)境變量中,執(zhí)行下面的命令會(huì)自動(dòng)安裝本庫(kù)所需要的設(shè)備端程序:uiautomator-server 、atx-agent、openstf/minicap、openstf/minitouch首先將設(shè)備插入到手機(jī)上,如果提示信任開發(fā)者選項(xiàng)就點(diǎn)擊確認(rèn)。
命令行窗口輸入:
adb devices
python -m uiautomator2 init
安裝過程中會(huì)聯(lián)網(wǎng)下載組件,安裝提示success即可。

以上環(huán)境搭建基本完成
確定環(huán)境是否搭建成功
接下來看一段Python腳本,運(yùn)行成功時(shí)手機(jī)會(huì)彈出一句:Hello world, 顯示時(shí)間為3秒

應(yīng)用及操作
調(diào)用uiautomator2的過程
1. 配置手機(jī)設(shè)備參數(shù),設(shè)置具體操作的是哪一臺(tái)手機(jī)
2. 抓取手機(jī)上應(yīng)用的控件,制定對(duì)應(yīng)的控件來進(jìn)行操作
3. 對(duì)抓取到的控件進(jìn)行操作,比如點(diǎn)擊、填寫參數(shù)等。
配置手機(jī)設(shè)備參數(shù)
python-uiautomator2連接手機(jī)的方式有兩種,一種是通過WIFI,另外一種是通過USB。兩種方法各有優(yōu)缺點(diǎn)。WIFI最便利的地方要數(shù)可以不用連接數(shù)據(jù)線,USB則可以用在PC和手機(jī)網(wǎng)絡(luò)不在一個(gè)網(wǎng)段用不了的情況。
1. 使用WIFI連接
手機(jī)獲取到手機(jī)的IP,并確保電腦可以PING通手機(jī)。手機(jī)的IP可以在設(shè)置-WIFI設(shè)置里面獲取到。比如手機(jī)的IP是192.168.0.100,連接設(shè)備的代碼為
import?uiautomator2?as?u2
d?=?u2.connect('192.168.0.100')
2. 使用USB連接
手機(jī)的序列號(hào)可以通過adb devices獲取到,假設(shè)序列號(hào)是123456f,連接代碼為
import?uiautomator2?as?u2
d?=?u2.connect_usb('123456f')