【问题标题】:Android Espresso not waiting for UI to finishAndroid Espresso 不等待 UI 完成
【发布时间】:2016-08-16 20:19:11
【问题描述】:

我有一个测试需要打开一个 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 测试?

【问题讨论】:

    标签: android android-testing android-espresso


    【解决方案1】:

    如果您还没有找到解决方案,这里提供的解决方案可能会对您有所帮助。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多