我有一个弹出菜单。 Uix截图提供。现在,我想通过点击它们验证列表中的某些项目并验证发生了什么。
但无论我做什么,我似乎都无法在弹出菜单中选择项目。该菜单没有ID,我不认为可以设置菜单的ID。
我尝试过不同的事情:
onView(nthChildOf(anyOf(withId(android.R.id.title)), 1)).perform(click());
onView(withText("5 sekunder")).perform(click());
但没有任何作用。如何单击弹出菜单中的项目? Here您可以在弹出菜单的视图层次中找到UIX文件。
编辑:
要发生这种情况时更清楚一点,就是当您单击操作栏右下角的点以展开子菜单时。在我的情况下,子菜单总是由三个项目组成。我最接近解决方案的是:
onData(anything()).atPosition(2).perform(click());
但大部分时间它会打开第一个项目而不是第二个位置的项目,这会导致
No activities in stage RESUMED. Did you forget to launch the activity. (test.getActivity() or similar)?
可以找到日志here。在日志中,您可以看到它实际上点击了错误的项目,它点击了"点击了菜单:菜单1"。
答案 0 :(得分:9)
Espresso为该案例提供RootMatchers。它适用于我:
onView(withText("Text")).inRoot(isPopupWindow()).perform(click());
public static Matcher<Root> isPopupWindow() {
return isPlatformPopup();
}
isPlatformPopup()
是Espresso RootMatcher。
您可以在此处阅读更多内容https://google.github.io/android-testing-support-library/docs/espresso/advanced/#using-inroot-to-target-non-default-windows
或试试这个:
onView(withText("Text"))
.inRoot(withDecorView(not(is(getActivity().getWindow().getDecorView()))))
.perform(click());
答案 1 :(得分:0)
您可以尝试以下代码段吗?
openActionBarOverflowOrOptionsMenu(getInstrumentation().getTargetContext());
// Click the item.
onView(withText("Menu1"))
.perform(click());