Android咖啡不等待UI完成

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; 
}