前面總結了7種定位方法,今天在介紹一種uiautomator方法,其實appium就是基於uiautomator框架實現的,讓咱們一塊兒看下uiautomator有哪些定位方法可使用android
UIAutomator是android的自動化測試框架,也是Android-Sdk中一個查看頁面組件元素工具web
前面介紹了常規的定位方法,這裏uiautomator又提供了3種經常使用的定位方法,此次咱們主要經過uiautomator方法進行介紹,定位的話依舊拿淘寶來作實戰app
一、text(「text文本」)框架
text = 'text("註冊/登陸")' driver.find_element_by_android_uiautomator(text).click()
二、文本比較長,可使用textContains模糊查詢定位 textContains('text文本')工具
text1 = 'textContains("請輸入手機號碼")' driver.find_element_by_android_uiautomator(text1).send_keys("123456")
三、textStartsWith("以text文本開頭")測試
text2 = 'textStartsWith("請輸入驗證碼")' driver.find_element_by_android_uiautomator(text2).send_keys("12234")
運行結果:ui
因爲用的是模擬器可能有點卡頓。抱歉哈編碼
代碼結果:spa
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, # 不清空數據 "unicodeKeyboard": True, # 使用Unicode編碼方式發送字符串 "resetKeyboard": True, # 鍵盤隱藏起來 } driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) time.sleep(4) text = 'text("註冊/登陸")' driver.find_element_by_android_uiautomator(text).click() time.sleep(5) text1 = 'textContains("請輸入手機號碼")' driver.find_element_by_android_uiautomator(text1).send_keys("123456") time.sleep(5) text2 = 'textStartsWith("請輸入驗證碼")' driver.find_element_by_android_uiautomator(text2).send_keys("12234")
這個方法和appium定位方法同樣都是經過Class屬性進行定位code
# 經過class定位登陸按鈕 className = 'className("android.widget.Button")' driver.find_element_by_android_uiautomator(className).click()
經過uiautomator工具找到註冊/登陸按鈕的Class屬性
resourceld 和appium中的id同樣。
# 經過resourceId定位輸入框 id = 'resourceId("com.taobao.taobao:id/aliuser_login_mobile_et")' driver.find_element_by_android_uiautomator(id).send_keys("123456")
贊成的方法經過uiautomator找到搜索框的id
id和class定位執行結果:
代碼結果:
# 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, # 不清空數據 "unicodeKeyboard": True, # 使用Unicode編碼方式發送字符串 "resetKeyboard": True, # 鍵盤隱藏起來 } driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) time.sleep(6) # 經過class定位登陸按鈕 className = 'className("android.widget.Button")' driver.find_element_by_android_uiautomator(className).click() time.sleep(5) # 經過resourceId定位輸入框 id = 'resourceId("com.taobao.taobao:id/aliuser_login_mobile_et")' driver.find_element_by_android_uiautomator(id).send_keys("123456")
上面寫了一些單獨的定位方法,其實uiautomator還支持組合定位元素,意思就是支持id和text或者text和className等,這樣的定位更加準確,具體的繼續往下看吧
一、id和text方法組合
# 經過text+ClassName組合 (resourceId(屬性).text(屬性)) classText = 'className("android.widget.Button").text("註冊/登陸")' driver.find_element_by_android_uiautomator(classText).click()
二、class和text方法組合
# 經過text+ID組合 (resourceId(屬性).text(屬性)) IdText = 'resourceId("com.taobao.taobao:id/aliuser_login_mobile_et").text("請輸入手機號碼")' driver.find_element_by_android_uiautomator(IdText).send_keys("123456")
執行結果:
# 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, # 不清空數據 "unicodeKeyboard": True, # 使用Unicode編碼方式發送字符串 "resetKeyboard": True, # 鍵盤隱藏起來 } driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) time.sleep(6) classText = 'className("android.widget.Button").text("註冊/登陸")' driver.find_element_by_android_uiautomator(classText).click() time.sleep(5) # 經過text+ID組合 IdText = 'resourceId("com.taobao.taobao:id/aliuser_login_mobile_et").text("請輸入手機號碼")' driver.find_element_by_android_uiautomator(IdText).send_keys("123456")
定位的時候咱們也能夠經過父級找到子級定位
格式:
# 經過父子定位 (父親屬性).childSelector(定位屬性)
# 經過父子定位 fuzi = 'resourceId("com.taobao.taobao:id/home_searchbar").childSelector(className("android.widget.EditText"))' driver.find_element_by_android_uiautomator(fuzi).click()
定位也能夠經過兄弟之間的完成定位
格式:
# 經過兄弟定位 (兄弟屬性).fromParent(定位屬性)
# 經過兄弟元素定位 xiongdi = 'resourceId("com.taobao.taobao:id/photoBtn").fromParent(className("android.widget.EditText"))' driver.find_element_by_android_uiautomator(xiongdi).send_keys(u"牛仔褲")
完成代碼:
# 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, # 不清空數據 "unicodeKeyboard": True, # 使用Unicode編碼方式發送字符串 "resetKeyboard": True, # 鍵盤隱藏起來 } driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) time.sleep(6) # 經過父子定位 fuzi = 'resourceId("com.taobao.taobao:id/home_searchbar").childSelector(className("android.widget.EditText"))' driver.find_element_by_android_uiautomator(fuzi).click() time.sleep(6) # 經過兄弟定位 xiongdi = 'resourceId("com.taobao.taobao:id/photoBtn").fromParent(className("android.widget.EditText"))' driver.find_element_by_android_uiautomator(xiongdi).send_keys(u"牛仔褲")
結果:
這個地方沒有設置appium的鍵盤全部致使的是亂碼的。
元素定位方面方法很是的多,喜歡那種咱們用哪一種,哪一種簡單咱們就用那種
感受安靜寫的對您有幫助的話,能夠點歌關注,不迷路,有哪裏寫錯的或者不懂的能夠下方留言!