airtest使用
airtest使用
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()