Python+Appium自动化测试之通过坐标定位元素

在使用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对象调用即可。

你可能感兴趣的:(Python+Appium自动化测试之通过坐标定位元素)