Crawlix: Как AI-агенты тестируют ваш сайт словно настоящие пользователи и находят неочевидные баги
Устали от нестабильных UI-тестов? Узнайте, как новый инструмент Crawlix использует AI-агентов с разными личностями для автоматизированного тестирования веб-приложений, находя уникальные баги, которые пропускают традиционные методы.
Каждый, кто хоть раз писал UI-тесты с помощью Playwright или Cypress, знает эту боль: часы борьбы с селекторами, которые ломаются от малейшего изменения CSS-класса. Тесты превращаются во вторую кодовую базу, требующую постоянного обслуживания. Но самое неприятное — они проверяют только те сценарии, о которых вы уже подумали.
Реальные ошибки почти никогда не возникают на прописанных вами путях. Их находят пользователи, которые кликают не туда, пропускают инструкции, вводят нечто совершенно неожиданное в поля форм. Невозможно заранее предусмотреть каждое такое поведение и прописать для него скрипт.
Именно с этим вызовом столкнулся один разработчик, что побудило его создать инструмент под названием Crawlix. Его идея проста: что если вместо написания бесконечных скриптов вы просто описываете, что хотите протестировать, а кто-то другой (в данном случае — искусственный интеллект) сам разбирается, как это сделать?
Как это работает: армия AI-агентов на страже качества
Использование Crawlix удивительно интуитивно. Вы просто указываете URL вашего приложения и цель тестирования. Например, команда может выглядеть так: crawlix run --url https://myapp.com --goal "complete the signup flow" (завершить процесс регистрации).
После запуска Crawlix порождает несколько AI-агентов, работающих одновременно. Каждый из них обладает уникальной «личностью» и поведенческим профилем, определяющим его мышление и действия:
- Новичок (First-Timer): Никогда не видел ваше приложение. Ничего не читает, кликает на самое очевидное, путается в жаргоне, пробует большую кнопку первым делом.
- Нетерпеливый пользователь (Impatient user): Пропускает все инструкции, отправляет формы до их заполнения, кликает на кнопку «Отправить» несколько раз, если ничего не произошло мгновенно.
- Злоумышленник (Adversarial agent): Пытается внедрить SQL-инъекции в поля ввода, загружает файлы неверного типа, изменяет ID в URL, пытаясь получить доступ к данным других пользователей.
Кроме них есть еще три агента: Опытный пользователь (Power User), Иностранец (Non-Native Speaker) и Пользователь с медленным интернетом (Slow Network user).
Каждый агент открывает ваше приложение в реальном браузере, считывает видимые элементы интерфейса и принимает решение о следующем шаге, основываясь на своей личности. Никаких жестко закодированных селекторов, никаких предопределенных сценариев – только AI-персона, принимающая решения, как настоящий человек. Когда они находят что-то сломанное, запутанное или неожиданное, они записывают это как «находку» (критическая ошибка, предупреждение или информация). В конце AI генерирует полный отчет с выявленными закономерностями, предлагаемыми исправлениями и приоритетными рекомендациями.
Что оказалось самым сложным в разработке?
По словам автора, самым трудным было не интеграция AI, а научить агентов по-настоящему «понимать» страницу. Первоначальный подход, заключавшийся в передаче всего DOM-дерева в LLM, оказался неэффективным: 50 КБ HTML на каждом шаге — это дорого и медленно. Решение пришло в извлечении только интерактивных элементов в виде чистого нумерованного списка. Например: [01] кнопка: "Зарегистрироваться", [02] поле ввода: "Email" (email) name="email". Это всего около 2 КБ. LLM читает список, решает, с чем взаимодействовать, и возвращает JSON-действие. Адаптер выполняет его в Playwright. И так по кругу. Этот, казалось бы, простой цикл занял большую часть недели разработки.
Опыт применения: как Crawlix нашел "слепое пятно"
Автор протестировал Crawlix на собственном проекте, и тот обнаружил ошибку, которую он сам не замечал. Родительский div с z-index: 10 перехватывал события указателя на нескольких кнопках. Реальные пользователи кликали на эти кнопки, и ничего не происходило, но ошибка молча игнорировалась. Разработчик тестировал приложение десятки раз и никогда этого не замечал, потому что он «знал», куда нужно нажимать. А вот агент-злоумышленник, который ничего не знал о приложении, нашел эту проблему всего за 14 шагов. Это яркий пример того, почему тестирование с агентами, не знакомыми с вашим приложением, так ценно: они находят то, что вы перестали видеть.
Техническая сторона и будущее
Crawlix построен на TypeScript, использует Playwright для автоматизации браузера и Commander для CLI. Он поддерживает 8 различных LLM-провайдеров, включая Groq, Gemini, Cerebras, Mistral, OpenRouter, Ollama, OpenAI и Anthropic.
На данный момент Crawlix находится в версии v0.1. Он уже работает и успешно протестирован на многих реальных приложениях, включая DuckDuckGo, корректно выполняя навигацию, заполнение форм, клики по кнопкам и генерацию отчетов. Конечно, есть и "шероховатости". Например, разрешение элементов иногда дает сбои в приложениях с кастомными компонентами без правильных атрибутов доступности. А ограничение частоты запросов при очень длительных прогонах все еще может вызывать проблемы.
В планах у разработчика — адаптер API для тестирования REST-запросов без UI, а затем поддержка мобильных приложений через Appium.
Этот подход к тестированию идеально дополняет более широкие стратегии автоматизации, позволяя убедиться в качестве приложений, с которыми взаимодействуют ваши рабочие процессы, включая те, что построены с помощью n8n.
Попробуйте Crawlix в действии!
Если вас заинтересовал этот инструмент, вы можете установить его глобально и начать тестировать свои приложения. Если столкнетесь с проблемами, не стесняйтесь открывать issue на GitHub — вклад первых пользователей бесценен для любого open-source проекта:
Для установки: npm install -g crawlix
Настройка: crawlix setup
Запуск: crawlix run --url https://yourapp.com --goal "ваша цель здесь"
Исходный код и подробности можно найти на GitHub: github.com/m-taqii/crawlix