Тестирование пользовательского интерфейса - дождитесь диалога, затем нажмите кнопку ОК и проверьте контроллер

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

Это конец моего метода тестирования:

let alert = app.alerts["Error"]
let exists = NSPredicate(format: "exists == 1")
self.expectationForPredicate(exists, evaluatedWithObject: alert, handler: nil)
self.waitForExpectationsWithTimeout(5.0) { (error) in

  XCTAssertNil(error, "Something went horribly wrong")
  alert.buttons["Ok"].tap()
  XCTAssertEqual(app.navigationBars.element.identifier, "RegistrationViewController")
}

Проблема в том, что тест оценивается как сбой, но когда я смотрю на телефон, появляется диалоговое окно и нажимается кнопка Ok, и контроллер также в порядке.

Я получаю этот сбой в окне отладки:

Ошибка тестирования пользовательского интерфейса - для предупреждения не найдено совпадений

Я предполагаю, что с этим Tap возникла какая-то проблема. Как я могу это исправить? Что я делаю не так? Спасибо


person Libor Zapletal    schedule 30.03.2016    source источник


Ответы (1)


waitforExpectationsWithTimeout() вызывает обработчик завершения только при превышении тайм-аута. Просто переместите утверждение контроллера под вызовом асинхронного ожидания.

let alert = app.alerts["Error"]
let exists = NSPredicate(format: "exists == 1")

expectation(for: exists, evaluatedWith: alert, handler: nil)
waitForExpectations(timeout: timeout, handler: nil)

alert.buttons["Ok"].tap()
XCTAssertEqual(app.navigationBars.element.identifier, "RegistrationViewController")
person Joe Masilotti    schedule 30.03.2016
comment
Это то, что я пробовал раньше, но для меня результат был таким же. Тем не менее, в конце я получаю ту же ошибку, что диалоговое окно с предупреждением не найдено. - person Libor Zapletal; 30.03.2016
comment
Спасибо за помощь. Ваше решение работает. Проблема заключалась в том, что кнопка подтверждения в диалоговом окне была в порядке, но в моем тесте у меня все в порядке. Я не знаю, что в идентификаторе доступности учитывается регистр, но теперь я этого не забываю :) - person Libor Zapletal; 31.03.2016