Espresso: espera que la actividad finalice la tarea de fondo después de presionarBack ()
He mirado alrededor durante un tiempo sobre las pruebas de espresso y especialmente sobre los recursos personalizados de ralentí (he implementado un par de casos de trabajo), pero me he encontrado con un escenario que no puedo resolver.
Tengo una clase SearchUITest de Espresso que inicia una actividad para buscar cosas. Antes de realizar cualquier búsqueda abre SettingsActivity para realizar algunos cambios en la configuración de la aplicación. Al ejecutar el método pressBack () desde la actividad de configuración para volver a SearchActivity, se inicia una tarea en segundo plano (que no utiliza AsyncTask) para actualizar la configuración antes de volver a SearchActivity de nuevo.
- Prueba de desplazamiento sin fin RecyclerView con Espresso y RxJava
- Error de prueba Espresso: AppNotIdleException
- Prueba del espresso del androide: prueba vacía suite. No se encontraron pruebas
- Prueba de interfaz de usuario de Espresso para Android: falla en la ejecución de la prueba: Error en la ejecución de la instrumentación debido a 'java.lang.IllegalAccessError'
- Configuración de gradiente y maven espresso para Android
El problema es que SearchActivity no se reanuda antes de que se haga la primera llamada para interactuar con su interfaz de usuario. Estoy recibiendo esta excepción (a veces obtengo el NoActivityResumedException y algunos otros NoMatchingViewException):
android.support.test.espresso.NoActivityResumedException: No activities in stage RESUMED. Did you forget to launch the activity. (test.getActivity() or similar)? ... android.support.test.espresso.NoMatchingViewException: No views in hierarchy found matching:
¿Cómo puedo hacer que Espresso espere a que SettingsActivity termine su tarea en segundo plano y abra SearchActivity antes de ejecutar la siguiente oración de prueba. Dejo un poco de código para la aclaración adicional (estoy corriendo una prueba parametrizada con espresso por cierto):
@RunWith(value = Parameterized.class) public class SearchByCountryE2ETest { private static List<Country> mCountriesList; private SearchActivity mActivity; private String countryID; private String countryLocation; private String countryLanguage; public SearchByCountryE2ETest(String countryID, String countryLocation, String language) { this.countryID = countryID; this.countryLocation = countryLocation; this.countryLanguage = language; } @Parameterized.Parameters(name = "id {0}, language{2}") public static Collection countryIDs() { return Arrays.asList(new Object[][]{ {"001", "mad", "Español (España)"}, {"002", "lon", "English (United Kingdom)"} }); } @Rule public ActivityTestRule<SearchActivity> mSearchActivityRule = new ActivityTestRule<>( SearchActivity.class); @Before public void setUp() throws Exception { mSearchActivityRule.getActivity(); if (mCountriesList == null) { mCountriesList = SingletonCommon.getInstance().getCountries().getCountry(); } } @Test public void testEnd2EndWithCountryID() { String countryName = getCountryNameById(countryID); if (countryName != null) { setCountryAndLanguage(countryName, countryLanguage); performCompleteSearch(); } } private void setCountryAndLanguage(String countryName, String countryLanguage) { openSettings(); changeLanguage(countryLanguage); changeCountry(countryName); pressBack(); waitMillis(3000); // this is where the settings background task to update config is started } public void performCompleteSearch() { setLocation(); clickViewWithId(R.id.search_button);//Go to filters activity onView(withId(R.id.search_button)).check(matches(isClickable()));//Check if results != 0 clickViewWithId(R.id.search_button);//Go to listing activity waitMillis(1000); // wait millis is just a call to SystemClock.sleep(millis); openListingDetailAtPosition(1);// Click on item an open detail view pressBack(); } private void openListingDetailAtPosition(int position) { onView(withId(R.id.recycler_view)) .perform(scrollToPosition(position)); onRecyclerViewItemAtPosition(click(), R.id.recycler_view, position); } private void openSettings() { onView(withId(R.id.drawer_layout)).perform(DrawerActions.open()); onData(anything()).inAdapterView(withId(R.id.drawer_list_view)).atPosition(SETTINGS_DRAWER_POSITION).perform(click()); } private void changeLanguage(String countryLanguage){ if (countryLanguage != null && !countryLanguage.isEmpty()) { clickOnSpinnerStringItem(R.id.spinner_list_language, countryLanguage); } } private void changeCountry(String countryName){ clickOnSpinnerStringItem(R.id.spinner_list_countries, countryName); } private void setLocation() { clickViewWithId(R.id.geolocation_edit_text); enterTextIntoViewWithId(countryLocation, R.id.location_edit_text); waitMillis(500); onRecyclerViewItemAtPosition(click(), R.id.locations_list, DEFAULT_SELECTED_LOCATION_POSITION); onView(withId(R.id.geolocation_edit_text)).perform(closeSoftKeyboard()); }
}
He tenido que añadir waitMillis (millis) llamadas para esperar a que la aplicación termine de cargar las tareas de fondo para las actividades abiertas de SearchActivity porque no he sido capaz de crear y registrar recursos inactivos para las actividades abiertas después de la que inicia el prueba. También agradecería mucho si hay un ejemplo completo sobre cómo hacer esto (registrar recursos inactivos para diferentes actividades abiertas a lo largo de la ejecución de la prueba).
Si alguna aclaración adicional es necesaria por favor dígame. Gracias de antemano por cualquier ayuda.
- Espresso cómo hacer clic en un ImageView colocado en el primer elemento de la lista?
- Tiempo de espera de espera para el resultado de ClearAppData2 al ejecutar Xamarin UI Tests for Android
- La ejecución falló para la tarea 'app: prepareDebugAndroidTestDependencies'
- Espresso Nested Recycler Vistas Prueba de interfaz de usuario
- Prueba de la interfaz de usuario de Android con Expresso: No hay actividades en la etapa REANUDADO
- ¿Es posible tomar una captura de pantalla y probar valores de píxeles con espresso?
- ¿Las pruebas de selenio valen la pena en dispositivos móviles?
- ¿Cómo "esperar a la actividad" con Appium, en comenzar y durante la prueba en sí?
- Datos crudos de la huella digital de Android
- Listview dentro de un ViewPager con SlidingTabLayout – Problemas de altura