在使用appium做app自动化测试的过程中,可能会遇到元素的属性值不是唯一的情况,导致不能通过find_element_bi_xx()方法定位元素,这个时候我们就可以通过坐标来定位元素。
通过绝对坐标定位(不推荐)
在手机(或模拟器)的开发者选项里打开指针位置,任意点的绝对坐标都能获取到,如下A点的坐标为(542, 1362)
通过相对坐标定位(推荐)
更换不同分辨的测试机后,之前获取的手机某个位置点的绝对坐标就会改变,这样每次更换测试机都需要更改坐标,显然是不方便代码的维护,所以就需要获取相对坐标。
-
获取相对坐标的思路:
1,选择任意一台测试手机(或模拟器)
2,获取需要定位的点的绝对坐标(x1, y1)
3,获取当前测试机屏幕的宽度(w1)、高度(h1)
4,获取该点横坐标与屏幕宽的比(x1/w1),纵坐标与屏幕高的比(y1/h1)
5,更换测试机后,获取新的测试机屏幕的宽(w2),高(h2)
6,计算新测试机上该点横坐标x2=w2 * (x1/w1),纵坐标y2 = h2 * (y1/h1)
点击A点代码如下:
点击绝对坐标
# 点击绝对坐标时的代码,测试机屏幕宽1080,高2340
driver.tap(542, 1362)
点击相对坐标
# 重新封装点击A点相对坐标的方法
def tapA(driver):
# 比例系数
x = 542/1080
y = 1362/2340
# 获取新测试机屏幕宽、高
w = driver.get_window_size()['width']
h = driver.get_window_size()['height']
# 屏幕宽高乘以A点的比例系数,即可得A点在新测试机上坐标
driver.tap(x*w, y*h)
需要注意:
1,webdriver中提供坐标点击方法tap(),而元素点击方法则是click();
2,区别于TouchAction类中的tap()方法,不需要构造TouchAction对象,driver对象调用即可。