Appium 基本元素定位

基础元素定位

1. 简介

元素定位是 UI 自动化测试中最关键的一步,假如没有定位到元素,也就无法完成对页面的操作。那么在页面中如何定位到想要的元素,本小节讨论 Appium 元素定位方式。

2. 常用的定位方式

定位页面的元素有很多方式,比如 ID、accessibility_id、XPath等进行元素定位,还可以使用 Android、iOS 工作引擎里面提供的定位方式。一般情况下,如果元素的 ID 属性是唯一的,可以直接使用元素的 ID 来进行元素定位,非常快捷、高效。如果元素没有 ID 属性,或者页面有两个或者多个相同 ID 属性的元素,可以考虑其它的定位方式定位,比如 accessibility_id、XPath等,复杂元素也可以使用组合定位的方式来进行元素定位。这节我们主要介绍 ID、accessibility_id、Xpath 进行元素定位,Android 与 iOS 特有的元素定位方式暂不介绍。

2.1 通过 ID 定位

在 Android 系统元素的 ID 被定义为 resource-id,使用页面分析工具比如 Appium Inspector 或者 SDK 里自带的 uiautomatorviewer 能够获取元素的唯一标识是 ID 属性,可以使用 ID 进行元素定位,方便快捷。这里需要注意的是,在 App 端,ID 并不一定是唯一的,一个页面上有可能有多个拥有相同的 ID 属性的元素。

Appium Inspector 定位元素:

示例代码如下:

driver.find_element(By.ID, \
"android:id/text1").click()

注意上面的 resource-id 对应的属性(包名:id/id值),在使用这个属性的时候可以把它当作一个整体,也可以使用斜杠后面的值text1。

2.2 通过 accessibility_id 定位

当分析工具 Appium Inspector 能抓取到唯一的 accessibility id 的时候,可以采用accessibility id 定位的方式,这个属性同时拥有另一个属性名 content-desc,示例代码:

driver.find_element_by_accessibility_id("Accessibility")

2.3 通过 XPath 定位

Xpath 介绍
XPath 的英文全称为:XML Path Language,意旨对 XML 中的元素进行路径定位和的语言,它可适用 XML 标记语言,Html 标记语言,app Dom结构。XPath 是自动化工具的定位基础,可适用于 Selenium 工具,Appium 工具,Appcrawler 工具。

如果页面复杂,ID 与 Accessibility ID 找到我们需要的元素,可以使用Xpath 能够灵活的通过元素与元素之间的层级关系确定元素的唯一性。这也是UI定位里面使用的相对较频繁的定位方式。

XPath 基本语法

下面是XPath的常用方法:

图片标题

说明:

图片标题

还需注意:

  • "/"还可表示孩子元素,孩子元素是指某一元素的子元素
  • "//"还可表示子孙元素,子孙元素是指某一元素的子元素,子元素的子元素等

XPath 组合定位

通过 XPath 可以同时匹配 2 个甚至多个属性来完成元素定位。这里的属性包括 text、resource-id、class、index、content-desc 等属于 XML 结点里面的属性,使用这些属性任意组合完成定位。也可以使用 and、or 等逻辑处理语句增加定位条件。示例代码:

driver.find_element(
    By.XPATH,'//*[@text="我的" and @resource-id="tab_name"]'
    ).click()

driver.find_element(
    By.XPATH,'//*[@text="注册/登录" and @index="1"]'
    ).click()

XPath 模糊定位

contains( )方法是模糊匹配的定位方法,对于一个元素的id或者text不是固定的,但有一部分是固定的,这种就可以模糊匹配。如://[contains(@content-desc, '帮助')],示例代码:

driver.find_element(By.XPATH,
'//*[contains(@text, "注册")]').click()

3. 案例

可以使用uiautomatorviewer工具进行dom分析,然后对分析到的元素进行 XPath 定位,比如下面的搜索框,可以使用元素的多种属性进行定位:test,resource-id,class,content-desc等属性。

图片说明

推荐使用resource-id进行定位,通常情况下,它是页面唯一的属性,其XPath如下:

driver.find_element(
    By.XPAtH, '//*[contains(@resource-id, "tv_search")]')
#或者也可写成下面这样
driver.find_element(By.ID, 'tv_search')

小结

掌握了最基础的元素定位⽅法后,我们来进⼀步研究下 Appium 的三种等待机制。

<p> 专刊包含了10+年经验测试架构师对测试职业发展的深度解读 帮助你掌握当下 BAT 流行的 App 自动化测试技术基础技能和工具使用;以及从入门到进阶的自动化测试实战经验,在面试中能够脱颖而出。 本专刊购买后即可解锁所有章节,故不可以退换哦~ </p> <p> <br /> </p> <p> <br /> </p>

全部评论

相关推荐

Z_eus:别打招呼直接发你的优势
点赞 评论 收藏
分享
nus22016021404:兄弟,你这个简历撕了丢了吧,就是一坨,去找几个项目,理解项目流程,看几遍就是你的了,看看八股就去干了,多看看牛客里别人发出来的简历,对着写,你这写的啥啊,纯一坨
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务