1. 前言
我们经常会听同学们提到:这个图片脚本怎么没有点击效果?为什么脚本会点偏了?我想点图片的其它位置可以吗?诸如此类的问题。
今天就来跟同学们详细聊一聊,Airtest的点击位置与点击偏移这块内容,看完之后,遇到类似上面的问题,我们都可以迎刃而解啦。
2. Airtest的点击位置
用一个最简单的图像点击脚本来作为示例:
执行这条图像脚本,会点在哪个位置呢?熟悉Airtest的同学都会知道,是图片的中心位置。那我们如何哪些地方知道这条脚本实际的点击效果呢?教大家几个小技巧。
一个是在手机的设置里面打开“显示触摸操作”,这样我们在IDE运行图像脚本的时候,可以清楚地在手机画面上看到点击位置:
所以在同学们遇到,脚本执行了,但是没有点击效果的时候,不妨打开手机设置,启用“显示触摸操作”,看下究竟是脚本执行了无响应?还是脚本真的没有执行这个点击动作。
另外一个方式是,在IDE的log查看窗里,查看图像算法给出的识别结果(找带有关键词 match result 的 debug 信息):
[15:17:32][DEBUG]<airtest.core.api> match result: {'result': (439, 348), 'rectangle': ((370.76, 265.76), (370.76, 431.76), (508.76, 431.76), (508.76, 265.76)), 'confidence': 0.975566565990448, 'time': 0.3353738784790039}
可以看到,图像算法给出的识别结果是(439, 348),我们可以借助IDE查看移动设备坐标的小工具,来检查下这个结果是否是符合我们预期的结果:
这个方式的好处就是,有时候我们发现,脚本的实际点击位置,偏离了我们的预期,我们就可以到log查看窗里,找到算法识别出来的结果,用坐标工具去设备画面上核对算法结果是否符合我们的预期,是不是真的找偏了。
还有个很直观的方式,就是生成Airtest报告来查看,可以非常直观的看到点击步骤的执行情况,在画面上的具体点击位置等:
3. Airtest的点击偏移
默认情况下,Airtest都是点击图像的中心位置的,也就是 target_pos=5 的位置。如果想要做点击偏移,比如我就要点击图片的左上角位置,那就要先好好了解这个 target_pos 是个什么参数了:
如图所示,target_pos 用于设置在匹配结果图像上的操作位置,取值为1-9的整数,默认为5(即图像中心位置)。如果我们要点击图像左上角的位置,那我们必须手动指定 target_pos=1:
touch(Template(r"tpl1658387780768.png", target_pos=1, record_pos=(0.108, -0.517), resolution=(720, 1440)))
图像点击偏移,常用于下述场景中:
一个是,当我们的页面中,存在很多个相同的图标,我们想指定点击某个位置的图标,就有可能用到 target_pos 的参数,举个例子,在下述的页面中,有3个相同的播放按钮:
如果我们想点击第一个播放按钮,但是仅仅截图图片,是无法保证一定可以点到第一个播放按钮的。
但是如果我们扩大截图范围,并且通过指定 target_pos ,就可以确保我们能点到第一个目标按钮:
另外一个常用的场景是,当我们的点击图片特征点太少时,可以适当增加截图范围,然后通过设置 target_pos ,来点到我们的目标位置。
假设我们想点击上图黄框内的button,如果我们仅仅截图目标图像 ,可以预想的到,目标图像底色一致,基本没有变化,里面也仅有简单的线条,这样的图像脚本,很容易被算法判定为特征点过少,或者是识别到了错误的目标上去。
当我们扩大截图范围,给截图增加更多的特征点,并且适当地设置 target_pos ,就能得到一个兼容性效果更好的图像脚本了:
4. 拓展:Airtest的其它点击参数
# 点击绝对坐标
touch([100,100])
# 点击图片的右下角位置
touch(Template(r"tpl1606730579419.png", target_pos=9))
# 点击2次【不一定能实现双击的效果】
touch([100, 100], times=2)
# 在Android和Windows下,可以设置点击持续时间
touch([100, 100], duration=2)
# 右键点击(Windows)
touch([100, 100], right_click=True)
# 双击
double_click([100, 100])
double_click(Template(r"tpl1606730579419.png"))
5. 小结
今天我们聊了Airtest图像脚本的点击位置与点击偏移,其实,Poco控件脚本也存在类似的情况,我们下期再继续讨论。
最后: 可以在公众号:伤心的辣条 ! 自行领取一份216页软件测试工程师面试宝典文档资料【免费的】。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。
现在我邀请你进入我们的软件测试学习交流群:【746506216
】,备注“入群”, 大家可以一起探讨交流软件测试,共同学习软件测试技术、面试等软件测试方方面面,还会有免费直播课,收获更多测试技巧,我们一起进阶Python自动化测试/测试开发,走向高薪之路。
喜欢软件测试的小伙伴们,如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一 键三连哦!
软件测试工程师自学教程:
这才是2022最精细的自动化测试自学教程,我把它刷了无数遍才上岸字节跳动,做到涨薪20K【值得自学软件测试的人刷】
软件测试工程师月薪2W以上薪资必学技能 — Python接口自动化框架封装.
美团面试真题_高级测试25K岗位面试 — 软件测试人都应该看看
软件测试必会_Jmeter大厂实战 — 仅6步可实现接口自动化测试