Appium(二)定位方式

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‘)]"通过当前元素获取父级元素,再定位里面的空间../表示上一级,以此类推
  • 常用定位差不多就这些

相关推荐