在Espresso测试中等待依赖于网络呼叫的按钮

时间:2016-04-07 08:51:58

标签: android android-espresso ui-testing

我想验证片段中是否存在按钮。按钮的可见性和存在取决于使用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调用由于某种原因挂起了所有线程。

1 个答案:

答案 0 :(得分:2)

如果您正在使用Retrofit,我会假设您正在使用OKHttp,如果没有,那么答案将类似

(您只需为网络操作编写一个空闲资源。)

如果您使用OKHttp,这里有一个很好的开箱即用空闲资源: https://github.com/JakeWharton/okhttp-idling-resource

在你的测试设置中,只需注入你的okhttp客户端(如果你使用的是匕首),注册资源(不要忘记在拆除时取消注册)。

您的按钮可见性和显示将自动神奇地等待。

旁注: 在动画视图时要小心它们是仪器测试中最大的敌人,确保禁用动画(特别是如果你以自定义方式完成它们,你需要找到一种在测试运行期间禁用动画的方法)。