资讯专栏INFORMATION COLUMN

Android自动化测试-从入门到入门(6)会玩的Espresso

Aklman / 536人阅读

摘要:附录自动化测试从入门到入门自动化测试从入门到入门自动化测试从入门到入门入门自动化测试从入门到入门自动化测试从入门到入门的测试自动化测试从入门到入门会玩的自动化测试从入门到入门

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

Sibling View

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

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

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

这个列表的每一项都有一个显示“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()方法指定相应的子控件。

我们来看如下一个例子。

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/65529.html

相关文章

  • Android动化测试-入门入门(4)uiautomatorviewer

    摘要:右下角部分显示当前选中控件的各个属性。然后,向这个中输入账号信息就完成了一个表单的输入。我们可以根据属性区域显示的来进行匹配账号小总结所提供的界面简单,使用方便,对于我们的自动化测试来说是一个很好的辅助工具。 我们用如下一行代码来回顾一下之前介绍过的内容: import static android.support.test.espresso.Espresso.onView; impo...

    winterdawn 评论0 收藏0
  • Android动化测试-入门入门(7)UI Automator

    摘要:检查操作的结果是否符合预期。大家在实际编写自动化测试脚本时可以灵活选用。 到目前为止,我们已经完成了对Espresso的介绍。从之前的文章我们可以看到,Espresso对Android APP的自动化测试提供了一系列非常强大的工具和方法。 现在试想这样一个场景:我们在APP中有一个更改头像的功能,此时我们需要调用系统相机进行拍照,然后再回到APP提交拍好的照片。在这种场景下,我们需要从...

    Dean 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<