it-swarm.com.ru

Как скрыть клавиатуру в приложении Swift во время тестирования интерфейса

Я только начал с тестирования пользовательского интерфейса в XCode 7 и столкнулся с этой проблемой:

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

Мое текущее решение таково:

let textField = app.textFields["placeholder"]
textField.tap()
textField.typeText("my text")
app.childrenMatchingType(.Window).elementBoundByIndex(0).tap() // hide keyboard
app.buttons["hidden button"].tap()

Я могу сделать это, потому что мой ViewController перехватывает прикосновения:

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    view.endEditing(false)
    super.touchesBegan(touches, withEvent: event)
}

Я не очень доволен своим решением, есть ли другой способ, как скрыть клавиатуру во время тестирования пользовательского интерфейса?

16
leizeQ

Если вы настроили свои текстовые поля для отставки FirstResponder (через textField.resignFirstResponder() или self.view.endEditing(true)) в методе делегата textFieldShouldReturn(), тогда

textField.typeText("\n")

сделаю это.

17
bbjay

Основываясь на вопросе к блогу Джо , у меня есть проблема, из-за которой после нескольких запусков на симуляторе клавиатурам не удается спрятаться, используя этот фрагмент кода:

XCUIApplication().keyboard.buttons["Hide keyboard"]

Итак, я изменил его на: (спасибо Джо)

XCUIApplication().keyboard.buttons["Hide keyboard"]
let firstKey = XCUIApplication().keys.elementBoundByIndex(0)
if firstKey.exists {
   app.typeText("\n")
}

Здесь я пытаюсь определить, остается ли клавиатура открытой после нажатия кнопки «скрыть», если она включена, я набираю «\ n», что в моем случае тоже закрывает клавиатуру.

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

Я надеюсь, что это может помочь.

5
katu
XCUIApplication().toolbars.buttons["Done"].tap()
3
reutsey

Я всегда использую это, чтобы программно скрыть клавиатуру в Swift UITesting:

XCUIApplication().keyboards.buttons["Hide keyboard"].tap()
3
Charlie Seligman

Ответ на ваш вопрос заключается не в тестовом коде, а в коде приложения. Если пользователь не может ввести текст, используя экранную программную клавиатуру, а затем нажать на кнопку, необходимо либо выполнить тест, чтобы закрыть клавиатуру (как пользователь должен будет, чтобы нажать на кнопку), либо сделать прокрутку вида прокручиваемой. ,.

2
Aaron Sofaer

С Swift 4.2 вы можете сделать это сейчас с помощью следующего фрагмента:

let app = XCUIApplication()
if app.keys.element(boundBy: 0).exists {
    app.typeText("\n")
}
1
CodeBender

Просто убедитесь, что клавиатура выключена в симуляторе перед запуском тестов.

Оборудование-> Клавиатура-> Подключить аппаратную клавиатуру.

Затем введите текст с помощью доски вставки

textField.tap()
UIPasteboard.generalPasteboard().string = "Some text"
textField.doubleTap()
app.menuItems["paste"].tap()
1
365SplendidSuns