安卓 - Espresso - 长选项菜单 - 点击不可见的选项菜单项

3

如何使Espresso点击一个长选项菜单中尚未可见的(选项)菜单项?

打开选项菜单很容易:

openActionBarOverflowOrOptionsMenu( getInstrumentation().getTargetContext());

我尝试使用scrollTo,但它没有成功:

onView( withText("Option menu item text")).perform( scrollTo(), click());

onView( withText( R.id.optionMenuId)).perform( scrollTo(), click());

onView( withId( is( R.id.appOptionMenu))).perform( swipeDown()); // where SwipeDown is a simple utility method on GeneralSwipeAction.

onData( anything()).inAdapterView( withId(R.id.wpeOptionMenu)).atPosition( 12).perform(click()); // I guess because it is not an adapter

你有好的解决方案吗?

1个回答

8
ActionBar溢出菜单是一个包含ListView的弹出窗口PopUpWindowscrollTo()仅适用于ScrollView的后代,因此在这里不起作用。
由于您想要的视图位于AdapterView内部,因此您需要使用onData。
AdapterView中的数据对象属于MenuItem类型,您想要匹配菜单项的标题。像这样:
onData(allOf(instanceOf(MenuItem.class), withTitle(title))).perform(click());

static MenuItemTitleMatcher withTitle(String title) {
    return new MenuItemTitleMatcher(title);
}

class MenuItemTitleMatcher extends BaseMatcher<Object> {
    private final String title;
    public MenuItemTitleMatcher(String title) { this.title = title; }

    @Override public boolean matches(Object o) {
        if (o instanceof MenuItem) {
            return ((MenuItem) o).getTitle().equals(title);
        }
        return false;
    }
    @Override public void describeTo(Description description) { }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接