Pregunta

Estoy escribiendo una prueba de UI con Google Espresso para Android y estoy atascado en cómo afirmar un texto de texto, que el contenido se carga de forma asíncrona de un servicio web.Mi código actual es:

public class MyTest extends BaseTestCase<MyActivity>{
    public void setUp() throws Exception {
        // (1) Tell the activity to load 'element-to-be-loaded' from webservice
        this.setActivityIntent(new Intent(Intent.ACTION_VIEW, Uri.parse("data://data/element-to-be-loaded")));
        getActivity();

        super.setUp();
    }

    public void testClickOnReviews(){
        // (2) Check the element is loaded and its name is displayed
        Espresso
            .onView(ViewMatchers.withId(R.id.element_name))
            .check(ViewAssertions.matches(ViewMatchers.withText("My Name")));

        // (3) Click on the details box
        Espresso
            .onView(ViewMatchers.withId(R.id.details_box))
            .check(ViewAssertions.matches(ViewMatchers.isDisplayed()))
            .perform(ViewActions.click());

        // (4) Wait for the details screen to open
        Espresso
            .onView(ViewMatchers.withId(R.id.review_box));

        // Go back to element screen
        Espresso.pressBack();
    }
}

en (1), le informe a mi actividad para cargar un elemento del servicio web.En (2), estoy esperando la vista afirmando su contenido.Esta es la parte que falla la prueba, porque se ejecuta antes de que el servicio web responda a la aplicación.

¿Cómo puedo decirle a Espresso que espere que aparezcan una pieza de datos en particular en la pantalla?¿O debería pensar de manera diferente a escribir dicha prueba?

¿Fue útil?

Solución

Puede manejar este caso registrando un IdlingReSource para su servicio web con Espresso.Eche un vistazo a este escrito: https://developer.android.com / Formación / Pruebas / Espresso / iDling-Resource.HTML

más probable, querrá usar contingingidlingresource (que utiliza un contador simple para rastrear cuando algo está inactivo).Esta prueba de muestra demuestra cómo se puede hacer esto.

Otros consejos

Si no está molestado con el uso de Uiautomator con el espresso, podría hacer algo como esto en su paso 4.

UiObject object = mDevice.findObject(new UiSelector().resourceId(packageName + ":id/" + "review_box"));
object.waitForExists(5000);

HTTPS: // Desarrollador.android.com/reference/android/support/test/uiautomator/uiobject.html#waitforexists(long)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top