Вы должны удалить grey_sufficientlyVisible
из ваших совпадений, потому что это не имеет смысла.Этот сопоставитель гарантированно хорошо работает в операторе assert
, но кажется неэффективным передавать его как параметр сопоставления.
EarlGrey взаимодействует с сенсорными событиями в цикле выполнения и, как правило, взаимодействует как с приложением, так и с реальным пользователем.Его маловероятные тесты будут быстрыми в этом случае, особенно по сравнению с KIF, который вызывает селекторы на элементах пользовательского интерфейса вместо передачи сенсорных событий.Это не плохо, это ожидаемое поведение для функциональных тестов.Кстати, вы можете ускорить тестирование, отключив анимацию:
GREYTestHelper.enableFastAnimation()
Что касается вашего вопроса, касающегося совпадений, я бы посоветовал вам попробовать несколько подходов и найти тот, который подходит для вашего случая.
На первый взгляд, стоит просто найти UITabBarItem
, используя grey_kindOfClass
.
Пример сопоставления (не работает)
grey_allOf([grey_kindOfClass(UITabBarItem.self), grey_text(title)])
Но это не рабочее решение.Давайте посмотрим на иерархию представлений:
Так что, если вы полагаетесь на UITabBarItem
, это не сработает, потому что такого элемента нет.Вы можете видеть, что существует частный класс UIKit с именем UITabBarButton
, который не должен взаимодействовать с.Более того, это не подкласс UIButton
, а подкласс UIControl
?
Вместо этого я бы рекомендовал выбрать элемент на UITabBar
с помощью функции inRoot
.
Пример соответствия (рабочий)
EarlGrey.selectElement(with: grey_text(tabbarTitle))
.inRoot(grey_kindOfClass(UITabBar.self))
.perform(grey_tap())
В этом случае вы найдете элемент, который имеет ожидаемый текст и который расположен на UITabBar
.
Для элементов выбора на панели навигации можно использовать варианты этого сопоставителя:
Пример сопоставителя для поиска элемента на панели навигации
EarlGrey.selectElement(with: grey_kindOfClass(UIButton.self))
.inRoot(grey_kindOfClass(UINavigationBar.self))