Crawlix: Как AI-агенты тестируют ваш сайт словно настоящие пользователи и находят неочевидные баги

Устали от нестабильных UI-тестов? Узнайте, как новый инструмент Crawlix использует AI-агентов с разными личностями для автоматизированного тестирования веб-приложений, находя уникальные баги, которые пропускают традиционные методы.

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