Skip to content

espressoTips

lopezpaUC edited this page Oct 4, 2023 · 13 revisions

Espresso

  • Hoja de referencia Espresso (Espresso Cheat Sheet)

  • En la versión actual de Espresso NO se puede desactivar programáticamente la wifi ni los datos

  • Comprobar si un intent se abre con la info adecuada

    intended(IntentMatchers.hasData(Uri.parse(uri)));

  • Abrir el menú de opciones

    openActionBarOverflowOrOptionsMenu(ApplicationProvider.getApplicationContext());

  • Acceder al elemento i-ésimo de un listView

    onData(anything()).inAdapterView(withId(R.id.listViewXX)).atPosition(i);

  • Acceder a un elemento gráfico dentro de un elemento de una listView

    elementoLista = onData(anything()).inAdapterView(withId(R.id.listViewXX)).atPosition(i); elementoLista.onChildView(withId(R.id.idElementoHijo));

  • Volver a la pantalla anterior

    Espresso.pressBack();

  • Seleccionar una opción de un spinner

onView(withId(R.id.spinner)).perform(click()); 
onData(allOf(is(instanceOf(String.class),is("opción"))).perform(click());

Si el spinner está dentro de un Dialog:

onView(withId(R.id.spinner)).perform(click());
onData(allOf(is(instanceOf(String.class),is("opción"))).inRoot(isPlatformPopup()).perform(click());
  • Activar permisos de la aplicación

    @Rule public GrantPermissionRule permissionRule = GrantPermissionRule.grant(android.Manifest.permission.ACCESS_FINE_LOCATION);

    Es necesario añadir la siguiente dependencia en el build.gradle:

    androidTestImplementation 'androidx.test:rules:1.2.0'

  • Desactivar acceso a internet

    InstrumentationRegistry.getInstrumentation().getUiAutomation().executeShellCommand("svc wifi disable"); InstrumentationRegistry.getInstrumentation().getUiAutomation().executeShellCommand("svc data disable");

    Para volver a activar internet:

    InstrumentationRegistry.getInstrumentation().getUiAutomation().executeShellCommand("svc wifi enable"); InstrumentationRegistry.getInstrumentation().getUiAutomation().executeShellCommand("svc data enable");

  • Para rotar la pantalla

    Añadir la dependencia a UIAutomator: androidTestImplementation 'androidx.test.uiautomator:uiautomator:2.2.0'

    Para rotar:

    UiDevice device = UiDevice.getInstance(getInstrumentation()); device.setOrientationLeft();

  • Comprobar que un Toast se ha mostrado correctamente

onView(withText("String del toast")).inRoot(RootMatchers.withDecorView(not(decorView))).check(matches(isDisplayed()));

Para obtener el objeto decorView, añadir lo siguiente al método @Before

activityRule.getScenario().onActivity(activity -> decorView = activity.getWindow().getDecorView());
  • Cerrar y volver a abrir la aplicación
pressBackUnconditionally();
activityRule.getScenario().close();
ActivityScenario.launch(MainView.class);

donde activityRule es el objeto de tipo ActivityScenarioRule creada al inicio del test.