【问题标题】:Robotium test fails with: junit.framework.AssertionFailedError: View can not be clicked!Robotium 测试失败:junit.framework.AssertionFailedError: View can not be clicked!
【发布时间】:2011-04-24 02:37:25
【问题描述】:

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

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

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

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

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

    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 的嵌入活动,而不是外部活动?独奏仍然可以访问外部活动的元素吗? 不过,在我上面的例子中,切换按钮始终是内部/嵌入式活动的一部分——以防万一。

【问题讨论】:

标签: android unit-testing testing robotium


【解决方案1】:

刚收到robotium dev的回复,这是一个将在Robotium 1.8中修复的问题。见Here

【讨论】:

    【解决方案2】:

    你可以用这个:

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

    或:

    solo.clickOnView(solo.getView(R.id.B))
    

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

      • 自 1.8 以来已经修复,robotium 现在是 2.1。我认为在 JUnit 中实现 Robotium 提供的东西会花费太多精力,我的意思是存在这样的测试框架是有原因的。无论如何,问题已经解决了一段时间。干杯。
      • 是的,你们是对的。几个月前我开始使用 Robotium,我真的很享受它提供的强大功能。 JUnit 中的等效工作将是巨大的..
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-18
      • 2019-02-07
      相关资源
      最近更新 更多