Как восстановить доступ к действию после отправки его в фоновый режим
С помощью 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);
, который был предложен исключением, но помимо этого я также протестировал, запустив его как активность запуска, или используя
FLAG_ACTIVITY_REORDER_TO_FRONT
, но вид не виден. Даже несмотря на то, что тест проходит.
3 ответа:
Пожалуйста, рассмотрите этот ответ, поскольку он работает на 100%, когда вы хотите goBackgroundByClickingHomeThenGetbacktotheapp.
UiDevice device = UiDevice.getInstance(getInstrumentation()); device.pressHome(); device.pressRecentApps(); device.findObject(new UiSelector().text(getTargetContext().getString(getTargetContext().getApplicationInfo().labelRes))) .click();
Хорошо, я понял это. Сначала необходимо использовать контекст действия, предоставляемый getActivity, а затем я мог бы использовать intents для отправки действия в фоновом режиме и на переднем плане, используя категорию HOME и ФЛАГ_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 }
Вы можете сделать это с помощью 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()
Это послужило фоном для моего приложения и вывело его на передний план