天天看點

Android+appium +python 點選坐标tap方法的封裝

      當常使用的查找點選元素的方法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值,則是此元素的坐标值。如下:

  

Android+appium +python 點選坐标tap方法的封裝

寫法為: 

self.device.tap([(711,761),(909,959)],100)      

4、點選坐标方法的封裝

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']  #擷取目前螢幕的寬= self.driver.get_window_size()['height']   #擷取目前螢幕的高=(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)      

弊端

通過坐标定位是元素定位的下下下策,實在沒辦法才用這個,不同的手機分辨率不同,是以适用性不強,這個坐标就不能寫死,得算出所在螢幕的比例。

1.作者:Syw

繼續閱讀