Pergunta

Eu estou escrevendo um teste de INTERFACE do usuário com o Google Expresso para Android e eu estou preso sobre como declarar um TextView texto, cujo conteúdo é de forma assíncrona carregado a partir de um serviço web.Meu código é:

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

Em (1), informar minha atividade de carga de um elemento a partir do webservice.Em (2), eu estou esperando a opinião de afirmar o seu conteúdo.Esta é a parte que o teste falhar, porque é executado antes de o webservice respostas o aplicativo.

Como eu posso dizer de café Expresso para esperar por uma determinada peça de dados que aparecem no ecrã?Ou devo pensar em uma maneira diferente de escrever esse teste?

Foi útil?

Solução

Você pode lidar com esse caso, registando um IdlingResource para o serviço da web com café Expresso.Dê uma olhada no que este write-up: https://developer.android.com/training/testing/espresso/idling-resource.html

Provavelmente, você vai querer usar CountingIdlingResource (que usa um simples contador para controlar quando algo está ocioso).Este exemplo de teste de demonstra como isso pode ser feito.

Outras dicas

Se você não está incomodado com o uso de UiAutomator com Espresso, você poderia fazer algo assim na etapa 4.

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

https://developer.android.com/reference/android/support/test/uiautomator/UiObject.html#waitForExists(long)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top