標籤:plain 圖片 定位 無法 self 錯誤 bounds dev parameter
當常使用的尋找點擊元素的方法name、id、classname等無法使用時,我們將會採取座標的點擊來實現操作,同樣存在一個問題,當手機的解析度、螢幕大小不一致時,座標的定位也會不同,因此將採用相對座標來實現點擊。
1、appium/webdriver底層給出的寫法樣本如下,詳細的方法介紹自行查看底層介紹,這裡不給出說明。
:Usage: driver.tap([(100, 20), (100, 60), (100, 100)], 500)
2、常見寫法中出現的問題:
手機中查看座標的方法:開啟手機指標位置(設定--關於手機--開發人員選項--指標位置),點擊某個元素手機頂部顯示出座標。
錯誤寫法一:直接給定想要點擊的座標值:x和y
self.device.tap(250,465) #如某個元素的座標x=250,y=465,直接給定座標寫法如下
錯誤寫法二、不清楚值怎麼給,將x,y值寫2遍,參考底層寫法方式,如下:
self.device.tap([(250,465),(250,465)],100)
執行以上的操作將出現的報錯:AttributeError: Driver_Elements instance has no attribute ‘tap‘
3、正確的點擊座標值擷取方法:
開啟uiautomatorview,點到要擷取的元素上查看右下角的bounds值,則是此元素的座標值。如下:
寫法為:
self.device.tap([(711,761),(909,959)],100)
4、點擊座標方法的封裝
def touch_tap(self,x,y,duration=100): #點擊座標 ,x1,x2,y1,y2,duration ‘‘‘ method explain:點擊座標 parameter explain:【x,y】座標值,【duration】:給的值決定了點擊的速度 Usage: device.touch_coordinate(277,431) #277.431為點擊某個元素的x與y值 ‘‘‘ screen_width = self.driver.get_window_size()[‘width‘] #擷取當前螢幕的寬 screen_height = self.driver.get_window_size()[‘height‘] #擷取當前螢幕的高 a =(float(x)/screen_width)*screen_width x1 = int(a) b = (float(y)/screen_height)*screen_height y1 = int(b) self.driver.tap([(x1,y1),(x1,y1)],duration)
Android+appium +python 點擊座標tap方法的封裝