我想验证片段中是否存在按钮。按钮的可见性和存在取决于使用Retrofit完成的网络呼叫/响应。
由于异步性质,我认为我应该选择 IdlingResource 。我的问题是,我真的不知道 isIdleNow()中真正响应的好方法。我应该尝试使用 findElementById(R ..)来持有元素,还是有其他典型的" Espresso方式"做这些等待断言?
编辑:
目前的解决方案是没有IdlingResource:
while (timeout-- > 0) {
try {
onView(withId(element)).check(matches(isDisplayed()));
} catch (AssertionError ae) {
MiscUtil.sleep(1000);
continue;
}
return true;
}
但我想这不符合Espresso基本原则。执行来自IdlingResource实现的check-matches调用由于某种原因挂起了所有线程。
答案 0 :(得分:2)
如果您正在使用Retrofit,我会假设您正在使用OKHttp,如果没有,那么答案将类似
(您只需为网络操作编写一个空闲资源。)
如果您使用OKHttp,这里有一个很好的开箱即用空闲资源: https://github.com/JakeWharton/okhttp-idling-resource
在你的测试设置中,只需注入你的okhttp客户端(如果你使用的是匕首),注册资源(不要忘记在拆除时取消注册)。
您的按钮可见性和显示将自动神奇地等待。
旁注: 在动画视图时要小心它们是仪器测试中最大的敌人,确保禁用动画(特别是如果你以自定义方式完成它们,你需要找到一种在测试运行期间禁用动画的方法)。