之前的文章中,我们介绍了Android自动化测试的一些背景,以及 Espresso 的基本应用。除了之前介绍过的 Espresso 的相关用法, Espresso 还提供了一些其他的用法,可以让我们在不同场景下灵活使用。这篇文章我们依然关注于 Espresso 提供的功能。
有些时候,一个布局中可能包含很多重复的控件。这些控件可能拥有相同的 ID 以及相同的 text ,不容易通过简单的匹配规则进行匹配。很典型的一个例子是 ListView ,比方在我们的通讯录列表中每一项都有一个打电话的按钮,这些按钮有同样的 ID ,并且显示同样的文字,这样一来我们很难通过 onView() 进行匹配。
除了通过上一篇文章AdapterView的测试介绍的 onData() 方法以外, Espresso 还提供了一个 hasSibling() 方法,用来通过目标控件的 Sibling 进行匹配。
官网 提供了这么一个例子:我们有一个如下图所示的列表,
这个列表的每一项都有一个显示 “7” 的 TextView ,这些 TextView 的 text 属性是相同的,但是在 View 层级中,每一个 TextView 左边都对应有一个彼此不同的 TextView 。比方说我们要找的第一个 “7” 左边显示了 “item: 0” ,此时可以通过如下的代码匹配目标控件:
onView(allOf(withText("7"), hasSibling(withText("item: 0")))) .perform(click()); 有时候我们需要对一个 View 中的某个子控件进行操作(比如点击一个 ListView 条目中的某个指定 Button ),这时我们可以通过 onChildView() 方法指定相应的子控件。
我们来看如下一个例子。
在这个列表中,对于每个列表项,左边显示了一个字符串,右边显示了该字符串的长度。我们现在想要点击 “item: 50” 这一行右边的 TextView 。我们已经通过 onData() 匹配出了该行 View :
onData(withItemContent("item: 60")) 其中 withItemContent() 提供了一个自定义 Matcher 。关于自定义 Matcher 的介绍可以参考之前的AdapterView的测试中的相关介绍。
此时,我们可以再通过 onChildView() 方法找到相应的子控件:
onData(withItemContent("item: 60")) .onChildView(withId(R.id.item_size)) .perform(click()); Espresso 还支持对 WebView 的测试,如果需要对 Web 进行测试,需要在 buid.gradle 中添加如下依赖:
androidTestCompile 'com.android.support.test.espresso:espresso-web:2.2.1' 请注意,目前 Espresso-Web 只支持 Espresso 2.2+ 以及 testing support library 0.3+ 版本。
Espresso-Web 对 Web 的测试思路与对原生APP的测试思路大体相同,也是首先匹配出我们需要的目标元素,然后执行一系列操作,再通过 Assertions 进行结果的检查。因此在这里简单说明一下 Espresso-Web 提供的一系列方法,大家可以自行查看官方文档或者源码了解细节。
withElement(ElementReference) 方法提供了寻找目标元素的功能,实例代码如下:
onWebView().withElement(findElement(Locator.ID, "teacher")) perform(Atom) 方法会对目标元素进行一系列操作:
onWebView().withElement(findElement(Locator.ID, "teacher")) .perform(webClick()); check(WebAssertion) 方法会对目标元素进行检查:
onWebView() .withElement(findElement(Locator.ID, "teacher")) .withContextualElement(findElement(Locator.ID, "person_name")) .check(webMatches(getText(), containsString("Socrates"))); 本篇文章作为之前文章对 Espresso 介绍的补充,比较简单,总体上也是根据官方提供的文档选取了我认为比较好玩的几个小话题,除了这些以外官方文档中还提供了其他一些细节的说明,在此附上 Espresso 官方文档的地址,大家可以自行查阅:
Espresso官方文档
到此为止,我们的系列文章已经完成了对 Espresso 的介绍。实际上大家看完官方文档之后,也会发现其实内容很少,基本上也就是我介绍过的这些东西,具体怎么使用还是需要结合我们的实际业务场景灵活进行选择。
接下来的文章中,我们会相继介绍 Android 自动化测试的一些其他相关工具和话题。