使用Espresso(AmbiguousViewMatcherException)查找ViewPager中的视图

时间:2017-02-06 17:21:34

标签: android listview android-fragments android-viewpager android-espresso

我有一个ViewPager,一次只能在屏幕上显示一个片段。这个片段有一个recyclerView,它包含一个由一个图像和两个textView组成的列表项。我需要选择项目并根据显示的文本执行单击。

我的viewPage的标识为pager,recyclelerView为listview,我正在使用cardView小部件,该小部件的相对布局名为cardContainer,其中包含textView nickNname我感兴趣的是。

Espresso似乎只能识别pager,但它无法在视图层次结构中找到任何其他ID。如何在viewPager或片段中访问nickName或基本上任何其他视图?

我尝试了以下内容:

        ViewInteraction listviewInteraction = onView (allOf(withId(R.id.pager)));
    listviewInteraction.check(matches(hasDescendant(withId(R.id.listview))));

由于寻呼机没有任何孩子,我收到以下错误

    Expected: has descendant: with id: 2131689666
Got: "ViewPager{id=2131689659, res-name=pager, visibility=VISIBLE, width=1080, height=1533, has-focus=false, has-focusable=true, has-window-focus=true, is-clickable=false, is-enabled=true, is-focused=false, is-focusable=true, is-layout-requested=false, is-selected=false, root-is-layout-requested=false, has-input-connection=false, x=0.0, y=144.0, child-count=0}"

我还尝试了一些与发布here类似的方法,但Espresso无法找到listviewnickname

如何找到视图nickName

UPDATE:

我已经运行了一些测试,看起来当Espresso运行测试时,viewPager从不加载片段。我曾尝试使用Thread.sleep()等待一段时间,但没有运气。我看到listView只填充了一段时间,然后寻呼机变为空白,测试失败,因为它找不到任何其他视图。有什么可能导致这个的想法吗?

更新2:

寻呼机正常加载,但由于AmbiguousViewMatcherException,Espresso无法识别listview或cardContainer,只能识别寻呼机。 viewPager中有四个片段,但屏幕上只显示一个片段。我的代码如下:

ViewInteraction listviewInteraction = onView (allOf(withId(R.id.pager)));
    listviewInteraction.check(matches(isDisplayed()));
    onView(allOf(withId(R.id.listview), isDisplayed())).check(matches(isDisplayed()));

视图层次结构中有两个匹配项。如果我不在viewMatcher中使用isDisplayed()方法,那么我会得到四个匹配的四个片段。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

即使它不可见,屏幕上显然还有一个列表视图。匹配器isDisplayed()还会考虑屏幕外的视图。使用isCompletelyDisplayed()修复了AmbiguousViewMatcherException