在作自動化的過程當中都會遇到一些沒法定位到的地方,或者經過元素怎麼都定位不成功的地方,這個時候咱們可使用必殺技,經過座標定位。具體的怎麼操做呢? html
前面安靜寫過一篇關於swipe的滑動app頁面的,其實swipe也能夠模擬點擊事件,只要咱們把後面的響應時間變小,而後座標變成同一個座標。詳情swipe的用法能夠參考appium---App頁面滑動python
經過工具查看到這個登陸/註冊按鈕座標爲[390,831][522,873],算得出來大概座標爲[470,850]web
話很少說直接上代碼,經過swipe進行模擬點擊(註冊/登陸)按鈕數組
# coding:utf-8 from appium import webdriver import time desired_caps = { 'platformName': 'Android', # 測試版本 'deviceName': 'emulator-5554', # 設備名 'platformVersion': '5.1.1', # 系統版本 "appPackage": "com.taobao.taobao", # app包名 "appActivity": "com.taobao.tao.welcome.Welcome", # 啓動launch Activity "noReset": True, # 不清空數據 } driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) # 淘寶加載慢,加個延遲。 time.sleep(16) x1 = int(470) y1 = int(850) driver.swipe(x1,y1,x1,y1,500)
一個方法能夠多種用法,可是python怎麼會這樣對待咱們呢?固然有比這更好的方法app
tap方法表示點擊事件,經過座標的方式進行點擊,通常用於元素難於定位的時候工具
源碼測試
def tap(self, positions, duration=None): """Taps on an particular place with up to five fingers, holding for a certain time # 用五指輕敲一個特定的地方,保持必定的時間 :Args: - positions - an array of tuples representing the x/y coordinates of # 表示x/y座標的元組數組 the fingers to tap. Length can be up to five. - duration - (optional) length of time to tap, in ms # 持續時間單位毫秒 :Usage: driver.tap([(100, 20), (100, 60), (100, 100)], 500) """
這裏咱們能夠直接經過右側bonds屬性上座標直接定位,不用咱們在一個個計算spa
# coding:utf-8 from appium import webdriver import time desired_caps = { 'platformName': 'Android', # 測試版本 'deviceName': 'emulator-5554', # 設備名 'platformVersion': '5.1.1', # 系統版本 "appPackage": "com.taobao.taobao", # app包名 "appActivity": "com.taobao.tao.welcome.Welcome", # 啓動launch Activity "noReset": True, # 不清空數據 } driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) time.sleep(16) # 經過tap模擬點擊 driver.tap([(390,831),(522,873)],500)
注意:更換手機跑腳本的時候,咱們必定要更換座標,每一個手機的座標可能都不一樣。3d
其實方法還有不少種,這裏就先不一個個介紹了,持續更新中~~~code