Тестирование пользовательского интерфейса Xcode - ввод текста с помощью метода typeText() и автокоррекции

У меня есть тест, как показано ниже:

let navnTextField = app.textFields["First Name"]
let name = "Henrik"
navnTextField.tap()
navnTextField.typeText("Henrik")
XCTAssertEqual(navnTextField.value as? String, name)

Проблема заключается в том, что по умолчанию у моего iPhone Simulator появилась польская клавиатура из-за системных настроек, а "Henrik" автоматически изменяется на "ha" автокоррекцией.

Простым решением является удаление польской клавиатуры из iOS Settings. Однако это решение не решает проблему, потому что iPhone Simulator может быть reset, а затем тест снова не удастся.

Есть ли способ настроить автокоррект перед тестовым случаем или другим способом ввода текста в текстовое поле.

Ответ 1

Существует обходной путь для использования UIPboardboard для ввода входного текста:

let navnTextField = app.textFields["First name"]
navnTextField.tap()
UIPasteboard.generalPasteboard().string = "Henrik"
navnTextField.doubleTap()
app.menuItems.elementBoundByIndex(0).tap()
XCTAssertEqual(navnTextField.value as? String, name)

Вы можете проверить ссылку с описанием в качестве обходного пути для безопасного ввода в GM

Edit

Для лучшей читаемости вместо app.menuItems.elementBoundByIndex(0).tap() вы можете сделать app.menuItems["Paste"].tap().

Ответ 2

Здесь небольшое расширение на XCUIElement для выполнения этого

extension XCUIElement {
    // The following is a workaround for inputting text in the 
    //simulator when the keyboard is hidden
    func setText(text: String, application: XCUIApplication) {
        UIPasteboard.generalPasteboard().string = text
        doubleTap()
        application.menuItems["Paste"].tap()
    }
}

Его можно использовать как

let app = XCUIApplication()
let enterNameTextField =  app.otherElements.textFields["Enter Name"]
enterNameTextField.tap()
enterNameTextField.setText("John Doe", app)
  • Кредит отправляется на @Apan для реализации