赞
踩
本篇文章参考:Espresso谷歌官方介绍
Espresso是一个非常强大的Android UI测试框架,使用Espresso可模拟用户操作、检测数据编写简洁、漂亮、可靠的Android UI测试。
打开应用的build.gradle文件,注意不是顶级的build.gradle文件,是app/build.grdle。在依赖项中添加以下代码:需均使用androidx.test
- androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
- androidTestImplementation 'androidx.test:runner:1.5.2'
- androidTestImplementation 'androidx.test:rules:1.5.0'
将下行代码添加到同一build.gradle文件的android.defaultConfig中
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
一般会在程序的项目的src/androidTest/java/com.example.package/中创建测试,示例如下:
- @RunWith(AndroidJUnit4.class)
- @LargeTest
- public class HelloEspressoTest {
- @Rule
- public ActivityScenarioRule<MainActivity> activityRule =
- new ActivityScenarioRule<>(MainActivity.class);
- @Test
- public void testTextMatch() {
- //Text为Hello的控件是否目前显示在界面上
- onView(withText("Hello")).check(matches(isDisplayed()));
- }
- }
Espresso API建议测试作者考虑用户在与应用互动时可能会执行的操作-找到界面元素并与之互动。同时,该框架会阻止直接访问应用的activity和视图,因为保留这些对象并在界面现成之外对其执行操作是导致测试不稳定的主要原因。因此,在Espresso API中看到getView()和getCurrentActivity()等方法,只需实现ViewAction和ViewAssertion就可以安全地对视图执行操作。
Espresso 的主要组件包括:
Espresso 用于与视图交互(通过 onView()
和 onData()
)的入口点。此外,还会公开不一定与任何视图相关联的 API,例如 pressBack()
。
ViewMatchers 实现 Matcher<? super View>
接口的对象的集合。可以将其中一个或多个对象传递给 onView()
方法,以在当前视图层次结构中找到某个视图。
ViewActions 可传递给 ViewInteraction.perform()
方法的 ViewAction
对象的集合,例如 click()
。
ViewAssertions 可传递给 ViewInteraction.check()
方法的 ViewAssertion
对象的集合。大多数情况下,可以使用匹配断言,该断言使用视图匹配器来断言当前所选视图的状态。
- // withId(R.id.my_view) is a ViewMatcher
- // click() is a ViewAction
- // matches(isDisplayed()) is a ViewAssertion
- onView(withId(R.id.my_view))
- .perform(click())
- .check(matches(isDisplayed()));
onView()
方法匹配当前视图层次结构中地一个(且只有一个)视图,一般需要视图具有唯一的R.id
,withId
匹配器会缩小视图搜索范围
- onView(withId(R.id.my_view));
- //如果多个视图之间共享R.id,使用该R.id会抛出AmbiguousViewMatcherException。
- //可以通过使用组合匹配器来缩小搜索范围
- onView(allof(withId(R.id.my_view), withText("Hello!")));
- //也可以如下所示
- onView(allof(withId(R.id.my_view), not(withText("Unwanted"))));
找到适合目标视图地匹配器后,可以使用perform
方法对该视图执行ViewAction
实例
- onView(...).perform(click());
- //通过一次perform调用来执行多项操作
- onView(...).perform(typeText("Hello"), click());
可以使用check()
方法将断言应用于当前选定的视图,最常用的断言是matches()
断言,它使用ViewMatcher
对象断言当前所选视图的状态。
注:不能将断言放在onView()
参数中,而应该在check
代码块中明确指定要检查的内容。
onView(...).check(matches(withText("Hello!")))
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。