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
?
在 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
?