Android-Espresso:无法在 ViewPager 中获取元素

Android-Espresso: Can't get element in ViewPager

我们的应用程序中有一个查看寻呼机,当用户注销时,我们会显示相同的 UI。因此,由于 UI 对于视图寻呼机上的每个页面都是相同的,因此点击一个元素或检查它是否显示只会给我匹配多个错误。所以我的理论是因为查看寻呼机一次加载所有内容,这就是我收到此错误的原因。更改 contentDescriptor 不起作用,因为它在所有视图中都相同。

未登录时视图为按钮,登录后为网格视图。

所以我的问题是 - 如何找到按钮或我可能需要的任何元素?我无法更改应用代码。

使用 Espresso 2.2.2

是的,问题是 ViewPager 在当前可见的 View 的左右两侧至少创建了 View。 Espresso 在层次结构中的每个 View 上使用 onView 中的所有匹配器,无论它是否在屏幕上。

如果您要匹配的 Views 之一当前可见,则使用 isDisplayed 匹配当前在屏幕上的 View

// Matches a view that is on the screen AND has the id R.id.some_button
onView(allOf(isDisplayed(), withId(R.string.some_id))).check(matches(isDisplayed()));

如果在 ViewonView() 匹配后没有 check()perform(),测试将 不会 失败!所以如果你想检查 View 是否可见,那么你也必须 check(matches(isDisplayed()))