Android之UI Automator框架源码分析(第X篇:BySelector相关功能介绍)
(注意:本文基于UI Automator测试框架版本为2.2.0)
BySelector对象表示定位控件所需要的条件,按照与控件的相关性先进行一个简单分类
1、直接属性
直接属性包括与控件的点击状态、控件的id、控件的文本信息等,这些与控件绑定在一起的属性
2、间接属性
间接属性包括控件属于哪个package、属于哪个class产生的对象、控件处于整个View树的相对位置信息
BySelector提供的相关方法(功能)就是用于存储直接属性、间接属性到BySelector对象中。使用UiDevice对象或UiObject2对象每次进行查找控件的时,使用BySelector对象持有的所有属性(条件)与控件自身的属性进行对比,如果在View树中找到对应的控件,即会返回一个UiObject2对象。这篇我们不仅学习BySelector对象持有哪些字段、还学习BySelector对象的API
官方介绍
BySelector用于在插装测试(Instrumentation Test)运行期间匹配UI元素(控件)的一个条件,使用UiDevice#findObject (BySelector)方法需要使用BySelector对象!
个人补充:UiObject2#findObject(BySelector)方法也可以使用BySelector对象
BySelector字段介绍
// Regex patterns for String criteria
Pattern mClazz;
Pattern mDesc;
Pattern mPkg;
Pattern mRes;
Pattern mText;
// Boolean criteria
Boolean mChecked;
Boolean mCheckable;
Boolean mClickable;
Boolean mEnabled;
Boolean mFocused;
Boolean mFocusable;
Boolean mLongClickable;
Boolean mScrollable;
Boolean mSelected;
// Depth restrictions
Integer mMinDepth;
Integer mMaxDepth;
// Child selectors 子选择器对象,用于匹配以当前控件为根节点的子元素吗?
// 比如我们需要定位一个ViewGroup,除了ViewGroup自身满足条件外,它含有子元素也需要满足条件
// 才能真正的匹配到一个元素
List<BySelector> mChildSelectors = new LinkedList<BySelector>();
官方注释写的特别清楚,BySelector对象持有的实例变量,共计4种分类
1、用于字符串匹配的正则表达式模式对象(Pattern)
Pattern mClazz;
Pattern mDesc;
Pattern mPkg;
Pattern mRes;
Pattern mText;
所有的字符串条件,BySelector对象持有的全部为Pattern对象
mClazz 表示匹配控件的类名,比如Button的类名是android.widget.Button
mDesc 表示匹配控件的contentDescription,contentDescription是专门为障碍人士准备的属性
mPk 表示匹配控件所在的包名,比如微信的包名是com.tencent.mm
mRes 表示匹配控件的id,比如某个控件的id是@id/btn_play(id全称:com.tencent.mm:id/btn_play)
mText 表示匹配控件显示的文本,比如某个控件显示的文本是“朋友圈”
2、控件状态,全部为boolean值
Boolean mChecked;
Boolean mCheckable;
Boolean mClickable;
Boolean mEnabled;
Boolean mFocused;
Boolean mFocusable;
Boolean mLongClickable;
Boolean mScrollable;
Boolean mSelected;
mChecked 表示控件是否处于check状态
mCheckable 表示控件是否为可check状态
mClickable 表示控件是否可以click状态
mEnabled 表示控件是否处于可交互状态
mFocused 表示控件是否处于焦点状态
mFocusable 表示控件能否处于焦点
mLongClickable 表示控件能否支持长按
mScrollable 表示控件能否滑动
mSelected 表示控件是否处于选中状态
3、深度限制
Integer mMinDepth;
Integer mMaxDepth;
mMinDepth 表示控件处于View树中的最小深度
mMaxDepth 表示控件处于View树中的最大深度
4、多个子选择器
List<BySelector> mChildSelectors = new LinkedList<BySelector>();
mChildSelectors 表示持有的多个子选择器对象,每一个仍是BySelector对象
BySelector方法介绍
1、为字段赋值的方法
截取了一部分方法,这些API都为BySelector对象持有的实例变量进行赋值的……
2、统统返回BySelector对象
为何使用链式调用,统统返回的BySelector对象
无法正常使用的构造方法
1、两个构造方法都是包访问级别,你无法直接通过正常方式new一个BySelector对象
2、官方推荐使用By类进行创建
本文地址:https://blog.csdn.net/cadi2011/article/details/107829486