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();

 

总结 

  1. 常见App元素定位:id(resource-id属性)、text(text属性)、className(了解)、accessbility id(content-desc属性)
  2. 基本万能元素定位:xpath,xpath相对路径语法、轴定位在相对定位应用(通过附近的元素来辅助找 对应的元素)

 

posted @ 2020-12-22 20:57  止语_07  阅读(239)  评论(0编辑  收藏  举报