Android之UiAutomator测试框架源码分析(第二十一篇:BySelector相关功能介绍)

(注意:本文基于UI Automator测试框架版本为2.2.0)   

    BySelector对象持有用于查找控件所需的属性条件,往往我们称BySelector对象为选择器对象,就是因为使用BySelector可以查找到页面中的控件!

    按照属性与控件的相关性进行一个简单分类

1、直接属性

直接属性包括控件的点击状态、控件的id、控件的文本信息等,这些属性是与控件绑定在一起的属性

2、间接属性

间接属性包括控件属于哪个package、属于哪个class产生的对象、控件位于整个View树的相对位置信息

    BySelector提供的相关方法(功能)用于存储(持有)控件的直接属性以及控件的间接属性到BySelector对象中。使用UiDevice对象或UiObject2对象的findObject()系列方法进行查找控件时,即可以使用BySelector对象持有的所有属性(条件)与页面中View树中的控件自身属性进行对比,如果在View树中找到匹配的控件,即会返回一个UiObject2对象。这篇文章我们不仅学习BySelector对象持有哪些属性条件、还会学习BySelector对象的API!

 

官方介绍

    BySelector用于在插装测试(Instrumentation Test)运行期间匹配UI元素(控件)的一个条件,使用UiDevice#findObject (BySelector)方法需要使用BySelector对象!

    个人补充:UiObject2#findObject(BySelector)方法也可以使用BySelector对象

    个人补充:目前我们已经知道UI Automator测试框架中,共计两处方法会使用BySelector对象,一个是UiDevice的findObject(BySelector)方法,另一个是UiObject2的findObject(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对象作为条件(称为子选择器)

 

BySelector方法介绍

1、为字段赋值的方法

截取了一部分方法,这些API都为BySelector对象持有的实例变量进行赋值的……

2、统统返回BySelector对象

统统返回的BySelector对象,方便继续使用链式调用

 

无法正常使用的构造方法

1、两个构造方法都是包访问级别,你无法直接通过正常方式new一个BySelector对象

2、官方推荐使用By类的静态工厂方法创建BySelector对象

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值