Итак, я пытаюсь написать несколько тестов пользовательского интерфейса. Я впервые использую эспрессо.
В конце концов я дошел до того, что мне стало удобно, как все работает. Затем, как только я попытался проверить эти действия, которые находятся на 5 уровнях в иерархии, каждая функция эспрессо начинает давать сбой.
Это дает ошибку в нижней части этого вопроса.
Я вижу, что об этом сообщалось в Google всего несколько раз (включая переполнение стека), но большинство из этих людей пытались найти тостовое сообщение. Я просто пытаюсь получить контроль над своей деятельностью. используя getCurrentActivity я даже могу получить активность на переднем плане. Но каждый раз, когда я пробую onView (withId (R.id.some_id)). Любая функция не срабатывает через 10 секунд, выдавая ошибку.
некоторые решения говорят, что используют следующий код
onView(withText("someText")).inRoot(withDecorView(not(is(getCurrentActivity().getWindow().getDecorView())))).check(matches(isDisplayed()));
это, вероятно, будет искать что-либо, кроме активности (предназначено для сообщений-тостов) Я пробовал это без not (), и это все еще дает мне мою ошибку после 10 секунд. Ошибка говорит, что мой root никогда не фокусируется, но если этот метод устанавливает мой root в качестве currentActivity, как это возможно?
Похоже, это какой-то глюк эспрессо, когда эспрессо не может видеть какой-либо элемент управления в упражнении глубиной 5 уровней (я запустил тест в своем первом упражнении, и тест пользовательского интерфейса нажимал различные кнопки, пока не добрался до этого упражнения). 5 уровней в). У меня есть три варианта использования для начала этого теста, каждый из которых заканчивает тем, что запускает различное действие на уровне 5. Я получаю эту ошибку в каждом из трех действий, даже если каждое действие отличается.
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. Root:
Root{application-window-token=android.view.ViewRootImpl$W@b32be4e, window-token=android.view.ViewRootImpl$W@b32be4e, has-window-focus=false, layout-params-type=1, layout-params-string={(0,0)(fillxfill) sim={adjust=resize} ty=BASE_APPLICATION wanim=0x10302fe
fl=LAYOUT_IN_SCREEN LAYOUT_INSET_DECOR SPLIT_TOUCH HARDWARE_ACCELERATED DRAWS_SYSTEM_BAR_BACKGROUNDS
pfl= remains{ 0x1000000 } naviIconColor=0}, decor-view-string=DecorView{id=-1, visibility=VISIBLE, width=1080, height=2220, has-focus=true, has-focusable=true, has-window-focus=false, is-clickable=false, is-enabled=true, is-focused=false, is-focusable=false, is-layout-requested=false, is-selected=false, layout-params={(0,0)(fillxfill) sim={adjust=resize} ty=BASE_APPLICATION wanim=0x10302fe
fl=LAYOUT_IN_SCREEN LAYOUT_INSET_DECOR SPLIT_TOUCH HARDWARE_ACCELERATED DRAWS_SYSTEM_BAR_BACKGROUNDS
pfl= remains{ 0x1000000 } naviIconColor=0}, tag=null, root-is-layout-requested=false, has-input-connection=false, x=0.0, y=0.0, child-count=3}}
Я убежден, что это сбой в эспрессо, но если кто-то может сказать, почему он не работает, пожалуйста, дайте мне знать. (кстати, я пробовал thread.sleep, это не имеет значения).