3

我正在尝试使用 Robotium 创建一个测试方法,以检查 Android 应用程序在单击按钮后是否完成(在代码中,finish()当用户点击它时会调用它)。

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);
}

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

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

谢谢。

4

3 回答 3

5

如果这是您的主要活动,请使用:

assertTrue(solo.getCurrentActivity().isFinishing());
于 2013-11-04T14:26:18.527 回答
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)
    );
    
于 2014-09-25T03:22:54.953 回答
2

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

于 2013-03-14T19:22:11.803 回答