AirtestProject Airtest 快问快答,你们想问的这里都有!(第 1 期)
此文章来源于项目官方公众号:“AirtestProject”
版权声明:允许转载,但转载必须保留原链接;请勿用作商业或者非法用途
前言
本期我们给同学们整理了答疑 Q 群中,26 个同学们最容易问到的问题,后续我们还会持续整理更多常见问题帮助大家避坑哒~
1.如何输入文字?
① 使用 airtest 的 text()
接口:
touch(输入框)
text("文本")
② 使用 poco 的 set_text()
接口:
poco("输入框").click()
poco("输入框").set_text("文本")
另外,airtest 和 poco 脚本可以混用,所以当输入框不支持 text()
接口输入时,可更换成 poco 的 set_text()
接口,同理,不支持 poco 输入时,也可以更换成 airtest 的 text()
接口输入。
2.minicap serve setup time out
屏幕初始化失败,常见于高版本 MIUI 设备或者模拟器等;先检查当前 IDE 是否为最新版本,不是请把 IDE 更新到最新版本;然后再尝试在 connect 设备之前,下拉勾选 use javacap
,再连接设备。
3.minitouch serve setup timeout
点击初始化失败,常见于安卓 10 或者 10 以上的设备,解决办法,检查当前环境的 airtest 版本是否为最新的(IDE 更新到最新版本,使用本地 python 环境把本地环境的 airtest 更新到最新版本)。
4.Javacap server setup timeout
设备不适用于 javacap
,在 IDE 连接设备之前 请勿勾选 use javacap
,脚本连接设备的字符串也不要带 ?cap_method=JAVACAP
。最后请确保当前使用的是最新版本的 airtest。
5.如何显示坐标
顶部菜单栏,选项 - 设置,只勾选实时坐标显示,则显示绝对坐标;同时勾选实时坐标和相对坐标,则显示相对坐标。(Airtest 使用绝对坐标系,poco 使用相对坐标系)
# 点击坐标为[100,100]的位置
touch([100,100])
# 点击屏幕中心[0.5,0.5]
poco.click([0.5,0.5])
6.图像识别不准确
请参考官方公众号 “AirtestProject” 的教程推文:
- 了解图像识别原理与算法:3 分钟教会你选择合适的图像识别算法
- 提高图像识别的兼容性①:写了 10000 条 Airtest 截图脚本总结出来的截图经验,赶紧收藏!
- 提高图像识别的兼容性②:截图识别成功率太低,究竟该如何补救
7.设备连接不上
请参考官方文档的相关内容:AirtestIDE 使用文档 -- 设备连接--Android 连接常见问题,然后根据自己的手机型号,查看 1、2 节内容。
不同品牌手机的相关设置名称仅供参考,不是所有的品牌型号相关的设置名称和位置都一样,所以教程中提到的设置仅供同学们参考,如找不到完全相同的设置,请同学们仔细查找类似的设置。
8.模拟器连接不上
- 1)检查是否安装上了输入法 Yosemite,没安装手动安装上
- 2)连接后黑屏或者画面模糊等,connect 之前下拉勾选
use javacap
再连接 - 3)模拟器连接更多详情和答疑,请参考公众号文章: 测试了 5 款最常见的模拟器,发现与 Airtest 自动化最配的竟然是...
9.poco 定位报错找不到
1)有时候 IDE 自动生成的 poco 定位脚本会非常长,层级也非常深,回放时可能出现找不到控件的情况;这时不建议同学们直接使用自动生成的定位脚本,可以根据 UI 树详情,另外编写更精简的定位脚本,推荐使用正则匹配来进行脚本定位会好一些。
2)如果定位脚本是同学们自己编写的,请检查对应的属性或者层级关系,看是否是脚本错误而导致找不到元素。
3)如出现单独选中调试脚本,可以找到控件,但实际运行脚本又容易找不到控件,建议在该条定位脚本之前添加足够的
sleep()
,确保画面跳转稳定后,再来查找控件。
10. no module named 'airtest'、‘poco’、‘airtest-selenium’ 等,找不到模块
在当前使用的 python 环境中,安装上缺失的对应模块:
pip install airtest
pip install pocoui #(不能安装poco,如安装了请卸载pip uninstall poco)
pip install airtest-selenium
11.poco 拿不到控件,poco 的支持情况
目前只有原生应用可以直接使用 poco(无需接入 pocoSDK),非原生应用,比如各种游戏应用、H5 小程序、混合开发的应用等,都不能直接使用 poco 拿取控件,绝大多数的游戏支持接入对应引擎的 pocoSDK 之后,可以获取控件信息。
12.辅助窗没有刷出 UI 树
- 1)除原生应用之外,其余引擎都需要接入 SDK 才可以查看 UI 树;
- 2)检查手机上是否已经自动安装上 poco 初始化相关的 2 个 apk(
pocoservice-debug.apk
、pocoservice-debug-androidTest.apk
),未安装要手动安装上; - 3)安装输入法
Yosemite
并设为默认输入法 - 部分厂商的手机需要额外的设置,请参考官方文档:AirtestIDE 使用文档 -- 设备连接--Android 连接常见问题。
13.poco 刷新时间
UI 树的默认刷新时间为 2 秒,可以在选项 -- 设置--poco,里面设置,设置完成后记得点击 OK 保存设置。
14.invalid syntax
典型的 python 语法错误,常见于脚本未换行、缩进错误、缺少一边 "
或者 (
等。
15.mac 上出现很多个 IDE 的图标
尝试在 IDE 顶部菜单栏的选项 -- 设置中,去掉自动补全设置的勾选。
16.record_pos、resolution 表示什么
Template
类里面的参数,record_pos
计算坐标对应的中点偏移值相对于分辨率的百分比,匹配时会优先匹配这附近的画面;resolution
记录了截图时的手机分辨率。
Template(r"tpl1611559272215.png", record_pos=(-0.106, -0.035), resolution=(1080, 1920))
如同学们使用的是自己截取的图片,不填 record_pos
参数也不会对识别效果产生很大影响,如想要计算,可参考如下源码:
17.怎么点击软键盘上面的搜索?输入后回车?
如需点击软键盘上面的 search
按钮,则:
text("文本",enter=False,search=True)
同理,如需输入后回车,则 text("文本",enter=True)
,不需要回车则, text("文本",enter=False)
。
18.批量运行?多任务运行?多机运行?
目前官方文档上有提供多机协作和用 bat 脚本做多机运行的实例,都在 AirtestIDE 使用文档 -- 运行脚本的章节下面,另外利用多线程方法来进行批量运行可以参考网上的教程:
- 多机协作的实操案例:“多机协作” -- 微信互加好友案例分析
- 用 bat 脚本实现批量执行的实操案例:巧用 bat 文件做 Airtest 脚本的 “批量运行”
19.判断元素/截图存在
- airtest 的,判断截图目标是否存在于当前画面上:
exists(截图)
- poco 的,判断元素是否存在:
poco("xxx").exists()
20.等待元素/截图出现
- airtest 的,等待某个截图目标出现在当前画面上:
wait(截图)
- poco 的,等待某个控件元素出现:
poco("xxx").wait_for_appearance()
21.assert 断言
- 断言某个截图目标是否存在于当前画面上:
assert_exists(截图)
- 断言某个 poco 元素是否存在:
assert_equal(poco(xxx).exists(),"True","xxx控件存在")
22.报错之后如何继续执行
使用 try-except
捕捉错误,让程序继续运行。
23.不能输入密码?密码界面黑屏?
应用的登录页面或者密码界面一般都不给截屏录屏的,同学们可以检查看看你的测试设备的设置里面,有没有安全键盘、防止恶意截屏录屏之类的设置,关掉就行。
24.怎么调用别的脚本?
airtest 提供 using
接口可以用来调用别的 .air
脚本。详细使用方法和案例可以查看官方公众号的教程推文:一个方法帮你在主脚本里添加 “子脚本” 的运行。
如使用 using
调用之后,发现程序仍是找不到脚本,建议检查 using
接口里面的脚本路径是否有误,另外还可以尝试在脚本开头把待引入的脚本路径添加到 sys.path
中:
#将test1.air的路径添加到sys.path里面
sys.path.append(r"D:\test\user\project\test1.air")
25.poco 定位脚本怎么写?
poco 支持用基本选择器、相对选择器和空间选择器来编写定位脚本,另外还支持用正则表达式来匹配控件。详细教程和实例可以查看官方公众号的教程推文:
26.局部截图和局部找图
局部截图:
screen = G.DEVICE.snapshot()
# 局部截图
local = aircv.crop_image(screen,(0,160,1067,551))
局部找图:
screen = G.DEVICE.snapshot()
# 局部截图
local_screen = aircv.crop_image(screen,(0,949,1067,1500))
# 将我们的目标截图设置为一个Template对象
tempalte = Template(r"png_code/设置.png")
# 在局部截图里面查找指定的图片对象
pos = tempalte.match_in(local_screen)
详细教程和实例可以查看官方公众号的教程推文:使用 Airtest 最常遇到的几个需求,都帮你们实现好了。
Airtest 官网:http://airtest.netease.com/
Airtest 教程官网:https://airtest.doc.io.netease.com/
搭建企业私有云服务:https://airlab.163.com/b2b
官方答疑 Q 群:654700783
呀~这么认真都看到这里啦,帮忙点击左下角的爱心,给我点个赞支持一下把,灰常感谢~