以前的文章中,咱们介绍了Android自动化测试的一些背景,以及Espresso
的基本应用。除了以前介绍过的Espresso
的相关用法,Espresso
还提供了一些其余的用法,可让咱们在不一样场景下灵活使用。这篇文章咱们依然关注于Espresso
提供的功能。html
有些时候,一个布局中可能包含不少重复的控件。这些控件可能拥有相同的ID
以及相同的text
,不容易经过简单的匹配规则进行匹配。很典型的一个例子是ListView
,比方在咱们的通信录列表中每一项都有一个打电话的按钮,这些按钮有一样的ID
,而且显示一样的文字,这样一来咱们很难经过onView()
进行匹配。android
除了经过上一篇文章AdapterView的测试介绍的onData()
方法之外,Espresso
还提供了一个hasSibling()
方法,用来经过目标控件的Sibling
进行匹配。git
官网提供了这么一个例子:咱们有一个以下图所示的列表,github
这个列表的每一项都有一个显示“7”
的TextView
,这些TextView
的text
属性是相同的,可是在View
层级中,每个TextView
左边都对应有一个彼此不一样的TextView
。比方说咱们要找的第一个“7”
左边显示了“item: 0”
,此时能够经过以下的代码匹配目标控件:web
onView(allOf(withText("7"), hasSibling(withText("item: 0")))) .perform(click());
有时候咱们须要对一个View
中的某个子控件进行操做(好比点击一个ListView
条目中的某个指定Button
),这时咱们能够经过onChildView()
方法指定相应的子控件。segmentfault
咱们来看以下一个例子。工具
在这个列表中,对于每一个列表项,左边显示了一个字符串,右边显示了该字符串的长度。咱们如今想要点击“item: 50”
这一行右边的TextView
。咱们已经经过onData()
匹配出了该行View
:布局
onData(withItemContent("item: 60"))
其中withItemContent()
提供了一个自定义Matcher
。关于自定义Matcher
的介绍能够参考以前的AdapterView的测试中的相关介绍。测试
此时,咱们能够再经过onChildView()
方法找到相应的子控件:gradle
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
的介绍。实际上你们看完官方文档以后,也会发现其实内容不多,基本上也就是我介绍过的这些东西,具体怎么使用仍是须要结合咱们的实际业务场景灵活进行选择。
接下来的文章中,咱们会相继介绍Android
自动化测试的一些其余相关工具和话题。
Android自动化测试-从入门到入门(1) Hello Testing!
Android自动化测试-从入门到入门(2) Testing APIs
Android自动化测试-从入门到入门(3) Espresso入门
Android自动化测试-从入门到入门(4) uiautomatorviewer
Android自动化测试-从入门到入门(5) AdapterView的测试
Android自动化测试-从入门到入门(6) 会玩的Espresso
Android自动化测试-从入门到入门(7) UI Automator