Appium移動端自動化測試之元素定位(三)


 1、name定位

driver.find_element_by_id('com.shanjian.originaldesign:id/edit_Tel').send_keys('15817252876') driver.find_element_by_id('com.shanjian.originaldesign:id/edit_Pwd').send_keys('123456') driver.find_element_by_name('登錄').click()

所以,我們暫時可以把元素的text 屬性看作name 來使用。如果你的app不能正常的定位元素,那就換其它定位方式吧。

2).id定位

driver.find_element_by_id('com.shanjian.originaldesign:id/edit_Tel').send_keys('15817252876')

driver.find_element_by_id('com.shanjian.originaldesign:id/edit_Pwd').send_keys('123456')

driver.find_element_by_name('登錄').click()

通過UI Automator定位到的resource-id就是元素的ID、

3).classname定位

desired_caps = {
'platformName': 'Android',
'platformVersion': '5.0.0.0',
'deviceName': '127.0.0.1:62001',
'appPackage': 'com.shanjian.originaldesign',
'appActivity':'.activity.other.Activity_In'}
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
sleep(10)
button = driver.find_elements_by_class_name("android.widget.EditText")
print len(button)

輸出結果:

(注:一般一個頁面上的class屬性不唯一,元素不唯一的話定位會報錯了)

4).uiautomator定位

desired_caps = {
'platformName': 'Android',
'platformVersion': '5.0.0.0',
'deviceName': '127.0.0.1:62001',
'appPackage': 'com.shanjian.originaldesign',
'appActivity':'.activity.other.Activity_In',
}
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
sleep(10)
#用於清除歷史記錄
driver.find_element_by_id("com.shanjian.originaldesign:id/edit_Tel").clear()
driver.find_element_by_android_uiautomator('new UiSelector().text("輸入手機號碼")').send_keys("15817252876")
driver.find_element_by_id("com.shanjian.originaldesign:id/edit_Pwd").send_keys("123456")
driver.find_element_by_android_uiautomator('new UiSelector().text("登錄")').click()

注意:使用uiautomator定位時new UiSelect()中間有空格,並且最外層使用單引號里面使用雙引號,否則會報如下錯誤:

selenium.common.exceptions.WebDriverException: Message: The requested resource could not be found, or a request was received using an HTTP method that is not supported by the mapped resource.

driver.find_element_by_android_uiautomator("new UiSelector().text('登錄')").click()

5).accessibility_id定位

1.accessibility_id定位就是通過UI Automator工具查看的content-desc屬性

(當然下圖這個元素的content-desc屬性為空,就不能通過這個屬性定位了,這里只是舉個例子)

2.如上圖的定位,看到content-desc屬性有值,就可以通過accessibility_id來定位了

格式:driver.find_element_by_accessibility_id(“content-desc的值”)

driver.find_element_by_accessibility_id(“xxx”)

Tip:content-desc值對應在web頁面中就是text值,appium使用accessibility_id來定位

6).Xpath定位

需要注意的是:在appium中使用Xpath定位,標簽名就是class的值。

sleep(10)
driver.find_element_by_id("com.shanjian.originaldesign:id/edit_Tel").clear()
driver.find_element_by_xpath("//android.widget.EditText[@resource-id='com.shanjian.originaldesign:id/edit_Tel']").send_keys('15817252876')
sleep(10)
driver.find_element_by_xpath("//android.widget.EditText[@resource-id='com.shanjian.originaldesign:id/edit_Pwd']").send_keys('123456')
sleep(10)
driver.find_element_by_xpath("//android.widget.TextView[@text='登錄']").click()
from selenium.webdriver.common.by import By
driver.find_element_by_xpath("//android.widget.EditText[contains(@resource-id,'originaldesign')]").send_keys('15817252876')
driver.find_element(By.XPATH,("//android.widget.EditText[contains(@resource-id,'originaldesign')]")).send_keys('15817252876')

7).其他定位方法

find_element_by_tag_name()

find_element_by_link_text()

find_element_by_partial_link_text()

find_element_by_css_selector()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM