使用espresso验证弹出菜单中的项目

时间:2016-01-26 11:48:09

标签: android android-espresso

我有一个弹出菜单。 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"。

enter image description here

2 个答案:

答案 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());