Android咖啡不等待UI完成
问题描述:
我有一个测试,需要打开一个android.support.v7.preference.ListPreference对话框,选择一个选项,打开NavDrawer并从抽屉中选择一个项目。Android咖啡不等待UI完成
对话的定义如下:
<android.support.v7.preference.ListPreference
android:defaultValue="@string/pref_default_VALUE"
android:entries="@array/pref_VALUE_entries"
android:entryValues="@array/pref_VALUE_values"
android:key="@string/pref_key_VALUE"
android:negativeButtonText="@null"
android:positiveButtonText="@null"
android:title="@string/pref_title_VALUE" />
咖啡打开这样的:
onView(withText(mActivityRule.getActivity().getResources().getString(R.string.pref_title_VALUE))
.perform(click());
这并打开ListPreference,但它不会阻止,并在测试下一行立即运行。
// click on setting
onView(withText(VALUE_IN_LIST_PREFERENCE))
.perform(click());
从那立即发生,该对话框并没有出现,withText(VALUE_IN_LIST_PREFERENCE)匹配什么。
如果我使用调试器,暂停上面的行,对话框会及时显示,代码将工作。
然后导航抽屉发生同样的问题。它的开业是这样的:
// open the nav drawer
onView(withId(R.id.drawer_layout))
.perform(DrawerActions.open());
和项目被点击:
// click on phase 1
onView(withId(R.id.nav_view))
.perform(NavigationViewActions.navigateTo(R.id.nav_ITEM));
如同ListPreferences,测试代码继续,而无需等待用户界面来完成,因此调用onView失败。
我试图把线程睡觉,这里https://stackoverflow.com/a/22563297/4950621
以下的答案在这两种情况下,但是对话并没有出现,直到线程完成睡觉,认为测试将立即运行。所以,这个问题只是延迟了,没有解决。
如何才能确保Espresso测试不会运行,直到必要的视图可见为止?
答
如果您还没有找到解决方案,这里提供的解决方案可能会帮助你。
Wait until view become visible with IdleResource
的解决方案是实现IdlingResource
,这将允许您提供一个回调来尽快一切确实成为怠速运转。
@Override
public final boolean isIdleNow() {
mIdle = mIdle || mView.getVisibility() == mExpectedVisibility;
if (mIdle) {
if (mResourceCallback != null) {
mResourceCallback.onTransitionToIdle();
}
}
return mIdle;
}