(注意:本文基于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!!