1

在我的活动中,我有一个带有已注册 ContextMenu 的 GridView。现在我想测试这个 Activity,因此我performLongClick()在 GridView 的第一个孩子上说并且上下文菜单打开。现在我想按此菜单中的第一个条目,可以这样做吗?

public class TestClass extends extends ActivityInstrumentationTestCase2<MainActivity> {
    public void testMe() {
        final GridView gv = getActivity().findViewById(R.id.some_id);
        getActivity().runOnUiThread(new Runnable() {
            public void run() {
                gv.getChildAt(0).performLongClick();
            }
        });
        getInstrumenttation().waitForIdleSync();

        //Registered Context Menu opens

        //????some method to get contextMenu and press first item
        //getActivity().getContextMenu().performClick(0); <---
    }
}
4

1 回答 1

3

好的,我通过在我的 MainActivity 中覆盖“onCreateContextMenu(ContextMenu menu,View v,ContextMenuInfo info)”并将菜单设置为全局变量来解决我的问题。之后,我可以在我的测试类中检索 ContextMenu 并执行单击:

public void testDelete() {
    performLongClick(gv.getChildAt(1));

    final ContextMenu contextMenu = getActivity().getContextMenu();
    assertTrue(contextMenu != null);

    getActivity().runOnUiThread(new Runnable() {
        public void run() {
            contextMenu.performIdentifierAction(R.id.menuItemId, 0);
        }
    });
    getInstrumentation().waitForIdleSync();
}
于 2012-11-19T17:16:29.617 回答