为什么我的机器人测试用例中没有条件工作?

时间:2014-02-20 21:07:23

标签: android robotium

我正在测试的应用程序在安装后第一次启动时显示一个信息屏幕,并带有“继续”按钮以关闭。我想编写将在第一次启动(即从APK运行为JUnit时)或后续启动(即直接JUnit)时运行的测试。我正在尝试使用我能想到的最简单的条件,例如......

if (solo.waitForText("Continue", 20000)) {
solo.clickOnButton("Continue");
}

下一步......

如果“继续”按钮在那里(来自APK测试运行),测试将通过但是当按钮不存在时失败(根据clickOnButton中的ADK)(直接JUnit运行)。我做错了什么?

14年2月21日

也许我应该重新开始。

我正在测试的应用程序在安装后第一次启动时显示一个信息屏幕,并带有“继续”按钮以关闭。此应用程序的后续启动中不会显示此屏幕。我想编写将在第一次启动(即从APK运行为JUnit时)或后续启动(即直接JUnit)时运行的测试。我通过使用Testdroid记录动作开始了这个测试,它打开了这样的测试:

    public void testRecorded() throws Exception {
    try {
        solo.waitForActivity("splash");
        solo.waitForActivity("Login");

        assertTrue(
            "Wait for text (id: com.<app identified>.R.id.continue_txt) failed.",
            solo.waitForTextById(
                    "com.<app identified>.R.id.continue_txt", 20000));
        solo.clickOnText((TextView) solo
            .findViewById("com.<app identified>.R.id.continue_txt"));

只要在运行测试之前重新安装应用程序(从APK运行),这很有效,但很明显,在后续启动时失败(以直接JUnit运行),因为屏幕永远不会显示。我试图用“if”条件括起waitForTextById和clickOnText语句,但它没有用,所以我试着简化为

if (solo.waitForText("Continue", 20000)) {
solo.clickOnButton("Continue");}

然后尝试

if (solo.searchText("Continue")) {
solo.clickOnButton("Continue");}

这些都没有奏效。根据Eclipse,当测试无法点击按钮时测试失败(因为按钮不在那里)。 我对Java的了解至多是最基本的。我在这里不理解什么?

2 个答案:

答案 0 :(得分:1)

试试这个:

if (solo.searchText("Continue")) {
solo.clickOnButton("Continue");
}

答案 1 :(得分:0)

我终于弄明白了问题所在。一旦我将整个assertTrue语句放在if条件而不仅仅是solo.waitForTextById中,它就开始按我的意愿工作了。这个问题是由于我对Java的经验有限。

感谢所有为您提供帮助的人。