AndroidX тестовый диалог
С момента выпуска AndroidX мы используем Robolectric с Espresso в наших модульных тестах. Но мы не можем найти способ протестировать диалоги. Сообщество эспрессо предлагает нам:
onView(withId(android.R.id.button1))
.inRoot(isDialog())
.check(matches(isDisplayed()))
.perform(click())
Но тест здесь не проходит за исключением
Waited for the root of the view hierarchy to have window focus and not request layout for 10 seconds.
При отладке кода мы обнаружили, что диалог найден, но как-то decorView.hasWindowFocus()
возвращает ложь
Это из-за некоторой ошибки в Robolectric, что представление не может получить фокус окна? Есть ли способ решить это? На данный момент мы возвращаемся к робоэлектрическим теням.
Мы используем Robolectric 4.2
а также AndroidX test 1.1.0
версии
Обновление: очевидно после отображения диалога, активность сохраняет фокус окна, так что, скорее всего, это ошибка Robolectric (или мое недоразумение).
1 ответ
У Robolectric есть метод для этого, это
ShadowAlertDialog.getLatestDialog()
Чтобы выполнить действие нажатия на кнопку ОК, вы можете использовать его следующим образом:
((AlertDialog) ShadowAlertDialog.getLatestDialog())
.getButton(AlertDialog.BUTTON_POSITIVE).performClick();