Тест пользовательского интерфейса Xcode UIKeyInput typeText

Во время тестирования пользовательского интерфейса Xcode, как мне insertText для UIView, который соответствует UIKeyInput?

Я создал CodeInputView, соответствующий UIKeyInput.

Когда я записываю ввод кода вручную, Xcode пишет app.typeText("1234").

Но когда я пытаюсь воспроизвести это, я получаю сообщение об ошибке -focus-on-se">Ошибка тестирования пользовательского интерфейса — ни элемент, ни любой потомок не имеют фокуса клавиатуры. И ни одно из решений этого вопроса не сработало.


person ma11hew28    schedule 02.03.2016    source источник
comment
форумы.разработчик.apple.com/message/29549#29549   -  person Che    schedule 02.03.2016
comment
Кстати, попробуйте нажать, прежде чем печатать. и проверьте, что настройки симулятора: Оборудование - клавиатура - подключить аппаратную клавиатуру (false)   -  person Che    schedule 02.03.2016
comment
Я пробовал обе эти вещи. Я также пробовал Simulator › Reset Contents and Settings... Все еще не работает.   -  person ma11hew28    schedule 02.03.2016
comment
Я ответил на вопрос, который вы связали: stackoverflow.com/a/65335238/1837959   -  person storoj    schedule 17.12.2020


Ответы (2)


Я нашел решение для UIKeyInput. Пожалуйста, используйте:

app.keys["1"].tap()
app.keys["2"].tap()
app.keys["3"].tap()
app.keys["4"].tap()

// Instead of app.typeText("1234")
person fiveze    schedule 18.02.2017
comment
Это работает так, как задумано, но если клавиатура симулятора не работает, тест завершится неудачно. Также неплохо добавить небольшой тайм-аут перед нажатием, так как он имеет тенденцию время от времени терпеть неудачу с недопустимым количеством нажатий клавиш... - person Audun Kjelstrup; 28.09.2018

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

let app = XCUIApplication()
let codeTextField = app.textFields["Your code"]

codeTextField.tap()
app.typeText("1234")

Вышеприведенное предполагает, что заполнитель или метка доступности были установлены на «Ваш код».

person Joe Masilotti    schedule 02.03.2016
comment
Я попробую это, но не думаю, что это решит проблему, так как мне не нужно нажимать на нее во время записи, так как я вызываю codeInputView.becomeForstResponder в viewDidLoad. - person ma11hew28; 02.03.2016
comment
Первый ответчик происходит асинхронно, поэтому платформа может еще не зарегистрировать изменение. - person Joe Masilotti; 02.03.2016
comment
Я пробовал, но не повезло. Примечание. CodeInputView не является UITextField. Это UIView, который соответствует UIKeyInput. - person ma11hew28; 02.03.2016