6

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

@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);由异常建议的,但除此之外我还测试了,将其作为启动器活动启动,或使用 FLAG_ACTIVITY_REORDER_TO_FRONT,但视图不可见。即使测试通过了。

4

3 回答 3

9

请考虑此响应,因为当您想要 goBackgroundByClickingHomeThenGetBackToTheApp 时,它 100% 有效。

UiDevice device = UiDevice.getInstance(getInstrumentation());
        device.pressHome();
        device.pressRecentApps();
        device.findObject(new UiSelector().text(getTargetContext().getString(getTargetContext().getApplicationInfo().labelRes)))
                .click();
于 2018-02-15T15:54:06.340 回答
8

好的,我想通了。首先需要使用 getActivity 提供的 Activity Context,然后我可以使用意图在后台和前台发送活动,使用 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
}
于 2014-04-29T12:57:05.780 回答
3

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

val device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
device.pressHome()
device.pressRecentApps()
val selector = UiSelector()
val recentApp = device.findObject(selector.descriptionContains("App Description"))
recentApp.click()

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

于 2017-08-14T20:55:25.807 回答