Uiautomator 2.0之BySelector类学习小记
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类学习小记相关推荐
- java基础小记_[Java教程]Java基础学习小记
[Java教程]Java基础学习小记 0 2016-10-07 18:00:07 题外话:总结了多年的学习心得,不得不说,睡眠是一个学习者的必需品!所谓"早起毁一天"不是没有道理哪 ...
- 【Kotlin】学习小记-基础篇
Kotlin学习小记-基础篇 Kotlin的介绍 入门基础篇 属性声明 关于val和final的小Tips 参数 1.可变参数 2.命名参数 函数返回值 1.默认返回Unit值 2.返回Nothing ...
- LINUX下USB1.1设备学习小记(2)_协…
LINUX下USB1.1设备学习小记(2)_协议 (2009-03-27 14:40) 分类: 文章转载 USB协议: 先看USB接口 可以看出,在USB使用了4根线,分别为电源线,地线,信号线和差分 ...
- (2013.01.18-2013.07.15)179天的学习小记
(2013.01.18-2013.07.15)179天的学习小记 好久没有做个小小结咯,我的第一天学习小记是从2011.07.04开始,那时说好了在大学期间要每天记录,自我监督,就这样,这事也干了两年 ...
- 8086汇编学习小记-王爽汇编语言实验12
8086汇编学习小记-王爽汇编语言实验12 0号中断处理程序,开始安装在0000:0200处的程序最后用死循环导致显示不出'divided error',改成直接退出就正常显示了.注意修改ss,sp之 ...
- 多项式快速插值学习小记
今天终于抽空把这个综(du)合(liu)知识点学了,心力交瘁-- 多项式快速插值 给出 nnn 个点 (xi,yi)(x_i,y_i)(xi,yi) ,要求一个次数为 n−1n-1n−1 的多项式 ...
- 多项式的ln、exp、快速幂和开根学习小记
不妨又学习了一下多项式的求ln.exp.快速幂和开根操作. 这些操作比之前的求逆更上了一层台阶,应用同样很广. 多项式求逆等知识在我的博客里有讲:多项式的求逆.取模和多点求值学习小记 多项式ln 给出 ...
- 积性函数与Dirichlet卷积 学习小记
前言 首先感谢 XHM 大佬的悉心指导,我懂得了不少~. 链一下他关于这方面的见解.博客--XHM 的Dirichlet卷积 学习小记 一些定义 回归正题,这次我学习了一下狄利克雷卷积方面的知识. 先 ...
- lstm keras 权重 理解_Keras 作者:TF 2.0+Keras 深度学习研究你需要了解的 12 件事...
[新智元导读]Keras 作者 François Chollet 今天发表了一系列推文,如果你使用 TensorFlow 2.0 + Keras 做深度学习研究,这里有你需要知道的一切. Tensor ...
- Unity API常用方法和类学习笔记2
Unity API常用方法和类学习笔记2 ------Mathf & Input & Vector & Random 类Mathf 一.静态变量 print(Mathf.Deg ...
最新文章
- PHP的CI框架学习
- Sub-process /usr/bin/dpkg returned an error code (1) 如何解决
- 项目中AppDelegate详解
- Pytorch的网络结构可视化:Netron与TensorBoardX
- boost::mp11::mp_split相关用法的测试程序
- 如何查看linux系统的体系结构
- [转]Mogre 环境配置问题(Exception from HRESULT: 0x800736B1)
- 2005-5-29+ 认识httphandler
- 写博客的这几个月,获益良多
- Kafka ACL控制,用户权限能控制
- 大学本科 java教材,大学本科自学java之路——IO
- 操作对象_DOM进阶——HTML属性操作(对象属性)
- python数据类型可变和不可变_python可变数据类型vs不可变数据类型
- guid linux 识别的分区表_Linux开机流程详解:BIOSgt;MBRgt;GRUBgt;Kernel
- idea 新建ssm java ee_IntelliJ IDEA基于SpringBoot如何搭建SSM开发环境的步骤详解
- 企业应用网站性能优化实例分析
- 西门子/AB/ModbusTCP/FX3U 安卓手机app软件,二代Teslascada2电脑组态版本app Runtime
- lamp平台构建和phpMyAdmin工具
- AMD显卡更新UEFI GOP
- 大淘客cms php版本,大淘客cms频繁出现 500错误页面临时解决方法