Инженеры Циана столкнулись с необычной проблемой: экран на базе Server-Driven UI содержал настолько глубокое дерево элементов, что XCUITest не мог выполнить даже обычный поиск текстового поля.
Причиной стали ограничения фреймворка:
🔹 Accessibility переставал создавать снапшоты примерно после 60 уровней вложенности;
🔹 NSXPC не справлялся с передачей слишком глубокого дерева;
🔹 стандартные
tap(), typeText() и поиск элементов завершались ошибками.Инженеры обошли ограничения с помощью приватных API XCTest. Дерево интерфейса стали получать частями, а затем объединять в собственную структуру. Для взаимодействия с контролами использовали прямую отправку синтезированных событий ввода в демон автоматизации — без публичного поиска элементов.
Результат:
✅ собрано дерево глубиной 143 уровня;
✅ найдены поля на глубине около 136 уровней;
✅ выполнены тапы и ввод текста;
✅ значения успешно проверены — тест прошёл.
Решение работает на Xcode 26.2 и предназначено исключительно для тестового бандла. Приватные API могут измениться после обновления Xcode, поэтому использовать такой подход в продакшене нельзя.
https://habr.com/ru/companies/cian/articles/1071034/
📲 Мы в MAX
👉 @developer_mobila
