2013-03-14 127 views
3

我想创建一个测试方法,使用Robotium来检查Android应用程序是否点击按钮后完成(代码中有用户点击它时调用finish())。如何在Robotium中检查应用程序是否已完成?

public void test_onclickExit_finish() { 
    String buttonText = resources.getString(R.string.exit); 
    Button exitButton = solo.getButton(buttonText, true); 
    solo.clickOnView(exitButton); 
    // check here that the app has finished 
    // wait for the activity to finish? 
    assertTrue(solo.getCurrentActivity() == null); 
} 

但是这个测试失败了。我不知道如何指示测试等待活动结束。另外我不确定是否使用getCurrentActivity()是检查应用程序是否完成的好方法。

如何检查应用程序/活动是否已完成?

谢谢。

+0

你是什么意思完成?!没有活动在运行?没有服务运行?没有进程运行?通常,退出按钮不是Android中的事情,您为什么要退出某些内容?如果需要的话,只要将它关闭,OS就会关闭它,并且假设您在重新打开时已经正确编程并保存了状态,它将会弹开。 – 2013-03-15 09:09:24

回答

2

应用程序和工具在同一个进程中运行,如果你完成你的应用程序,你不能在仪器上做更多的事情。它失败了,因为仪表也被杀死了,你试图做更多的事情。没有办法检查你想用robotium做什么。

4

如果它是你的主要活动中使用这样的:

assertTrue(solo.getCurrentActivity().isFinishing()); 
+0

1.断言主要是在开发和维护过程中使用的,所以这个检查可能会被编译出来用于生产代码,并且没有效果,2.这个检查不足以等待活动完成或检查它是否已经存在完成 – Mobiletainment 2013-11-04 15:00:21

+0

我不明白那个评论。 assertTrue在测试代码中,不是吗? – koljaTM 2014-01-21 07:49:09

+0

是的assertTrue在测试代码 – Drakkin 2014-09-12 08:06:57

3

这个问题是旧的,但也许我的解决方案可以帮助别人。

我找到了一种方法来等待/检测使用Robotium时活动是否完成。

  • 创造条件,以检测活动时根画面从窗口分离:(我用在我的例子一个辅助方法)

    public static Condition activityWillClose(final Activity activity) { 
    
        return new Condition() { 
         boolean _detached = false; 
    
         { // constructor 
          View rootView = activity.getWindow().getDecorView().findViewById(android.R.id.content); 
          rootView.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() { 
           @Override 
           public void onViewAttachedToWindow(View view) { 
           } 
    
           @Override 
           public void onViewDetachedFromWindow(View view) { 
            _detached = true; 
           } 
          }); 
         } 
    
         @Override 
         public boolean isSatisfied() { 
          return _detached; 
         } 
        }; 
    } 
    
  • 等待在您的测试条件:

    solo.clickOnView(solo.getView(R.id.exitButton)); 
    
    Assert.assertTrue("should finish activity", 
         solo.waitForCondition(activityWillClose(solo.getCurrentActivity()), 2000) 
    ); 
    
相关问题