如何在将活动发送到后台后重新获得活动的访问权限

时间:2014-04-25 12:33:52

标签: android testing android-espresso android-instrumentation

使用Espresso我尝试使用Home按钮测试将活动发送到后台,然后再次将其放到前台进行一些检查:

@EspressoTest
public void test() {
    onSomeView().check(matches(isDisplayed()));
    getInstrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_HOME);

    Context context = getInstrumentation().getTargetContext();
    Intent intent = new Intent(context, MainActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(intent);

    onSomeView().check(matches(isDisplayed()));
}

我必须使用异常建议的intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);,但除此之外我还测试过,将其作为Launcher Activity启动,或者使用 FLAG_ACTIVITY_REORDER_TO_FRONT,但视图不可见。即使测试通过了。

3 个答案:

答案 0 :(得分:7)

好的我明白了。首先,有必要使用getActivity提供的Activity Context,然后我可以使用intents在后台和前台发送活动,使用HOME类和FLAG_ACTIVITY_REORDER_TO_FRONT:

private void goHome(Activity activity) {
    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_MAIN);
    intent.addCategory(Intent.CATEGORY_HOME);
    activity.startActivity(intent);
}

private void bringToForeground(Activity activity) {
    Intent intent = new Intent(activity, MainActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
    activity.startActivity(intent);
}

@EspressoTest
public void test() {
    //do some ui stuff to ensure the activity is up and running
    goHome(getActivity());
    // eventually sleep, or implement an idling resource
    bringToForeground(getActivity());
    // do some ui tests
}

答案 1 :(得分:5)

  

请考虑此响应,因为它可以100%正常工作   goBackgroundByClickingHomeThenGetBackToTheApp。

UiDevice device = UiDevice.getInstance(getInstrumentation());
        device.pressHome();
        device.pressRecentApps();
        device.findObject(new UiSelector().text(getTargetContext().getString(getTargetContext().getApplicationInfo().labelRes)))
                .click();

答案 2 :(得分:1)

您可以使用UI Automator执行此操作(您可以同时使用espresso和UI Automator)。

sudo kill -9 `ps -ef|grep -i uiauto|awk '{print $2}'`

这使我的应用程序背景并将其带到前台