Appium 如何用坐标定位非原生控件

笨笨的菜鸟VV · 2019年05月04日 · 最后由 笨笨的菜鸟VV 回复于 2019年05月04日 · 1950 次阅读

项目之前做小程序自动化,我们用的是 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 方法,可以在模板块和输入图像之间寻找匹配,获得匹配结果图像。如果测试设备不常换,且元素位置不变的话目前坐标定位可以暂时解决定位非原生控件的问题。

最佳回复

治本方法:

  1. 相对坐标法,就是获取这个框,再根据手机分辨率,算出各个数字的百分比位置
  2. 图片识别,在识别时增加一个模糊参数,即匹配度达到 70% 以上就可以了,可以提高匹配的精度

治标方法:

  1. 不用键盘输入,尝试其他的输入方法,比如 adb shell input text ,adb shell input keyevent 等
共收到 2 条回复 时间 点赞

治本方法:

  1. 相对坐标法,就是获取这个框,再根据手机分辨率,算出各个数字的百分比位置
  2. 图片识别,在识别时增加一个模糊参数,即匹配度达到 70% 以上就可以了,可以提高匹配的精度

治标方法:

  1. 不用键盘输入,尝试其他的输入方法,比如 adb shell input text ,adb shell input keyevent 等

厉害👍

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册