1. BySelector与By静态类

1.1 BySelector类为指定搜索条件进行匹配UI元素, 通过UiDevice.findObject(BySelector)方式进行使用。

1.2 By类是一个实用程序类,可以以简洁的方式创建BySelectors对象。主要功能是使用缩短语法,提供静态工厂方法来构造BySelectors对象。例如:你将使用findObject(By.text("foo")),而不是findObject(new Selector().text("foo"))的方式来查找文本值为“foo”的UI元素。

1.3 通过阅读BySelector类和By类的源代码,可以很清晰的知道两者的关系。

BySelector的部分源码片段:

package android.support.test.uiautomator;import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;public class BySelector {BySelector() {}public BySelector clazz(String className) {checkNotNull(className, "className cannot be null");return className.charAt(0) == 46?this.clazz("android.widget", className.substring(1)):this.clazz(Pattern.compile(Pattern.quote(className)));}

By类的部分源码片段:

package android.support.test.uiautomator;import android.support.test.uiautomator.BySelector;
import java.util.regex.Pattern;public class By {private By() {}public static BySelector clazz(String className) {return (new BySelector()).clazz(className);}

2. 搜索层级深度控制

2.1. 相关AP介绍

返回值 API 说明
BySelector depth(int depth) 通过设定固定层级,进行匹配查找元素。
BySelector depth (int min, int max) 通过设定层级返回,进行匹配查找元素。
BySelector minDepth(int min) 通过设定最小层级限制,进行匹配查找元素。
BySelector maxDepth (int max) 通过设定最大层级限制,进行匹配查找元素。

2.2 简单示例:

2.2.1 通过设定固定层级,层级范围,最小层级等方式进行查找元素,e.g.查找如下图的App Permission链接,并进行点击:

布局文件:

用例代码:

@Testpublic void testCase03(){//通过固定层级,查找元素UiObject2 ui = mDevice.findObject(By.depth(11));Log.i("testCase03", ui.getText());ui.click();//通过设定层级范围,查找元素UiObject2 ui2 = mDevice.findObject(By.clazz(TextView.class).depth(10, 11));Log.i("testCase03", ui2.getText());ui2.click();//通过设定最小层级限制,查找元素UiObject2 ui3 = mDevice.findObject(By.clazz(TextView.class).minDepth(10));Log.i("testCase03", ui3.getText());ui3.click();}

运行结果:

2.2.2 通过设定最大层级条件,进行查找元素,e.g. 查找如下图的返回按钮,并且点击:

布局文件:

用例代码:

   @Testpublic void testCase03(){//通过设定最大层级限制,查找元素UiObject2 ui4 = mDevice.findObject(By.clazz(ImageButton.class).maxDepth(4));ui4.click();}

2.2.3 补充说明:

By类中只提供了固定层级搜索的方法可直接通过By.depth (int exactDepth)的方式进行调用,而层级范围搜索,最小层级搜索限制,最大层级搜索限制等方法,只能通过BySelector对象进行调用,实际应用中可通过By.clazz(TextView.class).minDepth(10)的方式进行调用,即先通过By.clazz(TextView.class)的方式获取到一个BySelector对象,再通过BySelector对象就可以进行调用depth (int min, int max),minDepth(int min),maxDepth (int max)这些方法了。

3. 常规属性搜索,比如:

3.1 通过文本值或者正则表达式,进行查找定位元素,代码如下:

@Testpublic void testCase04(){//通过Text值,进行匹配查找UiObject2 ui = mDevice.findObject(By.text("8"));ui.click();//通过正则表达式,进行匹配查找Pattern p = Pattern.compile("[8-9]");UiObject2 ui2 = mDevice.findObject(By.text(p));ui2.click();}

3.2 运行结果:

4. 逻辑属性搜索

4.1 代码示例

@Testpublic void testCase05(){UiObject2 ui = mDevice.findObject(By.checked(false));ui.click();}

5. 后代搜索

5.1 API介绍

API 说明
hasChild (BySelector childSelector) 添加一个子类匹配的选择条件
hasDescendant (BySelector descendantSelector, int maxDepth) 添加一个后代匹配的选择条件,可设定搜索层级
hasDescendant (BySelector descendantSelector) 添加一个后代匹配的选择条件

5.2 代码示例

@Testpublic void testCase05(){UiObject2 ui = mDevice.findObject(By.clazz(LinearLayout.class).hasChild(By.text("设置")));ui.click();}

Uiautomator 2.0之BySelector类学习小记相关推荐

  1. java基础小记_[Java教程]Java基础学习小记

    [Java教程]Java基础学习小记 0 2016-10-07 18:00:07 题外话:总结了多年的学习心得,不得不说,睡眠是一个学习者的必需品!所谓"早起毁一天"不是没有道理哪 ...

  2. 【Kotlin】学习小记-基础篇

    Kotlin学习小记-基础篇 Kotlin的介绍 入门基础篇 属性声明 关于val和final的小Tips 参数 1.可变参数 2.命名参数 函数返回值 1.默认返回Unit值 2.返回Nothing ...

  3. LINUX下USB1.1设备学习小记(2)_协…

    LINUX下USB1.1设备学习小记(2)_协议 (2009-03-27 14:40) 分类: 文章转载 USB协议: 先看USB接口 可以看出,在USB使用了4根线,分别为电源线,地线,信号线和差分 ...

  4. (2013.01.18-2013.07.15)179天的学习小记

    (2013.01.18-2013.07.15)179天的学习小记 好久没有做个小小结咯,我的第一天学习小记是从2011.07.04开始,那时说好了在大学期间要每天记录,自我监督,就这样,这事也干了两年 ...

  5. 8086汇编学习小记-王爽汇编语言实验12

    8086汇编学习小记-王爽汇编语言实验12 0号中断处理程序,开始安装在0000:0200处的程序最后用死循环导致显示不出'divided error',改成直接退出就正常显示了.注意修改ss,sp之 ...

  6. 多项式快速插值学习小记

    今天终于抽空把这个综(du)合(liu)知识点学了,心力交瘁-- 多项式快速插值 给出 nnn 个点 (xi,yi)(x_i,y_i)(xi​,yi​) ,要求一个次数为 n−1n-1n−1 的多项式 ...

  7. 多项式的ln、exp、快速幂和开根学习小记

    不妨又学习了一下多项式的求ln.exp.快速幂和开根操作. 这些操作比之前的求逆更上了一层台阶,应用同样很广. 多项式求逆等知识在我的博客里有讲:多项式的求逆.取模和多点求值学习小记 多项式ln 给出 ...

  8. 积性函数与Dirichlet卷积 学习小记

    前言 首先感谢 XHM 大佬的悉心指导,我懂得了不少~. 链一下他关于这方面的见解.博客--XHM 的Dirichlet卷积 学习小记 一些定义 回归正题,这次我学习了一下狄利克雷卷积方面的知识. 先 ...

  9. lstm keras 权重 理解_Keras 作者:TF 2.0+Keras 深度学习研究你需要了解的 12 件事...

    [新智元导读]Keras 作者 François Chollet 今天发表了一系列推文,如果你使用 TensorFlow 2.0 + Keras 做深度学习研究,这里有你需要知道的一切. Tensor ...

  10. Unity API常用方法和类学习笔记2

    Unity API常用方法和类学习笔记2 ------Mathf & Input & Vector & Random 类Mathf 一.静态变量 print(Mathf.Deg ...

最新文章

  1. PHP的CI框架学习
  2. Sub-process /usr/bin/dpkg returned an error code (1) 如何解决
  3. 项目中AppDelegate详解
  4. Pytorch的网络结构可视化:Netron与TensorBoardX
  5. boost::mp11::mp_split相关用法的测试程序
  6. 如何查看linux系统的体系结构
  7. [转]Mogre 环境配置问题(Exception from HRESULT: 0x800736B1)
  8. 2005-5-29+ 认识httphandler
  9. 写博客的这几个月,获益良多
  10. Kafka ACL控制,用户权限能控制
  11. 大学本科 java教材,大学本科自学java之路——IO
  12. 操作对象_DOM进阶——HTML属性操作(对象属性)
  13. python数据类型可变和不可变_python可变数据类型vs不可变数据类型
  14. guid linux 识别的分区表_Linux开机流程详解:BIOSgt;MBRgt;GRUBgt;Kernel
  15. idea 新建ssm java ee_IntelliJ IDEA基于SpringBoot如何搭建SSM开发环境的步骤详解
  16. 企业应用网站性能优化实例分析
  17. 西门子/AB/ModbusTCP/FX3U 安卓手机app软件,二代Teslascada2电脑组态版本app Runtime
  18. lamp平台构建和phpMyAdmin工具
  19. AMD显卡更新UEFI GOP
  20. 大淘客cms php版本,大淘客cms频繁出现 500错误页面临时解决方法

热门文章

  1. 视频怎么加水印?这里有你想要的答案
  2. 菜鸟c语言app,菜鸟学C语言app下载-菜鸟学C语言下载 3.0.0 手机版 - 河东软件园
  3. 记一次新旧系统数据迁移
  4. win7安装OneNote
  5. 汽车CAN总线系统原理、设计与应用 第二章CAN总线的基本原理 ---- 个人自学笔记
  6. SQL2012数据库还原数据的时候提示: 还原数据库时失败解决方案
  7. 服务器 cpu型号怎么看,服务器cpu参数肿么看
  8. 对象关系Lookup与Master-Detail
  9. 文件一键上传、汉字转拼音、excel文件上传下载功能模块的实现
  10. CSDN博客成长记录