Appium两种定位方式,一种是继承selenium的定位方式,还是一种是Android uiaumator2的定位方式
(一)、seleium的定位
1、定位方式主要有以下几种
- id-》resource-id
- class_name-》class
- name-》text
- accessibility_id-》content_desc
- xpath
2、定位方法
- self.driver.find_element(),参数是元祖,如(By.XPATH,"//*[@text="XXX"]"),还可以为By.ID,By.NAME,By.CLASS_NAME,By.CSS_SELECTOR(这个主要用于webview的定位),返回的是一个WebDriver对象
- self.driver.find_elements(),参数是元祖,如(By.XPATH,"//*[@text="XXX"]"),还可以为By.ID,By.NAME,By.CLASS_NAME,By.CSS_SELECTOR(这个主要用于webview的定位),返回的是一个WebDriver的list列表
- self.driver.find_element_by_id()通过元素ID定位,返回的是一个WebDriver对象
- self.driver.find_elements_by_id()通过元素ID定位,返回的是一个WebDriver的list列表
- self.driver.find_element_by_name()通过元素的text定位,返回的是一个WebDriver对象
- self.driver.find_elements_by_name()通过元素的text定位,返回的是一个WebDriver的list列表
- self.driver.find_element_by_class_name()通过元素的class定位,返回的是一个WebDriver对象
- self.driver.find_elements_by_class_name()通过元素的class定位,返回的是一个WebDriver的list列表
- self.driver.find_element_by_xpath()通过xpath定位,返回的是一个WebDriver对象
- self.driver.find_elements_by_xpath()通过xpath定位,返回的是一个WebDriver的list列表
- self.driver.find_element_by_css_selector()通过css定位,这个用于对webview,h5的测试,返回一个WebDriver对象
- self.driver.find_elements_by_css_selector()通过css定位,这个用于对webview,h5的测试,返回一个WebDriver的liest列表
常用的定位方法基本就是上面的几种,还有一些不怎么常用的就不再列出,如image等,至于上线的xpath等下会单独列出说明
(二)、Uiaumator2定位,这个主要是用到Android提供的uiaumator2框架的定位方式,定位方式基本和selenium一样,主要是定位方法不同,具体如下
1、定位方法
匹配全部text文字: driver.find_element_by_android_uiautomator(‘new UiSelector().text("手机号")‘)
包含text文字 :driver.find_element_by_android_uiautomator(‘new UiSelector().textContains("机")‘)
以text什么开始: driver.find_element_by_android_uiautomator(‘new UiSelector().textStartsWith("手")‘)
正则匹配:text driver.find_element_by_android_uiautomator(‘new UiSelector().textMatches("^手.*")‘)
className: driver.find_elements_by_android_uiautomator(‘new UiSelector().className("android.widget.TextView")‘)
classNameMatches: driver.find_elements_by_android_uiautomator(‘new UiSelector().classNameMatches("^android.widget.*")‘)
resource-id、resourceIdMatches: driver.find_element_by_android_uiautomator(‘new UiSelector().resourceId("com.syqy.wecash:id/et_content")‘)
description: driver.find_element_by_android_uiautomator(‘new UiSelector().description("S 日历")‘) # descriptionStartsWith driver.find_element_by_android_uiautomator(‘new UiSelector().descriptionStartsWith("日历")‘)
descriptionMatches: driver.find_element_by_android_uiautomator(‘new UiSelector().descriptionMatches(".*历$")‘)
(三)、Xpath,借助于Xpath语法能够更好、更精确的定位到元素
- xpath教程:https://www.runoob.com/xpath/xpath-syntax.html
- //*[@resource-id=‘com.xueqiu.android:id/user_profile_icon‘ and @class=‘android.widget.ImageView‘]
- //*[contains(@resource-id, ‘user_profile_icon‘) and contains(@class, ‘Image‘)]
- //*[@text=‘基金‘ and contains(@resource-id, ‘button‘)]
- //*[@text=‘基金‘ and @index=‘1‘]
- (//*[@text=‘基金‘])[1]//[contains(@resource-id,‘buttons_container‘)]//[@text=‘基金‘]
- "//*[contains(@text,‘"+stock_type+"‘)]/../../..//*[contains(@resource-id,‘current_price‘)]"通过当前元素获取父级元素,再定位里面的空间../表示上一级,以此类推
- 常用定位差不多就这些