最近需要写一些 Android 的自动化测试用例. 就学习了一下 Espresso 框架的用法.
参考文章
环境配置
环境配置可以参考: Getting Started with Testing
其实只需要安装步骤建好文件夹, 然后在 gradle 文件中添加依赖即可.
这一步当中, 文档特地提到要先关闭动画, 不然可能会导致问题. 虽然不知道会导致什么问题, 但是血的教训告诉我文档让你做的一定要做. 打开开发者选项, 关闭以下三个选项:
- 窗口动画缩放(Window animation scale)
- 过渡动画缩放(Transition animation scale)
- 动画程序时长缩放(Animator duration scale)
Espresso 的核心类
如果去看一些 Espresso 的例子. 你会看到类似下面的代码:
onView(withId(R.id.test)).perform(click()).check(matchers(withText("xxx")))
如果使用过 Hamcrest 应该会感到很亲切.
代码大量使用 static import 来提高可读性. 如果去掉 static import 的部分, 就变成这样:
Espresso.onView(ViewMatchers.withId(R.id.test))
.perform(ViewActions.click())
.check(ViewAssertion.matches(ViewMatchers.withText("xxx")))
其实包含了 Espresso 中重要的四个类1:
- Espresso:
跟 View 交互的入口(onView 或者 onData). 其实 Espresso 并不一定需要跟一个 View 绑定, 比如 pressBack - ViewMachers
包含了很多实现 Matcher<? super View> 的对象. 通过 onView 和 ViewMathcers 可以在 View Hierarchy 中定位 View. - ViewActions
顾名思义, 就是一些可以对 view 做的动作, 比如click, typeText. 使用方式就是作为参数传递给ViewInteraction.preform()
- ViewAssertions
一系列ViewAssertion
的集合, 可以作用参数传递给ViewInteraction.check()
. 通常你需要使用 matches assertion. 通过 ViewMatcher 来判断 View 的状态.