此文章来源于项目官方公众号:“AirtestProject”
版权声明:允许转载,但转载必须保留原链接;请勿用作商业或者非法用途
本期我们给同学们整理了答疑 Q 群中,26 个同学们最容易问到的问题,后续我们还会持续整理更多常见问题帮助大家避坑哒~
① 使用 airtest 的 text()
接口:
touch(输入框)
text("文本")
② 使用 poco 的 set_text()
接口:
poco("输入框").click()
poco("输入框").set_text("文本")
另外,airtest 和 poco 脚本可以混用,所以当输入框不支持 text()
接口输入时,可更换成 poco 的 set_text()
接口,同理,不支持 poco 输入时,也可以更换成 airtest 的 text()
接口输入。
屏幕初始化失败,常见于高版本 MIUI 设备或者模拟器等;先检查当前 IDE 是否为最新版本,不是请把 IDE 更新到最新版本;然后再尝试在 connect 设备之前,下拉勾选 use javacap
,再连接设备。
点击初始化失败,常见于安卓 10 或者 10 以上的设备,解决办法,检查当前环境的 airtest 版本是否为最新的(IDE 更新到最新版本,使用本地 python 环境把本地环境的 airtest 更新到最新版本)。
设备不适用于 javacap
,在 IDE 连接设备之前 请勿勾选 use javacap
,脚本连接设备的字符串也不要带 ?cap_method=JAVACAP
。最后请确保当前使用的是最新版本的 airtest。
顶部菜单栏,选项 - 设置,只勾选实时坐标显示,则显示绝对坐标;同时勾选实时坐标和相对坐标,则显示相对坐标。(Airtest 使用绝对坐标系,poco 使用相对坐标系)
# 点击坐标为[100,100]的位置
touch([100,100])
# 点击屏幕中心[0.5,0.5]
poco.click([0.5,0.5])
请参考官方公众号 “AirtestProject” 的教程推文:
请参考官方文档的相关内容:AirtestIDE 使用文档 -- 设备连接--Android 连接常见问题,然后根据自己的手机型号,查看 1、2 节内容。
不同品牌手机的相关设置名称仅供参考,不是所有的品牌型号相关的设置名称和位置都一样,所以教程中提到的设置仅供同学们参考,如找不到完全相同的设置,请同学们仔细查找类似的设置。
use javacap
再连接1)有时候 IDE 自动生成的 poco 定位脚本会非常长,层级也非常深,回放时可能出现找不到控件的情况;这时不建议同学们直接使用自动生成的定位脚本,可以根据 UI 树详情,另外编写更精简的定位脚本,推荐使用正则匹配来进行脚本定位会好一些。
2)如果定位脚本是同学们自己编写的,请检查对应的属性或者层级关系,看是否是脚本错误而导致找不到元素。
3)如出现单独选中调试脚本,可以找到控件,但实际运行脚本又容易找不到控件,建议在该条定位脚本之前添加足够的 sleep()
,确保画面跳转稳定后,再来查找控件。
在当前使用的 python 环境中,安装上缺失的对应模块:
pip install airtest
pip install pocoui #(不能安装poco,如安装了请卸载pip uninstall poco)
pip install airtest-selenium
目前只有原生应用可以直接使用 poco(无需接入 pocoSDK),非原生应用,比如各种游戏应用、H5 小程序、混合开发的应用等,都不能直接使用 poco 拿取控件,绝大多数的游戏支持接入对应引擎的 pocoSDK 之后,可以获取控件信息。
pocoservice-debug.apk
、pocoservice-debug-androidTest.apk
),未安装要手动安装上;Yosemite
并设为默认输入法UI 树的默认刷新时间为 2 秒,可以在选项 -- 设置--poco,里面设置,设置完成后记得点击 OK 保存设置。
典型的 python 语法错误,常见于脚本未换行、缩进错误、缺少一边 "
或者 (
等。
尝试在 IDE 顶部菜单栏的选项 -- 设置中,去掉自动补全设置的勾选。
Template
类里面的参数,record_pos
计算坐标对应的中点偏移值相对于分辨率的百分比,匹配时会优先匹配这附近的画面;resolution
记录了截图时的手机分辨率。
Template(r"tpl1611559272215.png", record_pos=(-0.106, -0.035), resolution=(1080, 1920))
如同学们使用的是自己截取的图片,不填 record_pos
参数也不会对识别效果产生很大影响,如想要计算,可参考如下源码:
如需点击软键盘上面的 search
按钮,则:
text("文本",enter=False,search=True)
同理,如需输入后回车,则 text("文本",enter=True)
,不需要回车则, text("文本",enter=False)
。
目前官方文档上有提供多机协作和用 bat 脚本做多机运行的实例,都在 AirtestIDE 使用文档 -- 运行脚本的章节下面,另外利用多线程方法来进行批量运行可以参考网上的教程:
exists(截图)
poco("xxx").exists()
wait(截图)
poco("xxx").wait_for_appearance()
assert_exists(截图)
assert_equal(poco(xxx).exists(),"True","xxx控件存在")
使用 try-except
捕捉错误,让程序继续运行。
应用的登录页面或者密码界面一般都不给截屏录屏的,同学们可以检查看看你的测试设备的设置里面,有没有安全键盘、防止恶意截屏录屏之类的设置,关掉就行。
airtest 提供 using
接口可以用来调用别的 .air
脚本。详细使用方法和案例可以查看官方公众号的教程推文:一个方法帮你在主脚本里添加 “子脚本” 的运行。
如使用 using
调用之后,发现程序仍是找不到脚本,建议检查 using
接口里面的脚本路径是否有误,另外还可以尝试在脚本开头把待引入的脚本路径添加到 sys.path
中:
#将test1.air的路径添加到sys.path里面
sys.path.append(r"D:\test\user\project\test1.air")
poco 支持用基本选择器、相对选择器和空间选择器来编写定位脚本,另外还支持用正则表达式来匹配控件。详细教程和实例可以查看官方公众号的教程推文:
局部截图:
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
呀~这么认真都看到这里啦,帮忙点击左下角的爱心,给我点个赞支持一下把,灰常感谢~