前言
本期我们给同学们整理了答疑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.图像识别不准确
- 了解图像识别原理与算法: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) 复制代码