在使用appium做app自動化測試的過程中,可能會遇到元素的屬性值不是唯一的情況,導致不能通過find_element_bi_xx()方法定位元素,這個時候我們就可以通過坐標來定位元素。
1,通過絕對坐標定位(不推薦)
在手機(或模擬器)的開發者選項里打開指針位置,任意點的絕對坐標都能獲取到,如下A點的坐標為(542, 1362)
2,通過相對坐標定位(推薦)
更換不同分辨的測試機后,之前獲取的手機某個位置點的絕對坐標就會改變,這樣每次更換測試機都需要更改坐標,顯然是不方便代碼的維護,所以就需要獲取相對坐標。
2.1,獲取相對坐標的思路:
1,選擇任意一台測試手機(或模擬器)
2,獲取需要定位的點的絕對坐標(x1, y1)
3,獲取當前測試機屏幕的寬度(w1)、高度(h1)
4,獲取該點橫坐標與屏幕寬的比(x1/w1),縱坐標與屏幕高的比(y1/h1)
5,更換測試機后,獲取新的測試機屏幕的寬(w2),高(h2)
6,計算新測試機上該點橫坐標x2=w2 * (x1/w1),縱坐標y2 = h2 * (y1/h1)
2.2,點擊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對象調用即可。