3

Avec Espresso j'essaie de tester l'envoi d'une activité à fond, avec le bouton d'accueil, puis l'obtenir dans l'avant-plan pour faire quelques vérifications:Comment retrouver l'accès à une activité après l'avoir envoyé à fond

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

J'ai dû utiliser intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); qui a été suggéré par une exception, mais à part cela, j'ai également testé, en le démarrant comme activité de lancement, ou en utilisant FLAG_ACTIVITY_REORDER_TO_FRONT, mais la vue n'est pas visible. Même si le test passe.

Répondre

1

S'il vous plaît considérer cette réponse comme il fonctionne à 100% quand vous voulez goBackgroundByClickingHomeThenGetBackToTheApp.

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

Avec le nouveau lanceur de test Android dans Placez cette réponse est plus précise. Merci. – joecks

7

Ok I figured it out. D'abord, il est nécessaire d'utiliser le contexte de l'activité fournie par getActivity, et je pouvais utiliser les intentions d'envoyer l'activité en arrière-plan et au premier plan, en utilisant la catégorie HOME et le 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 
} 
+0

Que faire si je veux faire la même chose avec HomeActivity? J'ai quelques tests qui doivent être testés pour l'activité à la maison. Fondamentalement, l'application doit aller à l'arrière-plan et revenir à l'avant-plan à nouveau pour reproduire le cas. Qu'est-ce que vous est-ce possible? – karate

+0

Ce concept fonctionne pour toutes les activités. Qu'entendez-vous par HomeActivity? – joecks

+0

Je veux dire l'activité du lanceur. J'ai atteint la solution en utilisant UiAutomator d'Espresso. – karate

1

Vous pouvez le faire en utilisant l'interface utilisateur Automator (vous pouvez utiliser à la fois espresso et UI Automator ensemble).

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

Ce backgrounded mon application et amené au premier plan

+0

Oui maintenant vous pouvez le faire, s'il vous plaît considérer la réponse ci-dessus comme héritage. Ce serait bien si vous pouviez également mentionner la version de Testrunner android-support-test que vous utilisez. – joecks

+1

androidTestCompile ('com.android.support.test.uiautomator: uiautomator-V18: 2.1.1) et androidTestCompile (' com.android.support.test: coureur: 1.0.0) – rfodge

Questions connexes