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()