Тесты на Bitrise (некоторые последовательно, некоторые непоследовательно) завершаются с ошибкой действия AX

У меня есть ряд тестов, которые я написал для довольно существенного приложения (приложение существует на несколько лет дольше, чем я в этой компании) в среде XCUITest. Все тесты стабильно проходят на моем ноутбуке, а также на ноутбуках других инженеров.

При запуске тестов на Bitrise первый тест пользовательского интерфейса каждый раз завершается с ошибкой на этапе установки со следующим сообщением:

testFixtureAttachment, Ошибка тестирования пользовательского интерфейса — не удалось выполнить действие AX для мониторинга анимации (приложения), ошибка: Ошибка -25204 при выполнении AXAction 2043

Другие тесты обычно проходят успешно, но иногда возникают ошибки, например:

Ошибка тестирования пользовательского интерфейса. Не удалось выполнить действие AX для мониторинга цикла событий (приложения), ошибка: Ошибка -25204 при выполнении AXAction 2042.

Ошибка тестирования пользовательского интерфейса - не удалось прокрутить до видимого (с помощью действия AX) TextField 0x7fe800f9fa20: черты: ... ошибка: ошибка -25204 при выполнении AXAction 2003

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


person Aaron Sofaer    schedule 06.06.2016    source источник


Ответы (2)


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

Очевидное решение — увеличить выделение ЦП в Bitrise. Однако есть и другое, странное решение!

Непосредственно перед функцией настройки для тестов у меня есть следующая строка:

let app = XCUIApplication()

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

Было обнаружено, что удаление этой строки предотвращает возникновение ошибки. Это было найдено в этой ветке форума разработчиков Apple:

https://forums.developer.apple.com/thread/4472

Итак... надеюсь, это исправит это для других людей, но исправило для меня.

person Aaron Sofaer    schedule 16.06.2016
comment
Re: Очевидное решение — увеличить выделение ЦП в Bitrise. ... Было обнаружено, что удаление этой строки предотвращает возникновение ошибки. Это говорит о том, что это не проблема распределения ЦП, или, по крайней мере, кажется странным, как это решит проблему, если проблема действительно была в выделении ЦП. Тем не менее, мы всегда работаем над улучшением производительности, но пока эта проблема, похоже, связана с чем-то другим. Это происходит для некоторых проектов, но не для других, а также может быть исправлено такими вещами, как то, что вы описали. Мы будем следить за этим, и спасибо за сообщение о решении! - person Viktor Benei; 17.06.2016
comment
Кажется странным и мое отношение к этому. Тот факт, что он начал проявляться, когда я использовал понижение мощности Power Management, предполагает наличие процессора, но странно во всех аспектах, это правильно. - person Aaron Sofaer; 17.06.2016

Обычно это связано с более медленными средами. Xcode не очень хорош, чтобы гарантировать выполнение теста пользовательского интерфейса на старых и медленных машинах. Это справедливо как для виртуализированных сред (например, той, что использует Bitrise.io), так и для старых машин или машин с хранилищем на жестком диске вместо SSD.

Существуют обходные пути, которые могут помочь или не помочь, в зависимости от вашего проекта. Вы можете найти список связанных проблем и возможных решений по адресу: https://bitrise-io.github.io/devcenter/ios/known-xcode-issues/.

По ссылке решения, которые работают в большинстве случаев:

  • Попробуйте другую версию Xcode.
  • Попробуйте другое устройство-симулятор (например, вместо запуска теста на «iPhone 6» попробуйте его на «iPhone 6s Plus»)
  • Some users had success with splitting the tests into multiple Schemes, and running those separately, with separate Test steps.
  • Другие сообщили, что если вы добавите задержку после app.launch(), у Xcode/симулятора iOS может остаться достаточно времени для инициализации меток специальных возможностей, чтобы тесты пользовательского интерфейса могли правильно находить элементы по меткам специальных возможностей.

Связанные StackOverflow и другие ссылки на форуме:

person Viktor Benei    schedule 07.06.2016