XCode 11 XCUITest Не удалось получить соответствующие снимки: ошибка при получении главного окна kAXErrorServerNotFound

21

После сборки моего приложения в Xcode 11 и запуска моего набора XCUITests я получаю много случайных сбоев со следующим.

Не удалось получить совпадающие снимки: ошибка при получении главного окна kAXErrorServerNotFound

Независимо от того, как долго я увеличиваю время ожидания, проблемы появляются периодически. Кажется, возникают проблемы со снимками в иерархии пользовательского интерфейса. Наши тесты проходят последовательно в Xcode 10.

Я переустановил Xcode. Удалил все симуляторы. Очищенные производные данные. Измененные таймауты. Обновлен с Xcode 11.1 до Xcode 11.2.1.

Спасибо!

 

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

Ответы:

9

У меня была проблема с соответствием, когда я запускал простой UITest в Xcode 11.3. Чтобы все заработало, сначала нужно было вставить: XCUIApplication().activate()или XCUIApplication().launch().

Денис Грищенко
источник
Это работает .. спасибо
RJ168
Этот ответ, кажется, путь, но есть проблемы с пониманием, что это значит? Где я должен ввести XCUIApplication (). Activiate () и / или XCUIApplication (). Launch ()?
Чарли Селигман
Внутри вашего пользовательского интерфейса тестовая функция
Денис Грищенко
0

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

Чтобы доказать, что я сделал следующее:

  1. Создан тест пользовательского интерфейса, который печатает длинный текст в текстовом представлении
  2. Запустил тест и вручную остановил его, когда в текстовом представлении было несколько предложений
  3. Вручную открыл приложение в симуляторе (не запуская тест)
  4. Заметил, что в текстовом представлении появляются случайные символы, хотя тесты не выполнялись.

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

erudel
источник
Спасибо за понимание! Теперь, когда вы говорите, это соответствует тому, что я наблюдал. К сожалению, как я уже говорил в своем первоначальном сообщении, я уже пытался удалить все симуляторы. Эти тесты выполняются как часть наших сборок как локально, так и в нашей системе CI. Знаете ли вы как-нибудь автоматизировать этот процесс?
Люк-стрит
То, что мы в итоге делали в нашей системе CI, было явным убийством симулятора перед запуском набора тестов. Вы можете, например, запустить killall "Simulator" 2> /dev/null; xcrun simctl erase all, или если вы используете fastlane, есть опции сканирования для сброса симулятора.
Эрудель
0

Я использую разные машины. Мои старые Маки сталкиваются с этой ошибкой гораздо чаще. Я предполагаю, что старые Mac не имеют памяти, необходимой для правильной работы некоторых XCUITests.

Чарли Селигман
источник
0

Время от времени я встречаюсь с этой проблемой в Xcode 11.1. Я заметил, что проблема возникает при ожидании элементов пользовательского интерфейса, особенно когда во время теста отображается веб-представление. Когда проблема произошла, я использовал XCUIElement.waitForExistence(timeout:)или ожидал с NSPredicate(format: "exists == true"). Когда я перешел на ожидание, NSPredicate(format: "hittable == true")проблема исчезла, но я не знаю почему. Разница между двумя атрибутами заключается в том, что hittableобнаруживаются только элементы на экране, в то время как existsобнаруживаются элементы вне экрана, такие как внеэкранные ячейки табличного представления.

expectation(for: NSPredicate(format: "hittable == true"), evaluateWith: element, handler: nil)
waitForExpectations(timeout: 60, handler: nil)
Juny
источник
0

У меня была похожая проблема на Xcode 11.

Оказалось, что раньше было разрешено иметь одинаковый идентификатор доступности на многих страницах.

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

touti
источник