Espresso – verificar qué actividad se abre con la intención de pulsar el botón?

¿Es posible rastrear qué Actividad se abre después de pulsar un determinado botón?
Tengo una prueba en la que, cuando se hace clic en un botón , se envía una solicitud al servidor . Hasta que se envía la solicitud, se abre una Actividad . Para verificar la ejecución exitosa de la prueba, necesito comprobar cuál es la Actividad abierta.

Ejemplo de mi prueba:

Compruebe qué intención se abre en Espresso —

private void startTest() { recreateAuthData(InstrumentationRegistry.getTargetContext(), "d78269d9-9e00-4b8d-9242-815204b0a2f6", "3f32da21-914d-4adc-b6a1-891b842a2972"); InstrumentationRegistry.getTargetContext().getSharedPreferences(ActivitySplashScreen.class.getSimpleName(), Context.MODE_PRIVATE).edit().putInt(ActivitySplashScreen.PROPERTY_APP_VERSION, ActivitySplashScreen.getAppVersion(InstrumentationRegistry.getTargetContext())).commit(); InstrumentationRegistry.getTargetContext().getSharedPreferences(ActivitySplashScreen.class.getSimpleName(), Context.MODE_PRIVATE).edit().putString(ActivitySplashScreen.PROPERTY_REG_ID, "testKey").commit(); mActivityRule.launchActivity(setIntent()); // inputPinCode("2794"); } @Test public void testIdent() { startTest(); onView(withText("ПРО")).perform(click()); putDelay(500); onView(withId(R.id.get_pro)).perform(click()); onView(withText("Авторизация по паспортным данным")).perform(click()); putDelay(500); closeSoftKeyboard(); onView(withId(R.id.btn_goto_passport)).perform(click()); onView(withHint("Серия и номер паспорта")).perform(replaceText("9894657891")); onView(withHint("Дата выдачи паспорта")).perform(replaceText("17032014")); onView(withHint("Дата рождения")).perform(replaceText("31091994")); onView(withHint("СНИЛС")).perform(replaceText("54665285919")); putDelay(500); Log.d("TestWidget", hasComponent(hasShortClassName("ActivityMain")).toString()); onView(withId(R.id.btn_next)).perform(click()); // some code which check which activity is display now putDelay(500); } 

¿Es posible rastrear qué Actividad se abrió después de presionar el botón?

Compruebe la biblioteca espresso-intents :

Configuración

Agrega a tu app/build.gradle estas líneas:

 androidTestCompile 'com.android.support.test:runner:0.5' androidTestCompile 'com.android.support.test:rules:0.5' androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2' androidTestCompile 'com.android.support.test.espresso:espresso-intents:2.2.2' 

AVISO: espresso-intents no se ejecutarán sin libs espresso-core , runner o rules .

También puede ser necesario cambiar ActivityTestRule<> a IntentsTestRule como se describe aquí:

IntentsTestRule

Utilice IntentsTestRule en lugar de ActivityTestRule cuando se utilizan Espresso-Intents. IntentsTestRule facilita el uso de las API de Espresso-Intents en las pruebas de interfaz de usuario funcionales. Esta clase es una extensión de ActivityTestRule, que inicializa Espresso-Intents antes de cada prueba anotada con @Test y libera Espresso-Intents después de cada prueba. La actividad se terminará después de cada prueba y esta regla se puede utilizar de la misma manera que ActivityTestRule.

De: https://google.github.io/android-testing-support-library/docs/espresso/intents/

Ejemplo de código (haga clic en el botón para iniciar una nueva actividad)

Esta es una solución que utiliza espresso-intents de espresso-intents para problemas similares:

Un ejemplo de prueba con intento stubbing:

 @Test public void testActivityResultIsHandledProperly() { // Build a result to return when a particular activity is launched. Intent resultData = new Intent(); String phoneNumber = "123-345-6789"; resultData.putExtra("phone", phoneNumber); ActivityResult result = new ActivityResult(Activity.RESULT_OK, resultData); // Set up result stubbing when an intent sent to "contacts" is seen. intending(toPackage("com.android.contacts")).respondWith(result)); // User action that results in "contacts" activity being launched. // Launching activity expects phoneNumber to be returned and displays it on the screen. user.clickOnView(system.getView(R.id.pickButton)); // Assert that data we set up above is shown. assertTrue(user.waitForText(phoneNumber)); } 

De: https://developer.android.com/reference/android/support/test/espresso/intent/Intents.html

Recursos adicionales:

  • [Desarrolladores de Android] Espresso Intents Reference

  • [Github || Google Samples] Ejemplo básico para Espresso Intents

  • [Github] Android Espresso Intent Sample

  • Prueba de Android Intents utilizando Espresso

  • [Gist] Ejemplo de cómo usar espresso-intenciones en las pruebas de Android – código fuente para el enlace anterior

Para que coincida realmente con una actividad iniciada con intentos de espresso, debe comprobar el componente de la nueva intención:

  intended(hasComponent(NewActivity.class.getName())); 

Asegúrese de llamar Intents.init() en la configuración y Intents.release() en teardown para poder grabar intents con espresso.

Puede comprobar esto – Espresso Intents

Es una extensión de Espresso para validar intenciones.

  • Espresso startActivity que depende de Intent
  • ¿Por qué Espresso deja la aplicación una vez finalizada la prueba? Cómo detenerlo de hacer eso
  • Error de prueba Espresso: AppNotIdleException
  • Espresso Android que iguala las vistas de texto dentro del padre
  • problema con la importación de android.support.test. *
  • Mocking resultados de los servidores en Android (Wiremock, MockWebServer etc)
  • ¿Es posible inhabilitar tostadas o esperar hasta que el tostado desaparezca mientras se prueba
  • Cómo escribir prueba funcional automatizada con Facebook SDK en la aplicación de Android?
  • Android Espresso: ¿Cómo puedo probar un Fragmento específico al seguir una actividad a varios fragmentos de arquitectura
  • Café exprés. Error al ejecutar 'datos del adaptador de carga'
  • ¿Cómo desplazarse por la pantalla en la prueba de espresso android? Necesito validar el texto presente en la pantalla
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.