如何在Android手機上進行自動化測試(下)
版權宣告:允許轉載,但轉載必須保留原連結;請勿用作商業或者非法用途
前言
通過閱讀本篇教程,你將會了解到:
- 如何使用Poco對Android原生應用進行測試
Poco支援直接對任何Android原生應用(非遊戲引擎、非webview)進行UI層次結構識別,用法上與Poco在其他平臺上一模一樣。
注:基於webview的應用比較特殊(如微信小程式或瀏覽器),請見文件Poco如何支援WebView檢視。
開始前的準備
在AirtestIDE的Poco Assistant
面板中選擇Android模式之後,AirtestIDE會開始自動向手機裡安裝Pocoservice.apk
和Pocoservice-test.apk
安裝完成後,AirtestIDE會自動啟動PocoService
,它會定時抓取 Android上介面的層次結構資訊,稍等片刻就可以在AirtestIDE介面中看到當前介面的UI層次結構樹。
點選UI樹上的任意節點,可以Log面板中看到該節點的所有屬性,同時裝置畫面中將出現方框,把對應位置框選出來,方便定位節點。
如果Pocoservice
啟動失敗,會導致Pocoservice.apk
反覆重灌,此時可以檢查以下幾個方面:
- 是否Android版本過低,Poco支援
Android SDK API
≥ 19,即Android 4.4及以上 - 請關閉PC或手機上連線的網路代理Proxy,否則可能導致連不上Poco
- 可以嘗試解除安裝手機中的2個Pocoservice相關的APK後,手工重新安裝一遍,在
poco\poco\drivers\android\lib
目錄下能夠找到這兩個APK - 部分vivo和oppo手機需要將手機設定-輸入法設定中,把
Yosemite
輸入法設定為預設輸入法+當前輸入法
一個使用計算器的例子
在這裡我們提供一個使用Poco對一個計算器應用編寫程式碼的例子,點這裡下載示例App(calculator),並事先將此App安裝到手機上。
按照剛才說的,在AirtestIDE中的Poco輔助窗下拉選單中選擇Android
Pocoservice
,顯示出當前的UI控制元件層次結構樹。此後就可以在AirtestIDE中進行Poco語句的編寫和錄製了。
程式碼示例
下面這段程式碼例子將演示一個簡單的功能:點選calculator的介面,實現一個1+1=2的運算驗證。
from poco.drivers.android.uiautomation import AndroidUiautomationPoco poco = AndroidUiautomationPoco() poco('com.google.android.calculator:id/digit_1').click() poco('com.google.android.calculator:id/op_add').click() poco('com.google.android.calculator:id/digit_1').click() poco('com.google.android.calculator:id/eq').click() result = poco('com.google.android.calculator:id/formula').get_text() assert_equal(result, '2', '1+1=2 ^^')
在這段程式碼中,我們使用poco = AndroidUiautomationPoco()
初始化了一個poco物件,然後分別選取了1
+
1
按鈕進行點選操作後,使用get_text
介面非常輕鬆地獲取到了結果控制元件的值2
,並且使用斷言語句進行結果驗證。
這個例子非常簡單,更多poco用法和例子請見poco tutorial。
同時連線多臺手機使用Poco
在上一篇教程(四、如何在Android手機上進行測試(上)-多機協作)中,我們提到了一個腳本里可以連線多臺Android手機,並且用set_current
介面在手機之間切換:
from airtest.core.api import connect_device dev1 = connect_device("Android://127.0.0.1:5037/serialno1") # 連上第一臺手機 dev2 = connect_device("Android://127.0.0.1:5037/serialno2") # 第二臺手機 set_current(1)
假如我們在連上手機後,想要分別使用poco去獲取控制元件和點選這兩臺不同的手機,此時需要分別初始化兩個poco,就像這樣:
from airtest.core.api import connect_device dev1 = connect_device("Android://127.0.0.1:5037/serialno1") # 連上第一臺手機 poco1 = AndroidUiautomationPoco(dev1) dev2 = connect_device("Android://127.0.0.1:5037/serialno2") # 第二臺手機 poco2 = AndroidUiautomationPoco(dev2) set_current(1) # 切到第二臺手機 poco2('com.google.android.calculator:id/digit_1').click()
同理,假如不使用connect_device
介面連線手機,而是通過直接在命令列中傳入--device
來自動連線手機的話,不需要在程式碼裡重複執行connect_device
。此時只需要分別獲取到裝置物件,並且使用裝置物件初始化poco就可以了:
from airtest.core.api import G print(G.DEVICE_LIST) # 假設當前總共有2臺手機 poco1 = AndroidUiautomationPoco(G.DEVICE_LIST[0]) poco2 = AndroidUiautomationPoco(G.DEVICE_LIST[1])