Earlgrey работает медленно при доступе к элементам NavBar / TabBar - PullRequest
0 голосов
/ 16 октября 2018

Поскольку EarlGrey работает в процессе, и в нем нет процесса установки / удаления, как в тестовой среде XCUI, я ожидал, что тесты будут выполняться быстрее, но заметил, что это почти такая же скорость, как и в тестовой среде XCUI.Какие-либо причины?

Получить элементы TabBar или NavBar очень медленно.Как я могу ускорить процесс?

Я использую это для элементов TabBar, чтобы соответствовать

let tabButtonMatcher: GREYMatcher = grey_allOf([grey_accessibilityLabel("Something"), grey_accessibilityTrait(UIAccessibilityTraitButton),  grey_sufficientlyVisible()])
        EarlGrey.selectElement(with: tabButtonMatcher).perform(grey_tap()).assert(grey_sufficientlyVisible())

Аналогично для кнопок NavBar также

    let navMatch: GREYMatcher = grey_allOf([grey_accessibilityID("Something"), grey_accessibilityTrait(UIAccessibilityTraitButton), grey_sufficientlyVisible()])
    EarlGrey.selectElement(with: navMatch).perform(grey_tap())

1 Ответ

0 голосов
/ 18 ноября 2018

Вы должны удалить grey_sufficientlyVisible из ваших совпадений, потому что это не имеет смысла.Этот сопоставитель гарантированно хорошо работает в операторе assert, но кажется неэффективным передавать его как параметр сопоставления.

EarlGrey взаимодействует с сенсорными событиями в цикле выполнения и, как правило, взаимодействует как с приложением, так и с реальным пользователем.Его маловероятные тесты будут быстрыми в этом случае, особенно по сравнению с KIF, который вызывает селекторы на элементах пользовательского интерфейса вместо передачи сенсорных событий.Это не плохо, это ожидаемое поведение для функциональных тестов.Кстати, вы можете ускорить тестирование, отключив анимацию:

GREYTestHelper.enableFastAnimation()

Что касается вашего вопроса, касающегося совпадений, я бы посоветовал вам попробовать несколько подходов и найти тот, который подходит для вашего случая.

На первый взгляд, стоит просто найти UITabBarItem, используя grey_kindOfClass.

Пример сопоставления (не работает)

grey_allOf([grey_kindOfClass(UITabBarItem.self), grey_text(title)])

Но это не рабочее решение.Давайте посмотрим на иерархию представлений:

enter image description here

Так что, если вы полагаетесь на 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))
...