我有一个需要打开android.support.v7.preference.ListPreference对话框的测试,选择一个选项,打开NavDrawer并从抽屉中选择一个项目。
对话框的定义如下:
<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" />
Espresso打开它:
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一样,测试代码继续而不等待UI完成,因此对onView的调用失败。
我已尝试将线程置于睡眠状态并按照https://stackoverflow.com/a/22563297/4950621
中的答案进行操作然而,在这两种情况下,在线程完成休眠并且视图测试立即运行之前,对话框不会出现。所以,问题只是延迟,而不是解决。
如何在必要的视图可见之前确保不运行Espresso测试?
答案 0 :(得分:0)
如果您还没有找到解决方案,此处提供的解决方案可能会帮助您解决问题。
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;
}