1

之前的文章中,我们介绍了Android自动化测试的一些背景,以及Espresso的基本应用。除了之前介绍过的Espresso的相关用法,Espresso还提供了一些其他的用法,可以让我们在不同场景下灵活使用。这篇文章我们依然关注于Espresso提供的功能。

Sibling View

有些时候,一个布局中可能包含很多重复的控件。这些控件可能拥有相同的ID以及相同的text,不容易通过简单的匹配规则进行匹配。很典型的一个例子是ListView,比方在我们的通讯录列表中每一项都有一个打电话的按钮,这些按钮有同样的ID,并且显示同样的文字,这样一来我们很难通过onView()进行匹配。

除了通过上一篇文章AdapterView的测试介绍的onData()方法以外,Espresso还提供了一个hasSibling()方法,用来通过目标控件的Sibling进行匹配。

官网提供了这么一个例子:我们有一个如下图所示的列表,

clipboard.png

这个列表的每一项都有一个显示“7”TextView,这些TextViewtext属性是相同的,但是在View层级中,每一个TextView左边都对应有一个彼此不同的TextView。比方说我们要找的第一个“7”左边显示了“item: 0”,此时可以通过如下的代码匹配目标控件:

onView(allOf(withText("7"), hasSibling(withText("item: 0"))))
  .perform(click());

Child View

有时候我们需要对一个View中的某个子控件进行操作(比如点击一个ListView条目中的某个指定Button),这时我们可以通过onChildView()方法指定相应的子控件。

我们来看如下一个例子。

clipboard.png

在这个列表中,对于每个列表项,左边显示了一个字符串,右边显示了该字符串的长度。我们现在想要点击“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());

Web测试

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-WebWeb的测试思路与对原生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自动化测试的一些其他相关工具和话题。

附录

Android自动化测试-从入门到入门(1) Hello Testing!
Android自动化测试-从入门到入门(2) Testing APIs
Android自动化测试-从入门到入门(3) Espresso入门
Android自动化测试-从入门到入门(4) uiautomatorviewer
Android自动化测试-从入门到入门(5) AdapterView的测试
Android自动化测试-从入门到入门(6) 会玩的Espresso
Android自动化测试-从入门到入门(7) UI Automator


Anchorer
431 声望84 粉丝

Show what you're made of.