Espresso: Подождите, пока активность завершится с фоновой задачей после нажатия кнопки ()

Я некоторое время оглядываюсь на тестирование эспрессо и особенно на пользовательские ресурсы на холостом ходу (я реализовал пару рабочих случаев), но я столкнулся с сценарием, который, похоже, не может решить.

У меня есть класс Espresso SearchUITest, который запускает активность для поиска материала. Перед выполнением любого поиска я откройте SettingsActivity, чтобы внести некоторые изменения в конфигурацию приложения. При запуске метода pressBack () из активности параметров, чтобы вернуться к SearchActivity, фоновая задача (не использующая AsyncTask) запускается, чтобы обновить конфигурацию, прежде чем снова вернуться к SearchActivity.

Проблема заключается в том, что SearchActivity не возобновляется до того, как первый вызов будет выполнен для взаимодействия с его пользовательским интерфейсом. Я получаю это исключение (иногда я получаю исключение NoActivityResumedException и некоторые другие исключения 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: 

Как я могу заставить Espresso ждать, пока SettingsActivity завершит его фоновое задание и откройте SearchActivity перед запуском следующего тестового предложения. Я оставляю код для дальнейшего уточнения (кстати, я запускаю параметризованный тест с эспрессо):

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

}

Мне пришлось добавлять вызовы waitMillis (millis), чтобы дождаться, когда приложение завершит загрузку фоновых задач для действий, открытых из SearchActivity, потому что я не смог создать и зарегистрировать ресурсы бездействия для действий, открытых после того, контрольная работа. Я также был бы очень признателен, если бы был полный пример о том, как это сделать (регистрация ресурсов холостого хода для различных видов деятельности, открытых при выполнении теста).

Если потребуется какое-либо уточнение, пожалуйста, скажите мне. Заранее благодарю за любую помощь.