Тесты пользовательского интерфейса Xcode 7 завершаются с ошибкой с тайм-аутом ожидания завершения ключевого события

Мы с моей командой настраивали сервер Jenkins для автоматизации запуска модульных тестов и тестов пользовательского интерфейса на Mac Mini, который мы используем в качестве сервера сборки. К этому Mac Mini не подключены периферийные устройства, и единственный способ получить к нему доступ — удаленный вход в систему.

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

Ошибка утверждения: истекло время ожидания завершения ключевого события

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

Я чувствую, что это как-то связано с программной клавиатурой симулятора, но я не понимаю, почему это может быть проблемой. Должен ли Mac иметь какой-то выход на дисплей, чтобы существовала программная клавиатура или что-то в этом роде? Будет ли подключение монитора к машине (даже если он на самом деле не используется) привести к прохождению тестов? Почему это так?


person David Bagwell    schedule 30.11.2015    source источник
comment
Не уверен, поможет ли это, но я помню, что Mac Mini не использует все преимущества графического процессора при работе без головы. Я слышал о нескольких обходные пути но так и не удосужился попробовать.   -  person Joe Masilotti    schedule 01.12.2015


Ответы (4)


Эту проблему можно было решить, отключив подключенную аппаратную клавиатуру в настройках симулятора на несколько.

Вы также можете попробовать это >Ошибка тестирования пользовательского интерфейса: ни элемент, ни любой потомок не имеют фокуса клавиатуры на TextView

person Yogesh Khatri    schedule 23.02.2016
comment
ключом является отключение подключенной аппаратной клавиатуры. О, Apple действительно должна поработать над этим. - person Błażej; 30.08.2016

Xcode 10 все еще имеет ту же проблему после того, как вы представили экземпляр CNContactViewController.

Избегайте писать те случаи, которые требуют вызова экземпляра CNContactViewController`.

Или есть обходной путь:

app.keys["1"].tap()
app.keys["2"].tap()
app.keys["3"].tap()
person beimenjun    schedule 11.09.2019

Я использую xcode 8.2.1 и запускаю тесты на версиях ios 9.3. Один простой хак — добавить сон на 2-5 секунд после нажатия на текстовое поле и перед вводом текста. Хотя это не постоянное решение.

ЕЩЕ НАДЕЖНОЕ РЕШЕНИЕ

Отмените все настройки клавиатуры в настройках перед запуском тестов.

"KeyboardAllowPaddle": false,
"KeyboardAssistant": false,
"KeyboardAutocapitalization": false,
"KeyboardAutocorrection": false,
"KeyboardCapsLock": false,
"KeyboardCheckSpelling": false,
"KeyboardPeriodShortcut": false,
"KeyboardPrediction": false,
"KeyboardShowPredictionBar": false
person Devansh Agarwal    schedule 16.05.2017

Вы можете вставить его в TextField, например:

extension XCUIApplication {
  // The following is a workaround for inputting text in the
  //simulator when the keyboard is hidden
  func setText(_ text: String, on element: XCUIElement?) {
    if let element = element {
    UIPasteboard.general.string = text
    element.doubleTap()
    self.menuItems["Select All"].tap()
    self.menuItems["Paste"].tap()
    }
  }
}

Бежать с:

self.app?.setText("Lo", on: self.app?.textFields.firstMatch)
person Bruno Rodrigues de Andrade    schedule 28.11.2019