1

我刚开始使用 Robotium 并尝试了第一个非常简单的测试,但是遇到了一些我无法解释/对我来说似乎不合逻辑的问题。

我有一个带有 ActivityGroup 的 TabHost,并且在 tabhost 内容部分中显示的每个活动上都有一个切换按钮。当我按下切换按钮时,选项卡内容区域变为另一个活动(mTabHost.setCurrentTab(Intent intent);)。每个活动都有这样一个切换按钮,总是带有标签“切换”。当我单击秒活动上的切换按钮时,它将切换回第一个(全部在选项卡内容区域内)。

|-----------------|
| TabHost |       | 
|-----------------| 
|                 | 
| Toggle-Button   | 
|                 | 
| (ActivityGroup: | 
| Activities      | 
| change in here) |
|                 | 
|-----------------|

现在,手动这一切都可以正常工作,但机器人测试却不行。当我尝试单击第二个活动上的切换按钮时,我收到一条错误消息“junit.framework.AssertionFailedError:无法单击视图!”

这是我的测试 - 非常简单和小:

    solo.sleep(5000);
    solo.waitForActivity("StartTabsActivity", 10000);

    solo.clickOnButton("Toggle");
    // this will swap the activity inside the tabhost content section

    solo.sleep(5000);
    solo.waitForActivity("StatusListActivity", 5000);

    solo.assertCurrentActivity("Expected StatusList activity", "StatusListActivity");

    LogUtils.logD("robotium: button label: " + solo.getButton(1).getText()); 
    // ... outputs: robotium: button label: Toggle

    LogUtils.logD("robotium: button clickable: " + solo.getButton(1).isClickable()); 
    // ... outputs: robotium: button clickable: true

    solo.clickOnButton("Toggle");   
    // ... throws: junit.framework.AssertionFailedError: View can not be clicked!

我在这里不明白的是:我正在检查带有“切换”标签的按钮是否存在并且是可点击的,但是,我收到一条错误消息,提示“无法点击此视图。”。在相应的当前活动中只有一个“切换”按钮。

与这个问题相关,我还有另一个小问题:当我使用 TabHost + ActivityGroup 时,“solo.getCurrentActivity()”是否总是返回 ActivityGroup 的嵌入活动,而不是外部活动?独奏仍然可以访问外部活动的元素吗?不过,在我上面的例子中,切换按钮始终是内部/嵌入式活动的一部分——以防万一。

4

3 回答 3

2

刚收到robotium dev的回复,这个问题将在Robotium 1.8中修复。看这里

于 2010-10-12T10:14:43.443 回答
1

你可以使用这个:

solo.clickOnView(solo.getView("Toggle"))

或者:

solo.clickOnView(solo.getView(R.id.B))
于 2015-02-12T09:46:16.507 回答
0

相反,您可以选择 Android 提供的 JUnit Automation 本身。您可以轻松发送 KeyEvents 以选择菜单选项并完成任务。

您需要做的就是在选择菜单选项的测试代码中创建一个 JUnit 测试用例方法。请遵循以下方法:-

  • 在测试方法中启动Activity
  • 将 keyevent 菜单点击发送到活动。当显示菜单选项时,发送向上、向下、向左和向右键事件以将焦点放在选项上并发送键事件 DPAD CENTER。

希望这能很好地解决您的问题。但在此之前,您必须了解一点 Android sdk 中可用的 JUnit 和测试框架。

于 2011-01-31T11:46:37.937 回答