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()