airtest
Airtest是網易開發的手機UI界面自動化測試工具
通過截圖功能操作手機雖然方便,但是截圖涉及到分辨率的問題,代碼不能在不同的手機上通用。
可以用來開發手機App爬蟲
使用先抓大再抓小的技巧,先把每一組結果的父節點抓下來,再到每個結果里面分別獲取子節點
使用流程
- 打開手機(或模擬器)的USB調試功能,並選用網易IDE提供的輸入APP后,使用adb 連接手機 參考http://airtest.netease.com/docs/cn/2_device_connection/3_emulator_connection.html
- 利用airtest輔助窗 截屏定位,滑動等
- 利用poco輔組窗 高級定位 (在下拉菜單中選Android開發環境,選鎖🔒后Airtest的屏幕被鎖定) 在左下UI結構圖中,點擊對應的節點,代碼中會自動添加定位信息
- 在已連接的手機上方有一個phone assistant 可以實現手機應用的安裝/卸載/列表查看;
常用快捷操作:打開網址、輸入文本、切換輸入法、音量調節等;手機Shell調試窗口
基本操作
touch: 點擊屏幕元素
swipe: 滑動屏幕
exists: 判斷屏幕元素是否存在
text: 在輸入框中輸入文字
snashot: 截圖
點自動錄制,可以直接點之后完成代碼的生成
poco(text="知乎").click()
poco(name="com.zhihu.android:id/input").set_text('古劍奇譚三')
poco(name='com.zhihu.android:id/magi_title', text='古劍奇譚(電視劇)').click()
poco(name='com.zhihu.android:id/magi_title')[1].click()
poco(name='com.zhihu.android:id/magi_title', textMatches='^古劍奇譚三.*$').click() #正則表達式
常見的基本上不會變化的屬性包含但不限於:name type resourceId package
poco.swipe([0.5, 0.8], [0.5, 0.2])# poco.swipe(起點坐標,終點左邊) 屏幕左上角為(0, 0),屏幕右下角為(1, 1)
使用child只會在子節點中搜索需要的內容,而使用offspring會像文件夾遞歸一樣把里面的所有節點都遍歷一次,直到找到符合條件的屬性為止。
安裝到python
- pip install pocoui 安裝環境即可直接在python中調用poco等函數
- pip install airtest
- 如果adb無效,可能需要給adb賦予運行權限
控制多台手機
adb devices -l
from airtest.core.api import auto_setup
from airtest.core.android import Android
from poco.drivers.android.uiautomation import AndroidUiautomationPoco
auto_setup(__file__)
device_1 = Android('76efadf3a7ce4') #最左邊的編號就是手機串號
device_2 = Android('adfasdfasf23')
device_3 = Android('adifu39ernla')
poco_1 = AndroidUiautomationPoco(device_1, use_airtest_input=True, screenshot_each_action=False)
poco_2 = AndroidUiautomationPoco(device_2, use_airtest_input=True, screenshot_each_action=False)
poco_3 = AndroidUiautomationPoco(device_3, use_airtest_input=True, screenshot_each_action=False)
airtest run untitled.air --device Android:///手機設備號 --log log/
python -m airtest run untitled.air --device Android:///手機設備號 --log log/
所有的選項都勾選上之后連接的設備,用&&來連接多個參數字符串
Android://127.0.0.1:5037/79d03fa?cap_method=JAVACAP&&ori_method=ADBORI&&touch_method=ADBTOUCH
a = connect_device("Android:///")
from poco.drivers.android.uiautomation import AndroidUiautomationPoco
poco = AndroidUiautomationPoco()
poco('android:id/title').click()