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()));
如果在 View
与 onView()
匹配后没有 check()
或 perform()
,测试将 不会 失败!所以如果你想检查 View
是否可见,那么你也必须 check(matches(isDisplayed()))
。
我们的应用程序中有一个查看寻呼机,当用户注销时,我们会显示相同的 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()));
如果在 View
与 onView()
匹配后没有 check()
或 perform()
,测试将 不会 失败!所以如果你想检查 View
是否可见,那么你也必须 check(matches(isDisplayed()))
。