如何在单元测试中接受对话框?

时间:2011-04-22 18:54:19

标签: android testing

我有一个单元测试,可以打开自定义对话框并输入一些文本。这有效,但我无法接受对话框或取消确定按钮。请任何人都可以告诉我如何使用junit自动化对话接受。

    ActivityMonitor activityMonitor = instrumentation.addMonitor(
            EditItem.class.getName(), null, false);

    instrumentation.sendKeyDownUpSync(KeyEvent.KEYCODE_MENU);
    instrumentation.invokeContextMenuAction(gridList, R.id.add, 0);

    Activity activity = instrumentation.waitForMonitorWithTimeout(
            activityMonitor, 10);
    assertNotNull("Make sure the edit item activity was called", activity);
    assertEquals("Make sure the edit item activity was called",
            EditItem.class, activity.getClass());

    final TextView nameView = (TextView) activity.findViewById(R.id.name);

            // this opens the dialog
    TouchUtils.clickView(this, nameView);

            // this adds some text
    for (int i = 0; i < 3; i++)
    {
        instrumentation.sendKeyDownUpSync(KeyEvent.KEYCODE_X);
    }

            // here I would like to accept the ok button on the dialog

好吧,我似乎已经通过按键组合来解决这个问题

    instrumentation.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_DOWN);
    instrumentation.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);

问题是现在我无法判断对话框何时被解除并返回到父Activity以继续测试

            instrumentation.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);

现在也可以解决这个问题:

            instrumentation.waitForIdleSync();
    instrumentation.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);

看起来有点笨拙,这是你应该如何使用这些工具吗?

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。它看起来像是你必须创建一个自定义对话框。这将允许您使用findViewById()检索添加的按钮。这是我发现的一个链接,可能会让你走上正确的道路。

http://www.mkyong.com/android/android-custom-dialog-example/