Activity.findViewById() returns Espresso 测试中为空

Activity.findViewById() returns null in Espresso test

在 Espresso 测试中,我想获得对我的 ViewPager 的引用,以便我可以将 IdlingResource 附加到它。但是 findViewById returns null,即使我之前确认显示 ViewPager

// Passes
onView(withId(R.id.viewPager)).check(matches(isDisplayed()));
Activity activity = activityTestRule.getActivity();
assertNotNull(activity);
// Fails
assertNotNull(activity.findViewById(R.id.viewPager));

有什么想法吗?

你提供的信息不多。但是让我们利用我们现有的东西吧。

我假设 Activity 已成功启动并且 DialogFragment(包含 ViewPager)也显示:

您发布的代码的第一行 onView(withId(R.id.viewPager)).check(matches(isDisplayed())); 确实通过了,因为 Espresso 会搜索已添加到当前 window 的所有视图。该对话框位于 window 的布局层次结构中。

但是 assertNotNull(activity.findViewById(R.id.viewPager)); 确实失败了,因为 ViewPager 不在 Activity 的内容视图中,而是在 FragmentDialog 中。

您可以在 Hierarchy Viewer 的帮助下验证视图层次结构。比较有和没有对话框的层次结构。

为什么要在 ViewPager 中添加一个 IdlingResource