Xcode UI Test case., XCtestcase со многими контроллерами в UINavigationController

Написать UI Testcase для первого экрана кажется очень простым.

Как показано ниже.

func testExample() {

        let app = XCUIApplication()
        let textField = app.otherElements.containing(.navigationBar, identifier:"id").children(matching: .other).element.children(matching: .other).element.children(matching: .other).element.children(matching: .textField).element
        textField.tap()
        textField.tap()
        app.navigationBars["id"].buttons["Done"].tap()

    }

Но как написать тестовый пример, в котором один навигационный контроллер запускает другой экран, как показано ниже.

Контроллер навигации -> UIViewController1 -> UIViewcontroller2 ..... UIViewController5

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

1) Запустите приложение.

2) Запустите Controller1, выполните событие для запуска Controller2

3) Повторите шаг 2, пока он не достигнет Controller5.

Я считаю, что тестовый пример пользовательского интерфейса должен быть простым и не должен занимать много времени.

Какой должен быть идеальный подход в этом случае, так как для запуска тестового примера для Controller5 ему нужно будет выполнить все события перед ним?


person NNikN    schedule 30.04.2018    source источник
comment
Вам нужно будет пойти на компромисс по скорости, чтобы в полной мере воспользоваться возможностями тестирования пользовательского интерфейса XCTest. Это стоимость тестирования на уровне пользовательского интерфейса. Для более быстрых тестов используйте модульные/компонентные/другие интеграционные тесты. Тесты пользовательского интерфейса медленные, но они также более аутентичны и ближе к опыту конечного пользователя — в этом их ценность, а не в скорости.   -  person Oletha    schedule 30.04.2018
comment
Возможный дубликат Можно ли открыть экран непосредственно в XCUITest?   -  person lagoman    schedule 01.05.2018