APP自动化元素定位(二)
id定位
Id就是一个元素的唯一身份标识,由开发人员在项目中指定,如果有对应的resource-id,我们就可以采 取这种方式来实现定位操作
注意:有可能app项目开发人员并不是很严谨,一个页面会有多个相同的resource-id值 text属性定位
- 找到购物车元素并且点击
-
实例:id定位 --根据resource-id属性来定位
WebElement shopElement = driver.findElement(MobileBy.id("com.apple.apple2:id/navigation_shopping"));
tikuElement.click();
text属性定位
- 使用UIAutomator定位text属性元素
- 实例:text定位 --根据text属性来进行定位
driver.findElement(MobileBy.AndroidUIAutomator("new UiSelector().text(\"聚划算\")")).click();
className定位
- 根据class属性查找元素
-
实例:className定位 --根据class属性(了解)
List<WebElement> list = driver.findElements(MobileBy.className("android.widget.TextView"));
System.out.println(list.size());
这种方式一般得到的会是多个元素--不推荐
accessibility id定位
- 在UIAutomatorViewer并没有此属性,对应是content-desc属性
-
实例:accessbilityid定位 --根据content-desc属性
driver.findElementByAccessibilityId("购物车").click();
xpath定位
- xpath其实就是一个path(路径),一个描述页面元素位置信息的路径,相当于元素的坐标
- xpath基于XML文档树状结构,是XML路径语言,用来查询xml文档中的节点
- 既可以用于XML,也可以用于HTML
xpath绝对定位
从根开始找 / (根目录)
缺点
- 一旦页面结构发生变化(比如重新设计时,路径少了两节),该路径也随之失效,必须重新写
- xpath相对定位 只要不是/开始的,就是相对路径 相对路径以//开头,表示让xpath引擎从文档的任意符合的元素节点开始进行解析
路径解释:
- // 匹配指定节点,不考虑它们位置(/则表示绝对路径,从根下开始)
- * 通配符,匹配任意元素节点(标签名)。
- @选取属性
- [] 属性判断条件表达式
优点
灵活,方便,耦合性低
xpath轴定位(相对定位中的一种)
当某个元素的各个属性及其组合都不足以定位时,那么可以利用其兄弟节点或者父节点等各种可以定位 的元素进行定位。
轴名称 | 释义 |
parent | 选取当前节点的父节点 |
preceding-sibling | 选取当前节点之前的所有兄弟节点 |
following-sibling | 选取当前节点之后的所有兄弟节点 |
使用语法:
/轴名称::节点名称[@属性=值]
实例:xpath相对定位
driver.findElement(MobileBy.xpath("//android.widget.FrameLayout[@content-desc='购物车']")).click();
driver.findElement(MobileBy.xpath("//*[@content-desc='购物车']")).click();
driver.findElement(MobileBy.xpath("//*[@resource-id='com.apple.apple2:id/navigation_shopping']")).click();
driver.findElement(MobileBy.xpath("//*[@resource-id='com.apple.apple2:id/navigation_shopping' and @content-desc='购物车']")).click();
通过爸爸找到儿子
driver.findElement(By.xpath("//*[@resource-id='com.apple.apple2:id/navigation_shopping']/android.widget.ImageView")).click();
- 轴定位用法1:通过parent轴找爸爸
- driver.findElement(MobileBy.xpath("//*[@resource-id='com.apple.apple2:id/icon']/parent::android.widget.FrameLayout")).click();
- 轴定位用法2:通过preceding-sibling找哥哥
- 注意:第一个哥哥的位置不需要加[0],从第二个哥哥开始通过index属性确认索引位置
- driver.findElement(MobileBy.xpath("//*[@content-desc='我的']/preceding-sibling::android.widget.FrameLayout[2]")).click();
- 轴定位用法3:通过following-sibling找弟弟,第一个弟弟的位置不需要加[0],从第二个弟弟开始通过index属性确认索引位置
- driver.findElement(MobileBy.xpath("//*[@content-desc='逛逛']/following-sibling::android.widget.FrameLayout[2]")).click();
总结
- 常见App元素定位:id(resource-id属性)、text(text属性)、className(了解)、accessbility id(content-desc属性)
- 基本万能元素定位:xpath,xpath相对路径语法、轴定位在相对定位应用(通过附近的元素来辅助找 对应的元素)