Тесты Espresso завершаются случайным сбоем, предположительно из-за проблемы с синхронизацией

#android #android-espresso

#Android #android-espresso

Вопрос:

У меня есть несколько тестов, которые, похоже, завершаются неудачей только при первом запуске, вот пример одного из них;

 class OptionDialogTest {
    @get:Rule
    val activityScenarioRule = activityScenarioRule<MainActivity>()

    @Test
    fun optionDialogTest() {
        val selected = R.string.manage_categories
        var dialog: OptionDialog? = null
        activityScenarioRule.scenario.onActivity { activity: MainActivity? ->
            dialog = OptionDialog("test", "test", arrayOf(R.string.drawer_categories,selected), activity as Context)
            dialog!!.setConfirm { _, _ -> }
            dialog!!.show()
        }
        onView(withId(R.id.custom)).perform(click()) //this line sometimes doesn't execute causing the test to fail, presumably it doesn't execute in time.
        onView(withText(R.string.manage_categories)).inRoot(isPlatformPopup()).perform(click())
        onView(withText(R.string.Yes)).inRoot(isDialog()).perform(click())
        assertEquals(dialog!!.getSelected(), selected)
    }
    
}
  

ошибка, которую выдает android studio,; Waited for the root of the view hierarchy to have window focus and not request layout for 10 seconds. If you specified a non default root matcher, it may be picking a root that never takes focus.

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

любая помощь или идеи приветствуются.

Комментарии:

1. Вы пытались изменить неисправную строку на onView(withId(R.id.custom)).inRoot(isDialog()).perform(click()) ? Возможно, он выбирал представление из неправильного корня.

2. У меня нет, но это имело бы смысл, я попробую и посмотрю, повторится ли это снова.