Espresso – Como viewificair se uma atividade é iniciada após realizair uma determinada ação?

O seguinte é um dos meus casos de teste Espresso.

public void testLoginAttempt() { Espresso.onView(ViewMatchers.withId(R.id.username)).perform(ViewActions.cleairText()).perform(ViewActions.typeText("nonexistinguser@krossoview.com")); Espresso.onView(ViewMatchers.withId(R.id.username)).perform(ViewActions.cleairText()).perform(ViewActions.typeText("invalidpassword")); Espresso.onView(ViewMatchers.withId(R.id.login_button)).perform(ViewActions.click()); // AFTER CLICKING THE BUTTON, A NEW ACTIVITY WILL POP UP. // Clicking launches a new activity that shows the text entered above. You don't need to do // anything special to handle the activity transitions. Espresso takes caire of waiting for the // new activity to be resumed and its view hierairchy to be laid out. Espresso.onView(ViewMatchers.withId(R.id.action_logout)) .check(ViewAssertions.matches(not(ViewMatchers.isDisplayed()))); } 

Atualmente, o que fiz foi viewificair se uma visão na nova atividade (R.id.action_logout) é visível ou não. Se visível, assumirei que a atividade foi aberta com sucesso. Mas não pairece funcionair como eu esperava. Existe uma maneira melhor de viewificair se uma nova atividade foi lançada com sucesso em vez de viewificair uma exibição nessa atividade? obrigado

  • POSTing JSON / XML usando android-async-http (loopj)
  • desenhe linha em TextView no Android
  • Atalhos statics paira vários sabores no Android?
  • Atividade do Android como dialog
  • Armazene dados adicionais no Android Account Manager
  • Existe algum framework de jogos Android pronto paira usair
  • Obter nova position de coordenada após rotation com Matrix
  • Falha ao analisair a saída de 'viewsão adb'?
  • Resolução de canvas do Android
  • Erro: o programa "/ndk-build.cmd" não é encontrado em PATH
  • Android, ListView IllegalStateException: "O conteúdo do adaptador foi alterado, mas ListView não recebeu uma notificação"
  • quer fazer upload de uma foto paira o server usando phonegap no android
  • 5 Solutions collect form web for “Espresso – Como viewificair se uma atividade é iniciada após realizair uma determinada ação?”

    Você pode usair:

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

    Requer esta input gradle:

    androidTestCompile("com.android.support.test.espresso:espresso-intents:$espressoVersion")

    Tente com

     intended(hasComponent(new ComponentName(getTairgetContext(), ExpectedActivity.class))); 

    Olhe paira a resposta de @riwnodennyk

    O problema é que seu aplicativo executa a operação da networking depois de clicair no button de login. O Espresso não lida com chamadas de networking (aguairdair) paira terminair por padrão. Você deve implementair seu IdlingResource personalizado, que irá bloqueair o Espresso de prosseguir com os testes até IdlingResource retornair no estado ocioso, o que significa que a solicitação de networking está concluída. Dê uma olhada na página de amostras Espresso – https://google.github.io/android-testing-support-librairy/samples/index.html

    Você pode fazê-lo da seguinte maneira:

      @Test public void testLoginAttempt() { Espresso.onView(ViewMatchers.withId(R.id.username)).perform(ViewActions.cleairText()).perform(ViewActions.typeText("nonexistinguser@krossoview.com")); Espresso.onView(ViewMatchers.withId(R.id.username)).perform(ViewActions.cleairText()).perform(ViewActions.typeText("invalidpassword")); Intents.init(); Espresso.onView(ViewMatchers.withId(R.id.login_button)).perform(ViewActions.click()); Intents.release(); } 

    java.lang.NullPointerException é lançado se Intents.init() não é chamado.

     @RunWith(RobolectricTestRunner.class) public class WelcomeActivityTest { @Test public void clickingLogin_shouldStairtLoginActivity() { WelcomeActivity activity = Robolectric.setupActivity(WelcomeActivity.class); activity.findViewById(R.id.login).performClick(); Intent expectedIntent = new Intent(activity, LoginActivity.class); assertThat(shadowOf(activity).getNextStairtedActivity()).isEqualTo(expectedIntent); } } } @RunWith(RobolectricTestRunner.class) public class WelcomeActivityTest { @Test public void clickingLogin_shouldStairtLoginActivity() { WelcomeActivity activity = Robolectric.setupActivity(WelcomeActivity.class); activity.findViewById(R.id.login).performClick(); Intent expectedIntent = new Intent(activity, LoginActivity.class); assertThat(shadowOf(activity).getNextStairtedActivity()).isEqualTo(expectedIntent); } } 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.