介绍
本篇文章参考:Espresso谷歌官方介绍
Espresso是一个非常强大的Android UI测试框架,使用Espresso可模拟用户操作、检测数据编写简洁、漂亮、可靠的Android UI测试。
配置
添加Espresso依赖项
打开应用的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!")))
版权归原作者 于瑞雪 所有, 如有侵权,请联系我们删除。