Я пишу тест, в котором мне нужно проверить, что, когда пользователь нажимает кнопку регистрации, он / она попадает на страницу входа после успешной регистрации.
func test_should_navigate_to_login_screen_for_successful_registration() {
let usernameTextField = self.app.textFields["usernameTextField"]
usernameTextField.tap()
usernameTextField.typeText("johndoe")
let passwordTextField = self.app.textFields["passwordTextField"]
passwordTextField.tap()
passwordTextField.typeText("password123")
// register button will navigate to login view when successfull
self.app.buttons["registerButton"].tap()
print(self.app.navigationBars.element.identifier)
// If I pause the test and then check the result of self.app.navigationBars.element.identifier
// then it contains the correct value but if I don't then it contains "Create an Account" which is the text of the back button
XCTAssertEqual(self.app.navigationBars.element.identifier, "BankAccount.LoginView")
}
проблема заключается в последнем утверждении, которое проверяет значение self.app.navigationBars.element.identifier. Значение не доступно сразу, и поэтому тест не пройден. Я отладил его и подтвердил, что в конечном итоге правильное значение доступно.
Как правильно проверить навигацию в Xcode?
РЕШЕНИЕ (по совету Мэтта в комментарии):
Это работает. Убедитесь, что предоставили accessibilityIdentifier для вашего представления.
забавный c test_should_navigate_to_login_screen_for_successful_registration () {
let usernameTextField = self.app.textFields["usernameTextField"]
usernameTextField.tap()
usernameTextField.typeText("johndoe")
let passwordTextField = self.app.textFields["passwordTextField"]
passwordTextField.tap()
passwordTextField.typeText("password123")
// register button will navigate to login view when successfull
self.app.buttons["registerButton"].tap()
let loginView = app.otherElements["LoginView"]
let loginViewExists = loginView.waitForExistence(timeout: 1.0)
XCTAssert(loginViewExists)