在使用appium做app自動(dòng)化測(cè)試的過程中,可能會(huì)遇到元素的屬性值不是唯一的情況嫩实,導(dǎo)致不能通過find_element_bi_xx()方法定位元素,這個(gè)時(shí)候我們就可以通過坐標(biāo)來定位元素。
通過絕對(duì)坐標(biāo)定位(不推薦)
在手機(jī)(或模擬器)的開發(fā)者選項(xiàng)里打開指針位置躁劣,任意點(diǎn)的絕對(duì)坐標(biāo)都能獲取到,如下A點(diǎn)的坐標(biāo)為(542, 1362)
通過相對(duì)坐標(biāo)定位(推薦)
更換不同分辨的測(cè)試機(jī)后籍救,之前獲取的手機(jī)某個(gè)位置點(diǎn)的絕對(duì)坐標(biāo)就會(huì)改變习绢,這樣每次更換測(cè)試機(jī)都需要更改坐標(biāo),顯然是不方便代碼的維護(hù),所以就需要獲取相對(duì)坐標(biāo)闪萄。
-
獲取相對(duì)坐標(biāo)的思路:
1梧却,選擇任意一臺(tái)測(cè)試手機(jī)(或模擬器)
2,獲取需要定位的點(diǎn)的絕對(duì)坐標(biāo)(x1, y1)
3败去,獲取當(dāng)前測(cè)試機(jī)屏幕的寬度(w1)放航、高度(h1)
4,獲取該點(diǎn)橫坐標(biāo)與屏幕寬的比(x1/w1)圆裕,縱坐標(biāo)與屏幕高的比(y1/h1)
5广鳍,更換測(cè)試機(jī)后,獲取新的測(cè)試機(jī)屏幕的寬(w2)吓妆,高(h2)
6赊时,計(jì)算新測(cè)試機(jī)上該點(diǎn)橫坐標(biāo)x2=w2 * (x1/w1),縱坐標(biāo)y2 = h2 * (y1/h1)
點(diǎn)擊A點(diǎn)代碼如下:
點(diǎn)擊絕對(duì)坐標(biāo)
# 點(diǎn)擊絕對(duì)坐標(biāo)時(shí)的代碼行拢,測(cè)試機(jī)屏幕寬1080祖秒,高2340
driver.tap(542, 1362)
點(diǎn)擊相對(duì)坐標(biāo)
# 重新封裝點(diǎn)擊A點(diǎn)相對(duì)坐標(biāo)的方法
def tapA(driver):
# 比例系數(shù)
x = 542/1080
y = 1362/2340
# 獲取新測(cè)試機(jī)屏幕寬、高
w = driver.get_window_size()['width']
h = driver.get_window_size()['height']
# 屏幕寬高乘以A點(diǎn)的比例系數(shù)舟奠,即可得A點(diǎn)在新測(cè)試機(jī)上坐標(biāo)
driver.tap(x*w, y*h)
需要注意:
1竭缝,webdriver中提供坐標(biāo)點(diǎn)擊方法tap(),而元素點(diǎn)擊方法則是click()沼瘫;
2抬纸,區(qū)別于TouchAction類中的tap()方法,不需要構(gòu)造TouchAction對(duì)象耿戚,driver對(duì)象調(diào)用即可湿故。