Использование Claude для автоматизации тестирования мобильных приложений с помощью Capacitor WebViews

Разработчик описал, как он научил Claude выполнять автоматизированный контроль качества для мобильного приложения, созданного с помощью Capacitor. Приложение использует React, обёрнутый в нативные оболочки (WebView на Android, WKWebView на iOS) с архитектурой серверно-управляемого интерфейса, что позволяет одному кодовому базису работать на веб-платформах, iOS и Android.
Проблема тестирования и решение
Приложения на Capacitor находятся в пробеле тестирования: Playwright не может получить доступ к нативной оболочке, а XCTest и Espresso не могут взаимодействовать с HTML внутри WebViews. Разработчик создал Python-скрипт, который использует Claude для управления обеими мобильными платформами, делает скриншоты, анализирует их на наличие проблем и автоматически создаёт отчёты об ошибках.
Детали реализации для Android
Настройка Android заняла 90 минут. Ключевые шаги:
- Исправление подключения:
adb reverse tcp:3000 tcp:3000иadb reverse tcp:8080 tcp:8080(требует повторного запуска после перезапуска эмулятора) - Доступ к DevTools WebView: Найти сокет с помощью
adb shell "cat /proc/net/unix" | grep webview_devtools_remote - Перенаправление на локальный порт:
adb forward tcp:9223 localabstract:$WV_SOCKET - Полный доступ к Chrome DevTools Protocol через
curl http://localhost:9223/json
Скрипт проверяет все 25 экранов приложения примерно за 90 секунд, используя CDP для навигации и аутентификации (внедряя JWT в localStorage) и adb shell screencap для создания скриншотов.
Анализ и отчётность об ошибках
Скриншоты анализируются на визуальные проблемы: нарушенные макеты, сообщения об ошибках, отсутствующие изображения, пустые экраны и перекрытие строки состояния. При обнаружении проблем система:
- Аутентифицируется как zabriskie_bot
- Загружает скриншоты в S3
- Создаёт отчёты об ошибках в рабочем форуме в формате:
[Android QA] Shows Hub: RSVP button overlaps venue text
Система знает ожидаемые состояния: ответы "Forbidden" для не-членов на страницах команды не являются ошибками, пустые кружки аватаров не являются ошибками, а текст "Preview" в настройках профиля — это известная косметическая проблема.
Реализация для iOS
Настройка iOS заняла более шести часов, что подчёркивает различия в инструментах мобильной автоматизации. В статье отмечается этот контраст, но предоставляется меньше конкретных технических деталей о реализации iOS по сравнению с Android.
Развёртывание
Вся система контроля качества работает как запланированная задача каждое утро в 8:47.
📖 Read the full source: HN AI Agents
👀 Смотрите также

Плагин Claude Code Yoink заменяет зависимости библиотек для снижения рисков в цепочке поставок
Yoink — это плагин Claude Code, который устраняет сложные зависимости, перереализуя только необходимые функции, используя трёхэтапный рабочий процесс с командами /setup, /curate-tests и /decompose. В настоящее время поддерживается Python, а поддержка TypeScript и Rust находится в разработке.

Хеддл: Принудительное обеспечение доверия и ведение журнала аудита для подключений Claude Desktop MCP
Heddle — это инструмент с открытым исходным кодом, который добавляет уровни доверия, контроль доступа и журнал аудита к MCP-подключениям Claude Desktop, позволяя безопасно управлять несколькими сервисами через единый интерфейс с шестью стартовыми пакетами.

Фреймворк "Исследовательская команда в коробке" для Claude Code с использованием мультиагентной архитектуры
Разработчик создал многокомпонентный исследовательский фреймворк для Claude Code, который использует Opus 4.6 для координации специализированных агентов через плагин research-clab. Фреймворк разворачивается через управляемый процесс вопросов и ответов и включает 11 навыков, определения агентов и структурированные директории для управления сложными исследовательскими проектами.

Анамнез: Персональная система памяти для Claude через MCP
Anamnese — это бесплатный инструмент, который хранит личный контекст — факты, проекты, цели, задачи — и подключается к Claude через MCP, позволяя ИИ получать доступ к этой информации в начале каждого разговора.