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

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

    By类是用于创建BySelector对象的快捷方式(节省代码),By类对外提供的每一个API,返回的都是BySelector对象,BySelector对象表示匹配控件时的条件。源码只抓树干与树枝,放下树叶,我对树叶也很感兴趣呀,我们先看看官方介绍!

 

官方介绍

    By是一个实用程序类,它允许在简洁的文件中创建BySelector,它的主要功能就是构造BySelector对象。提供静态工厂方法
使用了简短的语法。

uiDevice.findObject(By.text("foo"))

//等同于

uiDevice.findObject(new BySelector().text("foo"))

上面两行代码的效果一样,UiDevice的findObject(BySelector)方法需要传入一个BySelector对象,使用两种中的任意一个创建BySelector对象的方式即可。By类的每一个静态方法返回的都是BySelector对象,我们着手分析其中一个静态方法就可以,那就是By.text()方法,下面我们着手分析一下……

 

By类构造方法

    private By() { }

private修饰的构造方法,进一步说明By类无法通过正常方式创建对象,请使用By类提供的静态工厂方法!

 

By.text()方法分析

    public static BySelector text(Pattern regex) {
        return new BySelector().text(regex);
    }
    public static BySelector text(String text) {
        return new BySelector().text(text);
    }

    By类中一共有两个重载的text()方法,二者唯一的区别的就是接受不同类型的参数

第一个text()方法接受传入一个Pattern对象,后面的工作将使用正则表达式进行字符串匹配,Pattern对象是你传入的匹配规则。

第二个text()方法接受传入一个String对象,后面的工作为使用字符串相等性进行匹配

每个控件展示的文本信息,一般有两种,一种是静态的文本,另一种则是从服务端获取的动态文本,所以官方充分考虑了这些情况,不仅仅是普通字符串的相等性对比,还非常贴心的提供了正则表达式的匹配字符串方式,让我们随时hold住各种变态的文本信息!

 

最个性的静态方法copy()分析

    public static BySelector copy(BySelector original) {
        return new BySelector(original);
    }

这个静态方法可以根据传入的BySelector对象, clone出一个属性完全一样、全新的BySelector对象!这个功能很实用,我们有很多的控件他们都有相似性,比如他们可能会有一部分属性完全相同,此时我们可以把共同的属性封装为一个单独的BySelector对象作为基础BySelector对象,以后就可以再使用这个基础的BySelector对象,再去构造出更多拥有独特特征的BySelector对象,可以在基础的BySelector对象之上添加新的属性。

 

BySelector的一点提示

BySelector的实例方法返回的是BySelector对象本身,这意味着,它可以使用链式调用的方式,代码看起来非常简洁整齐

 

总结

By类就是为创建BySelector对象而生的,平时我们一定要使用By类创建BySelector对象即可,用最少的代码吹最牛的b!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值