Android之UiAutomator测试框架源码分析(第二十篇:Searchable接口的简单介绍)

(注意:本文基于UI Automator版本为2.2.2)

前言

官方:Searchable接口表示提供搜索控件的能力(功能,谁实现,谁具备)

私人:实现Searchable接口的类所产生的对象表示具备搜索UI元素(控件)的能力

Searchable接口介绍

/** Searchable接口表示可以搜索匹配UI元素的对象*/
interface Searchable {
    /** 返回是否与给定的selector条件匹配 */
    public boolean hasObject(BySelector selector);

    /** 返回与selector条件匹配的第一个UiObject2对象 */
    public UiObject2 findObject(BySelector selector);

    /** 返回符合selector条件的所有UiObject2对象,由一个List对象持有 */
    public List<UiObject2> findObjects(BySelector selector);
}

Searchable接口定义在androidx.test.uiautomator包中,UiDevice、UiObject2均实现了该接口,说明UiDevice与UiObject2都具备查找控件的能力(功能)

Searchable接口的使用位置

    通过代码搜索,发现有7个位置显式的使用Searchable接口,让我一一道来:

1、SearchCondition类的定义中,继承抽象类Condition,此时会将其中的一个类型参数指定为Searchable

2、UiDevice实现Searchable接口,这个上面已经提到

3、UiObject2实现Searchable接口,这个上面也有提及

4、Until类中的静态工厂方法gone(),返回的匿名对象,会实现一个apply()方法,apply()方法只能传入一个Searchable类型的对象(看来实现Searchable接口的对象都可以传入)

5、Until类中的静态工厂方法hasObject(),创建的匿名内部类,实现的apply()方法使用Searchable

6、Until类中的静态工厂方法findObject(),同上,也是在一个applay方法中使用的Searchable

7、Until类中的静态工厂方法findObjects(),同上,也是在一个applay方法中使用的Searchable

通过上面的提示,不难看出Until的这4个静态工厂方法,最后都会使用一个传入的Searchable对象(具备查找控件能力的对象),而该Searchable对应的实际类型,一定是UiDevice或者UiObject2,因为在整个UI Automator测试框架的上下文中只有UiDevice与UiObject2实现了Searchable接口,另外我们也无法创建自定义的实现Searchable接口的类,因为Searchable接口已经被限制为default访问权限!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值