airtest其实由三部分构成 airtestIDE airtest框架 poco框架
是网易出品的一款非开源的工具 用于帮助我们实现自动化的相关脚本创建 编写
基于图像识别的开源自动化框架(理论上只要设备不黑屏白屏蓝屏异常情况) 都可以通过图像进行定位
基于元素进行定位的开源自动化框架(类似于使用webdriver定位元素 语法不一样)
官网连接设备文档 https://airtest.doc.io.netease.com/IDEdocs/3.2device_connection/2_emulator_connection/
连接真机问题参考地址 https://mp.weixin.qq.com/s?__biz=MzA5NDYxNTU5NA==&mid=2247489153&idx=1&sn=abcc2b0df051c7122f3315d81d74a0d2&chksm=904ab7c4a73d3ed215c5c746d5ae76b3021c6903cc6ae646dc8c2c40b8e0b56b610a04f24683&cur_album_id=1891690652363456519&scene=189#wechat_redirect
连接模拟器问题参考地址 https://mp.weixin.qq.com/s?__biz=MzA5NDYxNTU5NA==&mid=2247489207&idx=1&sn=0fd171a8981fc3c67e8a7951aa8c273f&chksm=904ab7f2a73d3ee4ff4ce0046caee8cd2454bc31a44dd56983b77cdcb3f81ac3f4fe84de25fa&cur_album_id=1891690652363456519&scene=189#wechat_redirect
出现adb版本不匹配的错误
原因:电脑上存在多个adb文件 且版本不一致
需要将电脑上所有的adb.exe 变成统一版本(使用同一份文件进行覆盖替换)
常见adb.exe位置 你可以自己去 AndroidSDK文件 airtest文件夹 模拟器的安装文件夹下去搜索 adb.exe
AndroidSDK文件中的adb位置 AndroidSDK文件\platform-tools
airtest文件中的adb位置 AirtestIDE文件夹\airtest\core\android\static\adb\windows
未开启开发者选项 ,未允许USB调试,开发者选项内 打开禁止权限监控
Yosemite.apk文件所在位置 AirtestIDE\airtest\core\android\static\apks
pocoservice-debug.apk文件所在位置 AirtestIDE\poco\drivers\android\lib
airtestIDE主要由 以下几个窗口构成
airtest辅助窗(airtest框架常用的api函数放在该位置 方便你直接使用)
poco辅助窗(类似于F12检查元素 这里显示当前手机页面的元素情况)
脚本编辑窗(在该窗口进行代码的编写)
日志查看窗(查看代码运行过程中的产生的相关数据)
设备窗(动态显示当前连接的设备)
文件新建脚本的时候建议 先确保手机连接
可以通过Android助手对话框 然后点击刷新获取当前app的包名及主界面名
可以在选项设置里面 勾选实时坐标显示 相对坐标 这样 鼠标移动到手机屏幕上会实时显示当前光标所在屏幕的相对坐标
点击操作:
touch(图片/坐标,times=次数,duration=持续时间)
滑动操作:
swipe(图片,vector=[水平方向滑动百分比,垂直方向滑动百分比],duration=滑动持续时间)
文本输入:
text(文本内容,search=False)
必须确保手机Yosemite输入法打开 有些软件文本框输入内容后不会执行搜索 可以设置search=True即可实现自动搜索
键盘输入:
keyevent(键盘代码) 根据对应的键盘代码实现对应的操作 常见键盘码
返回首页 HOME 3 返回上一步 BACK 4 回车 ENTER 66 退格 DEL 67
assert_exists(图片, "请填写测试点") 判断图片是否存在,不存在报错
assert_equal("实际值", "预测值", "请填写测试点.") 判断实际值和预期值是否一致 类似于 assert 预期值==实际值
启动指定app:
start_app(包名)
关闭指定app:
stop_app(包名)
安装app:
install(包所在的路径)
卸载app:
uninstall(包名)
捏合操作(图片放大缩小):
pinch(in_or_out='in', center=None, percent=0.5)
in_or_out – 向内捏合或向外扩大,在[“in”, “out”] 中枚举一个值
center – pinch动作的中心位置,默认值为None则为屏幕中心点
percent – pinch动作的屏幕百分比,默认值为0.5
airtest常用api文档 https://airtest.readthedocs.io/zh_CN/latest/all_module/airtest.core.api.html
基于整个手机操作 类似于 driver(实例化出来的浏览器驱动对象)
基于屏幕点击某个位置
poco.click([x,y]) xy就是相对坐标
基于屏幕某个位置长按
poco.long_click([x,y], duration=2.0)
基于屏幕捏合操作
poco.pinch(direction='in', percent=0.6, duration=2.0)
得到屏幕尺寸
poco.get_screen_size() 返回一个列表 第一个元素是宽 第二个元素是高
基于屏幕滑动1
poco.scroll(direction='vertical', percent=0.6, duration=2.0)
direction是滑动方向 只能是 “vertical” 垂直,或者 “horizontal” 水平
基于屏幕滑动2
poco.swipe(p1, p2=None, direction=None, duration=2.0)
从p1位置滑动到p2位置 如果写方向 就可以不写p2 按照方向滑动
基于屏幕操作框架的api文档 https://poco-chinese.readthedocs.io/zh_CN/latest/source/poco.pocofw.html
基于元素对象操作 类似于 driver.find_element定位到一个ele元素后 ele的相关操作
定位元素的方式
ele = poco(属性名=属性值) 默认会找到当前页面所有符合条件的元素 但是如果直接对他操作 默认操作第一个
poco(nameMatches="") 可以针对name属性的内容 使用正则语法进行匹配
poco(textMatches="") 可以针对text属性的内容 使用正则语法进行匹配
对具体元素进行点击:
ele.click()
获取元素的相关属性:
ele.attr(属性名) ele.attr("text")==ele.get_text() ele.attr("pos")==ele.get_position()
ele.attr("name")==ele.get_name()
设置元素的相关属性:
ele.setattr(属性名,属性值) 这个方法只是单纯修改属性 如果想实现搜索类的操作需要执行回车或者搜索
ele.setattr("text",属性值)==ele.set_text("属性值")
针对元素对象进行拖动(滑动):
ele.drag_to(目标元素对象/相对坐标)
判断元素对象是否存在:
ele.exists() 返回布尔值 True表示存在 False表示不存在
针对元素进行长按:
ele.long_click()
针对元素进行滑动:
ele.swipe(direction, focus=None, duration=0.5) direction是一个列表 [x,y]
x是水平方向的偏移百分比 y是垂直方向的偏移百分比
针对元素进行水平或者垂直方向滑动:
ele.scroll(direction='vertical'/'horizontal', percent=0.6, duration=2.0)
基于元素对象操作 https://poco-chinese.readthedocs.io/zh_CN/latest/source/poco.proxy.html
https://juejin.im/post/6844904150728179725