2016-03-02 2 views
4

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

Я создал CodeInputView, который соответствует UIKeyInput.

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

Но, когда я пытаюсь воспроизвести это, я получаю сообщение об ошибке UI Testing Failure - Neither element nor any descendant has keyboard focus. И ни одно из решений этого вопроса не сработало.

+0

forums.developer.apple.com/message/29549#29549 – Che

+0

Кстати, попробуйте нажать, прежде чем печатать. и проверьте, что настройки симулятора: Аппаратное обеспечение - клавиатура - подключить аппаратную клавиатуру (false) – Che

+0

Я пробовал обе эти вещи. Я также пробовал Simulator> Сбросить содержимое и настройки ... Все еще не работает. – ma11hew28

ответ

1

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

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

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

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

+0

Я попробую, но я не думаю, что это решит проблему, поскольку мне не нужно ее кликать во время записи, так как я вызываю 'codeInputView.becomeForstResponder' в' viewDidLoad'. – ma11hew28

+0

Первый ответчик происходит асинхронно, поэтому инфраструктура, возможно, еще не зарегистрировала изменение. –

+0

Я пробовал, но не повезло. * Примечание: 'CodeInputView' не является' UITextField'. Это 'UIView', который соответствует' UIKeyInput'. * – ma11hew28

1

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

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

// Instead of app.typeText("1234")