【发布时间】: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