项目之前做小程序自动化,我们用的是 Appium+maven+testng 框架来实现的,但做小程序自动化测试时遇到一个问题,在进行支付操作时用 UIutomator 定位数字键盘只能定位一行的整个模块,并不能精确定位,且尝试了下在模块后面加个二维数组定位模块里的元素,还是不行。最后咨询了一下前端的大神告诉我可以试试用坐标来定位 Android 的原生控件。

首先,我们把整个屏幕看成一个第四象限的坐标轴

可以在 UIAutomator 上看到每个模块都有坐标点,如下图,我们可以直接得到该模块左上和右下的 x 值及 y 值,现在我们想获取数字 1 到 3 就很轻松了,只需找到数字的中心点即可。如想获取数字 1,那 1 的 x 值约为 180(计算方式:(1079-1)/3/2),y 值约为 81(计算方式:(1546-1385)/2),其他元素举一反三就都能定位到了。

但坐标定位的方法有一定的缺陷,如果换一个手机,屏幕大小不一样坐标会发生变化,这种方法定位也不够稳定,而且如果遇到数字键盘的排列随机变化的话,这种方案也行不通,可以通过图像识别的方式来定位,目前只接触过 Airtest,不过感觉对于文字和数字,Airtest 的识别并不是很准确。下来可以再调研一下 OpenCV 的 matchTemplate 方法,可以在模板块和输入图像之间寻找匹配,获得匹配结果图像。如果测试设备不常换,且元素位置不变的话目前坐标定位可以暂时解决定位非原生控件的问题。


↙↙↙阅读原文可查看相关链接,并与作者交流