写点什么

App 自动化测试|原生 App 元素定位方法(二)

  • 2023-07-23
    北京
  • 本文字数:1401 字

    阅读完需:约 5 分钟

uiautomator 方法定位原生 app 元素

appium 在 android 端是调用其底层的 UIAutomator2 自动化测试框架去驱动自动化,在定位元素的时候,可以借助 UIAutomator2 的语法来实现定位。在代码实现上提供的 API 是 find_element_by_android_uiautomator;利用 android_uiautomator 进行定位,语法必须属性值是双引号


  1. 根据 text 定位


find_element_by_android_uiautomator('text("值")')find_element_by_android_uiautomator('newUiSelector().text("值")') # 'newUiSelector()'推荐使用


1 # 通过text定位2 driver.find_element_by_android_uiautomator('text("5")').click()3 # 推荐使用正规方法4 driver.find_element_by_android_uiautomator('new UiSelector().text("5")').click()
复制代码


text 定位相关函数:textContains:模糊匹配文本 textStartsWith:以某个文本开头来匹配 textMatches:正则匹配


# text定位相关函数:# textContains:模糊匹配文本driver.find_element_by_android_uiautomator('new UiSelector().textContains("...")')# textStartsWith:以某个文本开头来匹配driver.find_element_by_android_uiautomator('new UiSelector().textStartsWith("...")')# textMatches:正则匹配driver.find_element_by_android_uiautomator('new UiSelector().textMatches("...")')
复制代码


  1. 根据 resourceId 定位


find_element_by_android_uiautomator('resourceId("值")')find_element_by_android_uiautomator('newUiSelector().resourceId("值")')


1 # 根据resourceId定位:2 driver.find_element_by_android_uiautomator('new UiSelector().resourceId("...")').click()
复制代码


  1. 根据 className 定位:关键字 className


1 # 根据className定位:关键字className2 driver.find_element_by_android_uiautomator('new UiSelector().className("...")').click()
复制代码


  1. 根据 contenet-desc 定位:关键字 description


1 # 根据contenet-des定位:关键字description2 driver.find_element_by_android_uiautomator('new UiSelector().description("...")').click()
复制代码


  1. 组合定位(类名和文本)


newUiSelector().className("类名").text("值")其它组合定位方式类推


1 # 组合定位(类名和文本):2 driver.find_element_by_android_uiautomator('new UiSelector().className("android.widget.Button").text("7")').click()3 driver.find_element_by_android_uiautomator('new UiSelector().text("8").className("android.widget.Button")').click()
复制代码


  1. 根据元素关系定位


  • 子孙元素定位使用条件:子元素属性不定,不唯一,只能通过父元素来定位 newUiSelector().resourceId("值").childSelector(className("值").instance(数字))其中 childSelector 可以传入 resourceId、description 等方法 instance 表示匹配的结果所有元素里面的第几个元素,从 0 开始计数


1 # 后代元素定位2 driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.sky.jisuanji:id/tablelayout").childSelector(className("android.widget.Button").instance(3))').click()
复制代码


  • 兄弟元素定位


通过子元素找到父元素,然后通过父元素再去找兄弟元素 newUiSelector().resourceId("值").fromParent(text("值"))fromParent()表示从元素的父元素下查找


1 # 兄弟元素定位2 driver.find_element_by_android_uiautomator('new UiSelector().text("7").fromParent(text("9"))').click()
复制代码


获取更多技术资料,请点击!

用户头像

社区:ceshiren.com 微信:ceshiren2021 2019-10-23 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料,实时更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬。

评论

发布
暂无评论
App自动化测试|原生App元素定位方法(二)_霍格沃兹测试开发学社_InfoQ写作社区