安卓浓缩咖啡不等待UI完成



我有一个需要打开android.support.v7.preference的测试。列表首选项对话框,选择一个选项,打开导航抽屉并从抽屉中选择一个项目。

对话框定义如下:

<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测试?

如果你还没有找到一个解决方案,这里提供的一个可能会帮助你。

使用idlerresource等待视图变为可见

解决方案是实现IdlingResource,它将允许您提供一个回调,以便在一切都空闲时立即运行。

@Override
public final boolean isIdleNow() {
    mIdle = mIdle || mView.getVisibility() == mExpectedVisibility;
    if (mIdle) {
        if (mResourceCallback != null) {
            mResourceCallback.onTransitionToIdle();
        }
    }
    return mIdle;
}

相关内容

  • 没有找到相关文章

最新更新