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

        项目做小程序自动化,我们用的是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 方法,可以在模板块和输入图像之间寻找匹配,获得匹配结果图像

你可能感兴趣的:(如何用坐标定位非原生控件?)