当前位置: 移动技术网 > 移动技术>移动开发>Android > Android之UI Automator框架源码分析(第X篇:BySelector相关功能介绍)

Android之UI Automator框架源码分析(第X篇:BySelector相关功能介绍)

2020年09月01日  | 移动技术网移动技术  | 我要评论
BySelector对象负责持有用于定位View的属性信息,而它提供的相关方法(功能)基本上都是用于赋值这些属性信息的!我们这篇先学习BySelector对象持有的哪些字段、然后再去学习BySelector对象的方法!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

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网