Activity.findViewById() 在 Espresso 测试中返回 null

TBr*_*s42 5 android android-espresso

在 Espresso 测试中,我想获得我的参考,ViewPager以便我可以附加一个IdlingResource。但是findViewById返回null,即使我在ViewPager显示之前确认。

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

有任何想法吗?

tha*_*sma 4

您提供的信息不多。但让我们用我们现有的东西来工作吧。

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

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

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

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

为什么要添加IdlingResource一个ViewPager