Начало работы

Добро пожаловать в документацию BotFake! Эта страница содержит всю необходимую информацию для начала работы с системой автоматизированного тестирования Telegram ботов и веб-сайтов.

Быстрый старт

  1. Перейдите на страницу Тестирование
  2. Выберите тип теста (бот или сайт)
  3. Создайте или загрузите JSON сценарий
  4. Запустите тест и дождитесь результатов

🤖 Сгенерировать полноценный сценарий с помощью ИИ

Не знаете, как создать сценарий для тестирования? Опишите ваш сайт, API или GraphQL, и мы сгенерируем для вас готовый JSON сценарий в течение 2 дней!

Как это работает:

  1. Перейдите во вкладку "Запросы сценариев" в разделе веб-тестирования
  2. Заполните форму: укажите адрес сайта, API, GraphQL, страницу авторизации и документацию
  3. Отправьте запрос — администратор получит уведомление
  4. В течение 2 дней вы получите готовый JSON сценарий на email
  5. Примените сценарий в редактор или сохраните как шаблон одним кликом!

Детали функции "Запрос на генерацию сценария"

Эта функция позволяет получить профессионально составленный тестовый сценарий без необходимости изучать JSON формат и структуру сценариев BotFake.

Что нужно указать в запросе:

  • Адрес сайта — основной URL вашего веб-сайта (опционально)
  • Адрес API — URL вашего REST API (опционально)
  • Адрес GraphQL — URL вашего GraphQL endpoint (опционально)
  • Страница авторизации — URL страницы входа/регистрации (опционально)
  • Документация — ссылки на Swagger, API docs, или текстовое описание того, что нужно протестировать

Что вы получите:

  • ✅ Полноценный JSON сценарий с правильной структурой
  • ✅ Все необходимые шаги для тестирования вашего сайта/API
  • ✅ Настроенные таймауты и параметры
  • ✅ Готовый к использованию сценарий, который можно сразу запустить

После получения сценария:

  • Копировать — скопировать JSON в буфер обмена
  • Применить — автоматически загрузить сценарий в JSON редактор
  • Сохранить в шаблон — открыть конструктор шаблонов с загруженным сценарием для дальнейшего редактирования
Время обработки: Обычно сценарий готов в течение 2 дней. Вы получите email-уведомление, когда сценарий будет готов.

Тестирование Telegram ботов

Подключение Telegram аккаунта

Перед запуском сценариев Telegram бота авторизуйтесь в Telegram Web. Нажмите кнопку «Подключиться» в правом верхнем углу страницы /test, выполните вход (телефон, код, 2FA). После успешной авторизации индикатор в шапке станет зеленым. Если сессия истекла, повторите подключение, иначе действия с ботом будут завершаться ошибкой.

Основы

BotFake позволяет автоматизировать тестирование Telegram ботов через веб-интерфейс Telegram Web.

Типы действий

Доступны следующие типы действий для тестирования ботов:

1. send_message - Отправка сообщения

Отправляет текстовое сообщение боту.

{
  "id": "step-1",
  "action": "send_message",
  "data": {
    "text": "Hello"
  },
  "waitTime": 2000,
  "screenshot": true
}

Параметры data:

  • text (обязательно) - текст сообщения

2. send_photo - Отправка фото

Загружает и отправляет изображение боту.

{
  "id": "step-2",
  "action": "send_photo",
  "data": {
    "filePath": "./examples/test-data/sample-image.jpg"
  },
  "waitTime": 3000,
  "screenshot": true
}

Параметры data:

  • filePath (обязательно) - путь к изображению

Все действия

Список доступных действий

  • send_message - Отправка текстового сообщения
  • send_photo - Отправка изображения
  • send_document - Отправка документа
  • send_voice - Отправка голосового сообщения
  • send_video - Отправка видео
  • click_button - Клик по кнопке
  • wait - Ожидание
  • wait_for_message - Ожидание сообщения от бота
  • wait_for_photo - Ожидание фото от бота
  • navigate_to_bot - Переход к боту
  • screenshot - Сделать скриншот
  • api_request - Выполнение API запроса
  • chat_summary - Сбор всех сообщений чата и анализ через Ollama

3. send_document - Отправка документа

Загружает и отправляет документ боту (PDF, DOC, ZIP и т.д.).

{
  "id": "step-3",
  "action": "send_document",
  "data": {
    "filePath": "./examples/test-data/document.pdf"
  },
  "waitTime": 3000,
  "screenshot": true
}

Параметры data:

  • filePath (обязательно) - путь к файлу документа

4. send_voice - Отправка голосового сообщения

Загружает и отправляет голосовое сообщение (audio файл).

{
  "id": "step-4",
  "action": "send_voice",
  "data": {
    "filePath": "./examples/test-data/voice.ogg"
  },
  "waitTime": 3000,
  "screenshot": true
}

Параметры data:

  • filePath (обязательно) - путь к аудио файлу

5. send_video - Отправка видео

Загружает и отправляет видео файл боту.

{
  "id": "step-5",
  "action": "send_video",
  "data": {
    "filePath": "./examples/test-data/video.mp4"
  },
  "waitTime": 5000,
  "screenshot": true
}

Параметры data:

  • filePath (обязательно) - путь к видео файлу

6. click_button - Клик по кнопке

Нажимает на кнопку в интерфейсе бота (inline keyboard или обычная кнопка).

{
  "id": "step-6",
  "action": "click_button",
  "data": {
    "buttonText": "Начать"
  },
  "waitTime": 2000,
  "screenshot": true
}

Параметры data:

  • buttonText (обязательно) - текст на кнопке для поиска
  • buttonData (опционально) - callback_data кнопки для более точного поиска
  • selector (опционально) - CSS селектор для поиска кнопки

7. wait - Ожидание

Простое ожидание указанное количество миллисекунд.

{
  "id": "step-7",
  "action": "wait",
  "data": {
    "waitTime": 5000
  },
  "screenshot": false
}

Параметры data:

  • waitTime (обязательно) - время ожидания в миллисекундах

8. wait_for_message - Ожидание сообщения от бота

Ожидает получения сообщения от бота с проверкой содержимого.

{
  "id": "step-8",
  "action": "wait_for_message",
  "data": {
    "messagesCount": 1
  },
  "waitTime": 10000,
  "expectedResponse": {
    "type": "text",
    "contains": "привет",
    "timeout": 10000
  },
  "screenshot": true
}

Параметры data:

  • messagesCount (опционально) - количество сообщений для ожидания (по умолчанию 1)

Параметры expectedResponse:

  • type - тип ожидаемого сообщения: 'text', 'photo', 'document', 'button', 'sticker', 'voice', 'video'
  • contains - текст должен содержать указанную подстроку
  • equals - текст должен точно совпадать
  • regex - текст должен соответствовать регулярному выражению
  • timeout - максимальное время ожидания в миллисекундах

9. wait_for_photo - Ожидание фото от бота

Ожидает получения фотографии от бота.

{
  "id": "step-9",
  "action": "wait_for_photo",
  "data": {
    "messagesCount": 1
  },
  "waitTime": 10000,
  "expectedResponse": {
    "type": "photo",
    "timeout": 10000
  },
  "screenshot": true
}

10. navigate_to_bot - Переход к боту или группе

Выполняет поиск и переход к указанному боту или группе в Telegram Web. Поддерживает как боты (с @), так и групповые чаты (без @).

{
  "id": "step-10",
  "action": "navigate_to_bot",
  "data": {
    "username": "@my_bot"
  },
  "waitTime": 2000,
  "screenshot": true
}

Параметры data:

  • username (обязательно) - username бота (с @, например @my_bot) или название группы (без @, например My Group)
Поддержка групп: Если указано название без символа @, система автоматически определит это как групповой чат и выполнит поиск по названию группы. Это позволяет использовать chat_summary для анализа групповых диалогов.

11. screenshot - Сделать скриншот

Делает скриншот текущего состояния чата.

{
  "id": "step-13",
  "action": "screenshot",
  "data": {},
  "screenshot": true
}

12. api_request - Выполнение API запроса

Выполняет HTTP запрос к внешнему API и использует ответ для отправки сообщения боту. Поддерживает множественные циклы обмена сообщениями и управление сессиями LLM. Также поддерживает WebSocket (WSS/WS) для GraphQL запросов.

{
  "id": "step-4",
  "action": "api_request",
  "data": {
    "apiUrl": "https://brown-icons-report.loca.lt/v1/chat/completions",
    "apiMethod": "POST",
    "apiHeaders": {
      "Content-Type": "application/json"
    },
    "apiBody": {
      "user_id": "exus00036",
      "character": "Text_Tester",
      "messages": [{"role": "user", "content": "{{lastMessage}}"}],
      "max_tokens": 50
    },
    "apiTimeout": 120000,
    "apiDelay": 2000,
    "waitMessage": 5000,
    "responseField": "choices.0.message.content",
    "use_session": true,
    "messagesCount": 8
  },
  "waitTime": 5000,
  "screenshot": true
}

Параметры data:

  • apiUrl (обязательно) - URL API endpoint. Поддерживает HTTP/HTTPS (http://, https://) и WebSocket (ws://, wss://) для GraphQL запросов
  • apiMethod (обязательно) - метод HTTP: 'GET', 'POST', 'PUT', 'DELETE'. Для WebSocket запросов метод игнорируется
  • apiHeaders (опционально) - заголовки запроса (объект)
  • apiBody (опционально) - тело запроса (объект или строка JSON). При use_session=true обязательно укажите стабильный user_id, чтобы LLM могла идентифицировать пользователя
  • apiTimeout (опционально) - таймаут запроса в миллисекундах (по умолчанию 30000)
  • responseField (опционально) - путь к полю в JSON ответе для извлечения текста (например, \"choices.0.message.content\")
  • messagesCount (опционально) - количество циклов обмена сообщениями (по умолчанию 1). Каждый цикл: отправка ответа API боту → ожидание ответа → использование последнего сообщения в следующем запросе
  • apiDelay (опционально) - задержка (в миллисекундах) между отправкой ответа боту и следующим API запросом. Значение по умолчанию 2000 мс, можно увеличить до 60000 мс и более для ограничения частоты запросов.
  • waitMessage (опционально) - время ожидания ответа бота (в миллисекундах) перед продолжением сценария. По умолчанию 5000 мс.
  • use_session (опционально) - включает поддержку session_id, возвращаемого API. При включении бот сохранит session_id после первого запроса и будет автоматически подставлять его в дальнейшем. Это нужно для сохранения контекста: сервер LLM использует session_id, чтобы подгружать историю диалога и помнить контекст чата.
Важно: В apiBody можно использовать переменную {{lastMessage}}, которая будет заменена на последнее сообщение от бота перед каждым API запросом. При use_session=true второй и последующие запросы автоматически получают поле session_id от сервера.
Ответ API должен содержать: поле session_id, например \"session_id\": \"dd0369f7-7699-4bc3-8c10-f2a36edaa16b\". Если поле отсутствует, сессия не будет сохранена.
WebSocket поддержка для GraphQL: Для GraphQL запросов через WebSocket используйте URL с протоколом wss:// или ws://. Система автоматически определит протокол и установит WebSocket соединение. Поддерживаются протоколы graphql-ws (полная поддержка: connection_init, connection_ack, start, data, complete, stop, error) и прямые GraphQL запросы. Пример: "apiUrl": "wss://example.com/graphql" с apiBody в формате {"query": "...", "variables": {...}, "operationName": "..."}. Работает в Telegram и веб-тестах.
{
  "id": "step-graphql",
  "action": "api_request",
  "data": {
    "apiUrl": "wss://example.com/graphql",
    "apiMethod": "POST",
    "apiHeaders": {
      "Authorization": "Bearer token"
    },
    "apiBody": {
      "query": "query GetUser($id: ID!) { user(id: $id) { id name email } }",
      "variables": {
        "id": "123"
      },
      "operationName": "GetUser"
    },
    "apiTimeout": 10000,
    "responseField": "data.user.name"
  },
  "waitTime": 2000,
  "screenshot": false
}

Особенности GraphQL через WebSocket:

  • Автоматическая поддержка протокола graphql-ws с полным циклом сообщений
  • Обнаружение ошибок GraphQL (response.errors) с добавлением в findings
  • Поддержка responseField для извлечения вложенных полей (например, "data.user.name")
  • Поддержка переменных (variables) и имени операции (operationName)
  • Работает как в Telegram тестах, так и в веб-тестах

13. chat_summary - Анализ диалога через Ollama

Автоматически собирает все сообщения из чата, промотав диалог снизу вверх, и получает AI-анализ диалога через Ollama. Результат сохраняется в отчете.

{
  "id": "step-15",
  "action": "chat_summary",
  "data": {},
  "screenshot": true
}

Параметры data:

  • Параметры не требуются - действие работает автоматически

Как это работает:

  1. Скроллинг чата - система автоматически промотает весь диалог снизу вверх
  2. Сбор сообщений - собираются все сообщения с датами и никнеймами отправителей
  3. AI-анализ - весь диалог отправляется в OLLAMA_URL для получения саммари
  4. Результат - в отчете сохраняется полный диалог и AI-саммари

Результат в отчете:

  • 📊 Саммари от AI с анализом диалога (о чем был диалог, участники, краткий смысл)
  • 💬 Полный список всех сообщений (первые 20 и последние 5)
  • 🤖 Метаданные: имя бота, темы, длина диалога, дата анализа

Общие параметры шага

Каждый шаг сценария может содержать следующие общие параметры:

  • id (обязательно) - уникальный идентификатор шага
  • action (обязательно) - тип действия (см. список выше)
  • data (обязательно) - данные для действия (зависят от типа действия)
  • waitTime (опционально) - время ожидания после выполнения шага в миллисекундах
  • timeout (опционально) - максимальное время выполнения шага в миллисекундах
  • retries (опционально) - количество повторных попыток при ошибке
  • screenshot (опционально) - делать ли скриншот после выполнения шага (true/false)
  • expectedResponse (опционально) - ожидаемый ответ от бота (см. описание выше)

Полный пример сценария

Пример комплексного тестового сценария с использованием всех основных функций

{
  "id": "comprehensive-test",
  "name": "Complex test bot",
  "description": "Test with all bot features",
  "botUsername": "@example_bot",
  "timeout": 60000,
  "retries": 1,
  "steps": [
    {
      "id": "step-1",
      "action": "send_message",
      "data": {
        "text": "/start"
      },
      "waitTime": 2000,
      "screenshot": true
    },
    {
      "id": "step-2",
      "action": "wait_for_message",
      "data": {
        "messagesCount": 1
      },
      "expectedResponse": {
        "type": "text",
        "contains": "Hello"
      },
      "waitTime": 5000,
      "screenshot": true
    },
    {
      "id": "step-3",
      "action": "click_button",
      "data": {
        "buttonText": "Start"
      },
      "waitTime": 2000,
      "screenshot": true
    },
    {
      "id": "step-4",
      "action": "send_message",
      "data": {
        "text": "How are you?"
      },
      "waitTime": 2000,
      "screenshot": true
    },
    {
      "id": "step-5",
      "action": "api_request",
      "data": {
        "apiUrl": "https://api.example.com/v1/chat/completions",
        "apiMethod": "POST",
        "apiHeaders": {
          "Content-Type": "application/json"
        },
        "apiBody": {
          "user_id": "test_user",
          "messages": [
            {
              "role": "user",
              "content": "{{lastMessage}}"
            }
          ]
        },
        "responseField": "choices.0.message.content",
        "messagesCount": 3
      },
      "waitTime": 3000,
      "screenshot": true
    },
    {
      "id": "step-6",
      "action": "send_photo",
      "data": {
        "filePath": "./examples/test-data/sample-image.jpg"
      },
      "waitTime": 3000,
      "screenshot": true
    },
    {
      "id": "step-7",
      "action": "wait",
      "data": {
        "waitTime": 2000
      },
      "screenshot": false
    }
  ]
}

Тестирование веб-сайтов

Автоматическое тестирование

BotFake автоматически анализирует веб-сайт и генерирует тестовые сценарии на основе структуры сайта.

Типы тестов для сайтов:

  • Краулинг - автоматический обход всех страниц сайта (максимум 5 страниц)
  • Клик-тесты - автоматические клики по ссылкам и элементам меню
  • SEO анализ - комплексная проверка мета-тегов, заголовков, структуры, ссылок, sitemap, robots.txt
  • Метрики производительности - скорость загрузки, размер страницы, network throttling

Расширенный SEO анализ

BotFake выполняет комплексный SEO анализ веб-сайтов, включая:

  • Проверка ссылок (Broken Links) - автоматическая валидация всех внутренних и внешних ссылок с проверкой статус-кодов
  • Валидация Canonical URL - проверка абсолютности, доступности и правильности canonical тегов
  • Проверка Sitemap.xml - парсинг и валидация sitemap файлов (обычные и sitemap index)
  • Проверка Robots.txt - парсинг всех директив (User-agent, Disallow, Allow, Sitemap)
  • Анализ структуры URL - проверка длины, глубины, регистра, кириллицы, числовых ID
  • Проверка дублей контента - обнаружение дублирующихся title, description, H1 тегов и похожих блоков контента

Все результаты SEO анализа автоматически включаются в HTML отчеты с детальными метриками, проблемами и рекомендациями.

Расширенные метрики производительности

BotFake включает комплексный анализ производительности веб-сайтов:

Network Throttling (Эмуляция сетевых условий)

Эмуляция различных сетевых условий для тестирования производительности:

  • Предустановленные профили: offline, slow-3G, 3G, fast-3G, 4G
  • Кастомные настройки: downloadThroughput, uploadThroughput, latency
  • Использование: Автоматически применяется при тестировании или может быть настроено программно

CPU Throttling

Эмуляция медленного CPU для тестирования на слабых устройствах:

  • Настраиваемый коэффициент замедления (rate: 1 = без throttling, 2 = 2x медленнее)
  • Использует CDP команду Emulation.setCPUThrottlingRate

Memory Profiling

Детальное профилирование использования памяти:

  • Используемая память heap (usedJSHeapSize, totalJSHeapSize, jsHeapSizeLimit)
  • Количество DOM узлов и документов
  • Автоматически собирается при анализе производительности

Network Waterfall Analysis

Детальный анализ последовательности загрузки ресурсов:

  • Метрики для каждого ресурса: DNS, TCP, SSL, Request, Response, Transfer, Blocked time
  • Автоматическое определение блокирующих ресурсов (render-blocking CSS, blocking JS)
  • Использует Resource Timing API для точных измерений

Long Tasks Detection

Обнаружение задач, блокирующих main thread:

  • Обнаружение задач длительностью 50ms+
  • Детальная информация о контейнере (iframe, worker)
  • Использует Performance Observer API

JavaScript Bundle Analysis

Анализ размера и состава JS бандлов:

  • Размер каждого бандла (transferSize, decodedBodySize)
  • Анализ атрибутов загрузки (async, defer, module)
  • Автоматические рекомендации по оптимизации (code splitting, lazy loading)
Примечание: Все метрики производительности автоматически собираются и включаются в HTML отчеты с детальными графиками и рекомендациями.

Запуск теста сайта

  1. Перейдите на вкладку "Тестер сайтов"
  2. Введите URL сайта для тестирования
  3. Выберите режим (headless или с браузером)
  4. Нажмите "Запустить тест"
  5. Дождитесь завершения и просмотрите результаты
Подсказка: Headless режим работает быстрее, но без визуального отображения браузера.

Автоматическая генерация тестовых сценариев

BotFake может автоматически генерировать тестовые сценарии для веб-сайтов на основе их структуры. Это позволяет быстро создавать тесты без ручного написания JSON.

Нужен более сложный сценарий? Используйте функцию "Сгенерировать сценарий с помощью ИИ" — опишите ваш сайт, и администратор создаст для вас полноценный тестовый сценарий в течение 2 дней!

Как работает генератор:

  1. Анализ структуры сайта - BotFake автоматически анализирует HTML структуру страницы
  2. Обнаружение элементов - Находит ссылки, кнопки, формы и другие интерактивные элементы
  3. Генерация шагов - Создает автоматические шаги для кликов, навигации и проверок
  4. Создание сценария - Формирует готовый JSON сценарий, который можно использовать или редактировать

Использование генератора:

  1. Введите URL сайта в поле "Тестер сайтов"
  2. Нажмите "Запустить тест" - система автоматически сгенерирует сценарий
  3. Просмотрите сгенерированный сценарий в логах выполнения
  4. При необходимости отредактируйте сценарий для более точного тестирования
Преимущества: Автоматическая генерация экономит время и позволяет быстро начать тестирование новых сайтов.

Visual Regression Testing (Регрессионное тестирование)

Visual Regression Testing позволяет сравнивать скриншоты страниц с baseline (эталонными) изображениями для обнаружения визуальных изменений в UI.

Как это работает:

  • Baseline - эталонное изображение, сохраненное при первом запуске
  • Сравнение - каждый последующий запуск сравнивает текущий скриншот с baseline
  • Diff изображения - при обнаружении различий создается изображение с выделением измененных областей
  • Порог различий - настраиваемый порог для определения значимости изменений

Использование в сценариях:

Добавьте параметр visualRegression в шаг сценария:

{
  "id": "step-1",
  "action": "send_message",
  "data": { "text": "/start" },
  "screenshot": true,
  "visualRegression": {
    "baseline": false,
    "threshold": 0.1,
    "failOnDiff": true,
    "autoUpdateBaselineOnDimensionMismatch": false,
    "compareOverlappingArea": true,
    "ignoreAreas": [
      {
        "x": 0,
        "y": 0,
        "width": 100,
        "height": 50,
        "reason": "Ignore time area"
      }
    ]
  }
}

Параметры Visual Regression:

  • baseline - true для создания baseline при первом запуске, false для сравнения
  • threshold - порог различий от 0.0 до 1.0 (по умолчанию 0.1 = 0.1%)
  • failOnDiff - завершить тест с ошибкой при обнаружении различий (true/false)
  • ignoreAreas - массив областей для игнорирования при сравнении (x, y, width, height, reason)
  • autoUpdateBaselineOnDimensionMismatch - автоматически обновлять baseline при изменении размеров изображений (true/false, по умолчанию false)
  • compareOverlappingArea - сравнивать только пересекающиеся области при разных размерах изображений (true/false, по умолчанию false)

Работа с Baseline:

  1. Создание baseline - установите \"baseline\": true в первом запуске теста
  2. Сравнение - последующие запуски с \"baseline\": false будут сравниваться с baseline
  3. Обновление baseline - при необходимости обновите baseline, запустив тест с \"baseline\": true
  4. Автоматическое обновление baseline - установите \"autoUpdateBaselineOnDimensionMismatch\": true для автоматического обновления baseline при изменении размеров
  5. Просмотр результатов - Diff изображения сохраняются в папке screenshots/baseline/{userId}/

Обработка разных размеров изображений:

Если размеры текущего скриншота отличаются от baseline, доступны следующие опции:

  • Автоматическое обновление baseline - установите \"autoUpdateBaselineOnDimensionMismatch\": true для автоматического обновления baseline (рекомендуется для динамического контента)
  • Сравнение пересекающихся областей - установите \"compareOverlappingArea\": true для сравнения только общей части изображений (например, верхней области)
  • Предупреждение без сравнения - по умолчанию показывается предупреждение о несовпадении размеров без сравнения
Важно: Baseline изображения хранятся в screenshots/baseline/{userId}/. Не удаляйте их без необходимости!

Режимы тестирования веб-сайтов

BotFake поддерживает два режима тестирования веб-сайтов:

1. Автосценарий (по умолчанию)

AI автоматически анализирует сайт и генерирует тестовый сценарий на основе структуры и доступных элементов.

  • ✅ Быстрый старт без ручной настройки
  • ✅ Автоматическое обнаружение форм, кнопок, ссылок
  • ✅ Интеллектуальная генерация тестовых шагов
  • ✅ Подходит для первичного анализа сайта

2. Редактор сценариев (ручной режим)

Создавайте собственные сценарии тестирования с точным контролем каждого шага.

  • ✅ Полный контроль над действиями и селекторами
  • ✅ Использование готовых веб-шаблонов
  • ✅ Редактирование JSON сценариев
  • ✅ Подходит для регрессионного тестирования

Переключение режима: Используйте тумблер «Режим тестирования» в форме настроек теста.

Новые действия для веб-тестирования

Доступны специальные действия для детального тестирования веб-сайтов:

1. web_navigate - Навигация на URL

Открывает указанный URL в браузере.

{
  "id": "step-1",
  "action": "web_navigate",
  "data": {
    "url": "https://example.com"
  },
  "screenshot": true
}

2. web_click - Клик по элементу

Находит элемент по CSS селектору и выполняет клик.

{
  "id": "step-2",
  "action": "web_click",
  "data": {
    "buttonSelector": "button.primary-btn",
    "waitForSelector": ".success-message",
    "waitTime": 1000,
    "clickOptions": {
      "button": "left",
      "clickCount": 1,
      "delay": 100
    }
  },
  "screenshot": true
}

Параметры:

  • buttonSelector - CSS селектор элемента для клика (обязательно)
  • waitForSelector - Селектор элемента, появление которого нужно ждать после клика
  • waitTime - Задержка после клика в мс (по умолчанию 1000)
  • selectorTimeout - Время ожидания появления элемента в мс (по умолчанию 10000)
  • clickOptions - Дополнительные опции клика (button, clickCount, delay, force)

3. web_click_submenu - Клик по подменю

Наводит курсор на родительский элемент меню, затем кликает по элементу подменю.

{
  "id": "step-3",
  "action": "web_click_submenu",
  "data": {
    "submenuParentSelector": "nav .catalog-menu",
    "submenuSelector": "nav .catalog-menu .category-electronics",
    "waitTime": 1000
  },
  "screenshot": true
}

Параметры:

  • submenuParentSelector - Селектор родительского элемента меню (обязательно)
  • submenuSelector - Селектор элемента подменю для клика (обязательно)
  • waitTime - Задержка после наведения перед кликом в мс (по умолчанию 1000)

4. web_login - Авторизация на сайте

Автоматически заполняет и отправляет форму входа.

{
  "id": "step-4",
  "action": "web_login",
  "data": {
    "username": "test@example.com",
    "password": "SecurePassword123",
    "loginSelectors": {
      "username": "input[name='email']",
      "password": "input[name='password']",
      "submit": "button[type='submit']"
    },
    "loginTimeout": 10000
  },
  "screenshot": true
}

Параметры:

  • username - Логин/email пользователя (обязательно)
  • password - Пароль пользователя (обязательно)
  • loginSelectors - Кастомные CSS селекторы для полей формы (опционально)
  • loginTimeout - Таймаут ожидания элементов формы в мс (по умолчанию 30000)

Автоматические селекторы по умолчанию:

  • Username: input[type=\"text\"], input[type=\"email\"], input[name=\"username\"], input[name=\"email\"]
  • Password: input[type=\"password\"], input[name=\"password\"]
  • Submit: button[type=\"submit\"], input[type=\"submit\"], button:has-text(\"Login\"), button:has-text(\"Sign in\")

5. web_fill_form - Заполнение формы

Заполняет несколько полей формы и опционально отправляет её.

{
  "id": "step-5",
  "action": "web_fill_form",
  "data": {
    "formFields": [
      {
        "selector": "input[name='name']",
        "value": "Иван Тестовый",
        "type": "text"
      },
      {
        "selector": "input[name='email']",
        "value": "test@example.com",
        "type": "email"
      },
      {
        "selector": "input[name='phone']",
        "value": "+7 (999) 123-45-67",
        "type": "text"
      },
      {
        "selector": "input[name='agree']",
        "value": "true",
        "type": "checkbox"
      },
      {
        "selector": "select[name='country']",
        "value": "RU",
        "type": "select"
      }
    ],
    "formSubmitSelector": "button[type='submit']",
    "waitTime": 500
  },
  "screenshot": true
}

Параметры:

  • formFields - Массив полей для заполнения (обязательно). Каждое поле может содержать:
    • selector - CSS селектор поля (обязательно)
    • value - Значение для заполнения (обязательно)
    • type - Тип поля: text, email, password, number, select, checkbox, radio
    • required - Проверять обязательность поля (по умолчанию проверяется атрибут required)
    • pattern - Regex паттерн для валидации значения
    • min - Минимальное значение для числовых полей
    • max - Максимальное значение для числовых полей
    • minLength - Минимальная длина для текстовых полей
    • maxLength - Максимальная длина для текстовых полей
  • formSubmitSelector - Селектор кнопки отправки формы (опционально)
  • waitTime - Задержка между заполнением полей в мс (по умолчанию 500)
  • validateForm - Включить валидацию полей перед отправкой (по умолчанию false)
  • checkErrorMessages - Проверять сообщения об ошибках после отправки (по умолчанию false)
  • errorMessageSelectors - Массив селекторов для поиска сообщений об ошибках (например, [".error", ".invalid-feedback"])
  • expectedErrors - Массив ожидаемых сообщений об ошибках (для проверки валидации)
  • waitForSuccess - Ожидать индикатор успешной отправки (по умолчанию false)
  • successSelector - Селектор элемента, указывающего на успешную отправку
  • expectedUrl - Ожидаемый URL после отправки формы (для проверки редиректа)

Пример с валидацией:

{
  "id": "step-5-validated",
  "action": "web_fill_form",
  "data": {
    "formFields": [
      {
        "selector": "input[name='email']",
        "value": "test@example.com",
        "type": "email",
        "required": true,
        "pattern": "^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$"
      },
      {
        "selector": "input[name='age']",
        "value": "25",
        "type": "number",
        "min": 18,
        "max": 100
      },
      {
        "selector": "input[name='password']",
        "value": "SecurePass123",
        "type": "password",
        "minLength": 8,
        "maxLength": 50
      }
    ],
    "formSubmitSelector": "button[type='submit']",
    "validateForm": true,
    "checkErrorMessages": true,
    "errorMessageSelectors": [".error", ".invalid-feedback", "[role='alert']"],
    "waitForSuccess": true,
    "successSelector": ".success-message",
    "expectedUrl": "/success",
    "waitTime": 500
  },
  "screenshot": true
}

Пример с проверкой ошибок валидации:

{
  "id": "step-5-error-check",
  "action": "web_fill_form",
  "data": {
    "formFields": [
      {
        "selector": "input[name='email']",
        "value": "invalid-email",
        "type": "email"
      }
    ],
    "formSubmitSelector": "button[type='submit']",
    "checkErrorMessages": true,
    "errorMessageSelectors": [".error-message"],
    "expectedErrors": ["Некорректный email", "Invalid email"],
    "waitTime": 500
  },
  "screenshot": true
}
Важно: При включении validateForm система проверяет все поля перед отправкой формы. Если найдены ошибки валидации, форма не будет отправлена. При включении checkErrorMessages система автоматически ищет сообщения об ошибках после отправки формы, используя указанные селекторы или стандартные селекторы (.error, .invalid-feedback, [role=\"alert\"]).

6. web_scroll_screenshot - Скролл с скриншотами

Прокручивает страницу сверху вниз с автоматическим созданием скриншотов каждого экрана.

{
  "id": "step-6",
  "action": "web_scroll_screenshot",
  "data": {
    "scrollStep": 800,
    "scrollDelay": 500,
    "screenshotFullPage": false
  },
  "screenshot": true
}

Параметры:

  • scrollStep - Количество пикселей для прокрутки за один шаг (по умолчанию 800)
  • scrollDelay - Задержка между шагами прокрутки в мс (по умолчанию 500)
  • screenshotFullPage - Делать полный скриншот страницы или только видимой области

Применение: Идеально подходит для создания полного превью лендингов и длинных страниц.

7. web_wait - Ожидание

Простая пауза между действиями.

{
  "id": "step-7",
  "action": "web_wait",
  "data": {
    "waitTime": 2000
  }
}

8. web_screenshot - Создание скриншота

Делает скриншот текущего состояния страницы.

{
  "id": "step-8",
  "action": "web_screenshot",
  "data": {
    "screenshotFullPage": true
  }
}

9. crawler - Многоуровневый обход сайта

Автоматически обходит все страницы сайта, собирая ссылки и анализируя структуру с настраиваемой глубиной вложенности.

{
  "id": "step-9",
  "action": "crawler",
  "data": {
    "startUrl": "https://example.com",
    "crawlerMaxDepth": 3,
    "crawlerMaxPages": 50,
    "crawlerTimeout": 15000,
    "crawlerSameDomain": true,
    "crawlerFollowExternalLinks": false,
    "crawlerRespectRobots": true,
    "crawlerTestPages": true,
    "crawlerDelay": 1000,
    "crawlerScreenshotPerPage": true
  },
  "screenshot": true
}

Параметры:

  • startUrl - URL для начала обхода (опционально, используется текущий URL)
  • crawlerMaxDepth - Максимальная глубина вложенности (по умолчанию 2)
  • crawlerMaxPages - Максимальное количество страниц для обхода (по умолчанию 20)
  • crawlerTimeout - Таймаут загрузки каждой страницы в мс (по умолчанию 15000)
  • crawlerSameDomain - Обходить только страницы того же домена (по умолчанию true)
  • crawlerFollowExternalLinks - Следовать внешним ссылкам (по умолчанию false). Если true, краулер будет обходить ссылки на другие домены. Внимание: это может привести к обходу всего интернета, используйте с осторожностью!
  • crawlerRespectRobots - Учитывать robots.txt (по умолчанию true)
  • crawlerTestPages - Тестировать каждую найденную страницу на ошибки (по умолчанию false)
  • crawlerDelay - Задержка между запросами в мс для предотвращения перегрузки (по умолчанию 1000)
  • crawlerScreenshotPerPage - Делать скриншот для каждой обойденной страницы (по умолчанию false). Скриншоты отображаются в отчете под информацией о каждой странице.

Применение: Идеально для полного аудита сайта, проверки всех страниц на работоспособность, поиска битых ссылок и анализа структуры навигации.

Примечание: Crawler автоматически учитывает robots.txt и добавляет задержки между запросами, чтобы не перегружать целевой сервер.
Важно: По умолчанию crawlerFollowExternalLinks=false, что означает, что краулер будет пропускать ссылки на другие домены. Это нормальное поведение и не является ошибкой. Если вы видите сообщение \"внешняя ссылка (followExternalLinks=false)\" в логах - это информационное сообщение о том, что ссылка была пропущена. Если вам нужно обходить внешние ссылки, установите crawlerFollowExternalLinks: true, но будьте осторожны - это может привести к обходу всего интернета!

10. security - Security Scan (базовый набор)

Запускает комплексное сканирование сайта на распространённые уязвимости из OWASP Top 10: SSL/TLS, заголовки безопасности, XSS, SQL Injection, Path Traversal, анализ cookie, CORS и др.

{
  "id": "step-10",
  "action": "security",
  "data": {
    "startUrl": "https://example.com/login",
    "securityChecks": [
      "ssl",
      "headers",
      "info-disclosure",
      "cors",
      "clickjacking",
      "rate-limit",
      "open-redirect",
      "xss",
      "sqli",
      "path-traversal",
      "crypto",
      "csrf",
      "session-management",
      "jwt",
      "oauth",
      "csp",
      "sri"
    ],
    "securityDepth": "standard",
    "securityMaxPayloads": 60,
    "securityIncludeProof": true,
    "securityStopOnCritical": true
  }
}

Параметры:

  • startUrl — начальный URL (опционально, по умолчанию используется текущий адрес теста)
  • securityChecks — список включённых проверок (см. ниже)
  • securityDepth — интенсивность сканирования: basic, standard, aggressive
  • securityMaxPayloads — ограничение на количество payload в XSS/SQLi тестах (по умолчанию 50)
  • securityIncludeProof — сохранять ли сниппеты-доказательства в отчёт
  • securityStopOnCritical — остановка сканирования при первой критической уязвимости

UI: конфигуратор Security Scan вынесен в отдельный блок с двухколоночной сеткой чекбоксов, компактным дизайном и кастомными тултипами без Bootstrap.

Логи: на вкладке результатов показывается прогресс по payload'ам, время каждой проверки и итоговая сводка (критические/высокие/средние находки, общее число проверок).

Что проверяется:

  • SSL/TLS: валидность сертификата, версия TLS, redirect HTTP→HTTPS, HSTS, смешанный контент.
  • Security Headers: наличие CSP, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Strict-Transport-Security, Permissions-Policy и др.
  • Information Disclosure: открытые конфиги (.env, config.php), backup-файлы, directory listing, версии ПО, debug-страницы, stacktrace.
  • XSS (Phase 2): 18+ Reflected/DOM payload'ов (скрипты, события, DOM-инъекции, iframes, embed и т.д.).
  • SQL Injection (Phase 2): классические, union-, error- и time-based payload'ы (в т.ч. WAITFOR DELAY, ORDER BY).
  • Path Traversal (Phase 2): чтение системных и конфигурационных файлов, URL/double-encoded и Windows пути.
  • CORS: wildcard + credentials, null origin, отражённые origin, небезопасные протоколы.
  • Clickjacking: защита от iframe (X-Frame-Options, CSP frame-ancestors).
  • Rate Limiting: throttling на логин/регистрацию, наличие капчи, блокировка после N попыток.
  • Open Redirect: редирект-параметры (https, data URI, javascript:, \\evil.com и пр.).
  • Crypto & Cookies (Phase 2): флаги Secure/HttpOnly, политика SameSite, наличие HSTS.
  • CSRF Protection: проверка наличия CSRF токенов, SameSite cookies, проверка Origin/Referer заголовков, тестирование endpoint'ов на уязвимость к CSRF атакам.
  • Session Management: проверка предсказуемости session ID, наличие HttpOnly/Secure флагов, timeout сессий, безопасное хранение session ID.
  • JWT Token Security: проверка алгоритмов подписи, наличие времени истечения (exp), безопасное хранение токенов, проверка на передачу токенов через URL.
  • OAuth Flow Security: проверка наличия state параметра, валидация redirect_uri, использование HTTPS для callback, проверка на open redirect уязвимости.
  • Content Security Policy (CSP): проверка наличия CSP заголовка, валидация директив, проверка на небезопасные значения (unsafe-inline, unsafe-eval), наличие важных директив.
  • Subresource Integrity (SRI): проверка наличия integrity атрибутов у внешних скриптов и стилей, валидация формата хешей (sha256, sha384, sha512).
Важно: Запускайте Security Scan только на ресурсах, тестирование которых вам разрешено. В режиме aggressive количество запросов возрастает и может вызвать срабатывание WAF/IDS.

11. seo_analysis - Расширенный SEO анализ

Запускает комплексный SEO анализ страницы, включая проверку broken links, canonical URLs, sitemap.xml, robots.txt, анализ структуры URL и проверку дублей контента.

{
  "id": "step-11",
  "action": "seo_analysis",
  "data": {}
}

Параметры:

  • Не требует дополнительных параметров - анализ выполняется автоматически для текущей страницы

Что проверяется:

  • Проверка внутренних и внешних ссылок (broken links)
  • Валидация canonical URLs
  • Проверка sitemap.xml
  • Проверка robots.txt
  • Анализ структуры URL
  • Проверка дублей контента

Применение: Используйте для полного SEO аудита страницы. Результаты автоматически включаются в отчет с детальными метриками и рекомендациями.

12. network_throttling - Эмуляция сетевых условий

Устанавливает эмуляцию различных сетевых условий для тестирования производительности на медленных соединениях.

{
  "id": "step-12",
  "action": "network_throttling",
  "data": {
    "networkThrottlingProfile": "3G"
  }
}

Параметры:

  • networkThrottlingProfile - Профиль сети: \"offline\", \"slow-3G\", \"3G\", \"fast-3G\", \"4G\", \"custom\" (по умолчанию \"3G\")
  • networkThrottlingCustom - Кастомные настройки (только для profile=\"custom\"):
    • downloadThroughput - Скорость загрузки в bytes per second
    • uploadThroughput - Скорость отдачи в bytes per second
    • latency - Задержка в миллисекундах
  • disableNetworkThrottling - Отключить throttling (установить в true)

Пример с кастомными настройками:

{
  "id": "step-12-custom",
  "action": "network_throttling",
  "data": {
    "networkThrottlingProfile": "custom",
    "networkThrottlingCustom": {
      "downloadThroughput": 262144,
      "uploadThroughput": 131072,
      "latency": 100
    }
  }
}

Применение: Используйте перед тестированием производительности для эмуляции медленных сетей. Throttling применяется ко всем последующим запросам до отключения.

13. cpu_throttling - Эмуляция медленного CPU

Устанавливает эмуляцию медленного CPU для тестирования производительности на слабых устройствах.

{
  "id": "step-13",
  "action": "cpu_throttling",
  "data": {
    "cpuThrottlingRate": 2
  }
}

Параметры:

  • cpuThrottlingRate - Коэффициент замедления: 1 = без throttling, 2 = в 2 раза медленнее, 4 = в 4 раза медленнее и т.д. (по умолчанию 2)
  • disableCPUThrottling - Отключить throttling (установить в true)

Применение: Используйте для тестирования производительности на слабых устройствах. Throttling применяется ко всем JavaScript операциям до отключения.

14. performance_analysis - Анализ производительности

Собирает комплексные метрики производительности страницы, включая memory profiling, network waterfall, long tasks detection и JavaScript bundle analysis.

{
  "id": "step-14",
  "action": "performance_analysis",
  "data": {}
}

Параметры:

  • Не требует дополнительных параметров - анализ выполняется автоматически

Что собирается:

  • Core Web Vitals: FCP, LCP, TTI, CLS, TBT
  • Memory Profiling: usedJSHeapSize, totalJSHeapSize, jsHeapSizeLimit, nodesCount, documentsCount
  • Network Waterfall: Детальные метрики для каждого ресурса (DNS, TCP, SSL, Request, Response, Transfer, Blocked time)
  • Long Tasks Detection: Обнаружение задач, блокирующих main thread на 50ms+
  • JavaScript Bundle Analysis: Размер, тип, async/defer/module атрибуты, рекомендации по оптимизации

Применение: Используйте для полного анализа производительности страницы. Результаты автоматически включаются в отчет с детальными метриками и рекомендациями.

Примечание: Для более точных результатов рекомендуется установить network throttling перед запуском анализа производительности.

15. accessibility - Анализ доступности (a11y)

Выполняет комплексный анализ доступности страницы согласно стандартам WCAG (Web Content Accessibility Guidelines).

{
  "id": "step-15",
  "action": "accessibility",
  "data": {}
}

Параметры:

  • Не требует дополнительных параметров - анализ выполняется автоматически

Что проверяется:

  • ARIA атрибуты: Проверка наличия доступных имен для интерактивных элементов, валидность ARIA roles
  • Alt-тексты для изображений: Обнаружение изображений без alt атрибутов или с пустыми alt
  • Семантическая разметка: Проверка наличия семантических тегов (header, nav, main, footer)
  • Иерархия заголовков: Проверка правильной последовательности h1-h6, отсутствие пропущенных уровней
  • Формы: Проверка наличия label для полей формы, aria-required для обязательных полей
  • Навигация с клавиатуры: Проверка tabindex, доступности элементов с role для клавиатурной навигации
  • axe-core интеграция: Автоматический запуск axe-core для дополнительных проверок
  • Lighthouse интеграция: Автоматический запуск Lighthouse accessibility audit для комплексной проверки

Результаты:

  • Оценка доступности (0-100 баллов) с комбинированием результатов (70% наш анализ + 30% Lighthouse)
  • WCAG уровень соответствия (AAA, AA, A, F)
  • Детальный список проблем с рекомендациями
  • Результаты axe-core анализа (если доступно)
  • Результаты Lighthouse accessibility audit (если доступно)

Применение: Используйте для проверки соответствия сайта стандартам доступности WCAG. Результаты автоматически включаются в отчет с детальными метриками и рекомендациями.

Примечание: Анализ доступности включает интеграцию с axe-core и Lighthouse для более глубокой проверки. Если эти инструменты не загрузятся, анализ все равно выполнится с базовыми проверками.

16. mobile_device - Эмуляция мобильного устройства

Эмулирует различные мобильные устройства (iPhone, Android, планшеты) с правильными viewport размерами, User-Agent и device scale factor.

{
  "id": "step-16",
  "action": "mobile_device",
  "data": {
    "deviceName": "iPhone 13"
  }
}

Параметры:

  • deviceName - Название устройства. Доступные значения:
    • 'iPhone 13' - iPhone 13 (390x844, scale 3x)
    • 'iPhone 13 Pro' - iPhone 13 Pro (390x844, scale 3x)
    • 'iPhone 12' - iPhone 12 (390x844, scale 3x)
    • 'iPhone 11' - iPhone 11 (414x896, scale 2x)
    • 'iPhone SE' - iPhone SE (375x667, scale 2x)
    • 'iPhone 8' - iPhone 8 (375x667, scale 2x)
    • 'iPad Pro' - iPad Pro (1024x1366, scale 2x)
    • 'iPad Air' - iPad Air (820x1180, scale 2x)
    • 'iPad Mini' - iPad Mini (768x1024, scale 2x)
    • 'Galaxy S21' - Samsung Galaxy S21 (360x800, scale 3x)
    • 'Galaxy S20' - Samsung Galaxy S20 (360x800, scale 3x)
    • 'Galaxy Note 20' - Samsung Galaxy Note 20 (412x915, scale 3x)
    • 'Pixel 5' - Google Pixel 5 (393x851, scale 2.75x)
    • 'Pixel 4' - Google Pixel 4 (393x851, scale 3x)
    • 'Nexus 10' - Google Nexus 10 (800x1280, scale 2x)
    • 'Nexus 7' - Google Nexus 7 (600x960, scale 2x)
    • 'custom' - Кастомное устройство (требует указания параметров viewport вручную)
  • viewportWidth (для custom) - Ширина viewport в пикселях
  • viewportHeight (для custom) - Высота viewport в пикселях
  • deviceScaleFactor (для custom) - Коэффициент масштабирования устройства (1-4)
  • isMobile (для custom) - Является ли устройство мобильным
  • hasTouch (для custom) - Поддержка touch событий

Доступные устройства:

  • iPhone: iPhone 13, iPhone 13 Pro, iPhone 12, iPhone 11, iPhone SE, iPhone 8
  • iPad: iPad Pro, iPad Air, iPad Mini
  • Android: Galaxy S21, Galaxy S20, Galaxy Note 20, Pixel 5, Pixel 4, Nexus 10, Nexus 7
  • Custom: Произвольное устройство с указанием параметров вручную

Применение: Используйте для тестирования responsive design и мобильной версии сайта. Устройство эмулируется с правильными размерами экрана и User-Agent.

17. viewport - Установка viewport

Устанавливает произвольный размер viewport для тестирования на разных разрешениях экрана.

{
  "id": "step-17",
  "action": "viewport",
  "data": {
    "viewportWidth": 1920,
    "viewportHeight": 1080,
    "deviceScaleFactor": 1,
    "isMobile": false,
    "hasTouch": false
  }
}

Параметры:

  • viewportWidth - Ширина viewport в пикселях (обязательно)
  • viewportHeight - Высота viewport в пикселях (обязательно)
  • deviceScaleFactor - Коэффициент масштабирования (по умолчанию 1)
  • isMobile - Является ли устройство мобильным (по умолчанию false)
  • hasTouch - Поддержка touch событий (по умолчанию false)

Применение: Используйте для тестирования responsive design на конкретных разрешениях экрана без эмуляции полного устройства.

18. orientation - Ориентация экрана

Изменяет ориентацию экрана между portrait (вертикальная) и landscape (горизонтальная).

{
  "id": "step-18",
  "action": "orientation",
  "data": {
    "orientation": "landscape"
  }
}

Параметры:

  • orientation - Ориентация экрана: \"portrait\" (вертикальная) или \"landscape\" (горизонтальная)

Применение: Используйте для тестирования адаптации сайта к разным ориентациям экрана. Размеры viewport автоматически меняются местами.

19. touch_swipe - Жест swipe (свайп)

Выполняет жест свайпа в указанном направлении. Полезно для тестирования мобильных интерфейсов с жестами.

{
  "id": "step-19",
  "action": "touch_swipe",
  "data": {
    "swipeDirection": "up",
    "swipeDistance": 300,
    "swipeDuration": 300
  }
}

Параметры:

  • swipeDirection - Направление свайпа: \"up\", \"down\", \"left\", \"right\"
  • swipeDistance - Расстояние свайпа в пикселях (по умолчанию 300)
  • swipeDuration - Длительность жеста в миллисекундах (по умолчанию 300)

Применение: Используйте для тестирования мобильных интерфейсов с поддержкой жестов (карусели, слайдеры, навигация свайпом).

20. touch_pinch - Жест pinch (масштабирование)

Выполняет жест pinch-to-zoom для увеличения или уменьшения масштаба страницы.

{
  "id": "step-20",
  "action": "touch_pinch",
  "data": {
    "pinchType": "zoomIn",
    "pinchScale": 1.5
  }
}

Параметры:

  • pinchType - Тип жеста: \"zoomIn\" (увеличить) или \"zoomOut\" (уменьшить)
  • pinchScale - Коэффициент масштабирования (по умолчанию 1.5)

Применение: Используйте для тестирования поведения сайта при масштабировании (zoom in/out) на мобильных устройствах.

21. touch_tap - Касание (tap)

Выполняет касание (tap) в указанных координатах. Полезно для тестирования мобильных интерфейсов.

{
  "id": "step-21",
  "action": "touch_tap",
  "data": {
    "tapX": 100,
    "tapY": 100,
    "tapCount": 1
  }
}

Параметры:

  • tapX - X координата касания в пикселях (обязательно)
  • tapY - Y координата касания в пикселях (обязательно)
  • tapCount - Количество тапов (по умолчанию 1, максимум 5 для двойного/тройного тапа)

Применение: Используйте для тестирования мобильных интерфейсов, где нужно точно указать координаты касания. Альтернатива web_click для touch устройств.

20. api_test - Тестирование REST API

Выполняет HTTP запрос к API endpoint и валидирует ответ.

{
  "id": "step-api-1",
  "action": "api_test",
  "data": {
    "apiEndpoint": "/api/users",
    "apiMethod": "GET",
    "apiHeaders": {
      "Content-Type": "application/json",
      "Authorization": "Bearer token123"
    },
    "apiQueryParams": {
      "page": 1,
      "limit": 10
    },
    "expectedStatus": 200,
    "apiTimeout": 30000,
    "apiAuthType": "bearer",
    "apiAuthToken": "your-jwt-token",
    "validateSchema": true,
    "expectedResponseSchema": {
      "type": "object",
      "required": ["users", "total"],
      "properties": {
        "users": { "type": "array" },
        "total": { "type": "number" }
      }
    }
  }
}

Параметры:

  • apiEndpoint - API endpoint URL (обязательно, может быть относительным или абсолютным)
  • apiMethod - HTTP метод: GET, POST, PUT, DELETE, PATCH (по умолчанию GET)
  • apiHeaders - Заголовки запроса (JSON объект)
  • apiBody - Тело запроса (JSON объект или строка, для POST/PUT/PATCH)
  • apiQueryParams - Query параметры (JSON объект)
  • expectedStatus - Ожидаемый HTTP статус-код или массив кодов (по умолчанию [200, 201, 204])
  • apiTimeout - Таймаут запроса в миллисекундах (по умолчанию 30000)
  • apiAuthType - Тип аутентификации: none, bearer, basic, apikey (по умолчанию none)
  • apiAuthToken - Токен для Bearer или API Key аутентификации
  • apiAuthUsername - Имя пользователя для Basic Auth
  • apiAuthPassword - Пароль для Basic Auth
  • apiAuthHeaderName - Имя заголовка для API Key (по умолчанию X-API-Key)
  • followRedirects - Следовать редиректам (по умолчанию true)
  • validateSchema - Валидировать JSON схему ответа (по умолчанию false)
  • expectedResponseSchema - JSON схема для валидации ответа
  • validateHeaders - Объект с ожидаемыми заголовками ответа (ключ - имя заголовка, значение - строка или RegExp)

Примеры использования:

  • GET запрос с query параметрами:
    {
      "action": "api_test",
      "data": {
        "apiEndpoint": "/api/users",
        "apiMethod": "GET",
        "apiQueryParams": { "page": 1, "limit": 20 },
        "expectedStatus": 200
      }
    }
  • POST запрос с аутентификацией:
    {
      "action": "api_test",
      "data": {
        "apiEndpoint": "/api/users",
        "apiMethod": "POST",
        "apiBody": { "name": "John", "email": "john@example.com" },
        "apiAuthType": "bearer",
        "apiAuthToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
        "expectedStatus": 201
      }
    }
  • Валидация схемы ответа:
    {
      "action": "api_test",
      "data": {
        "apiEndpoint": "/api/users/1",
        "apiMethod": "GET",
        "validateSchema": true,
        "expectedResponseSchema": {
          "type": "object",
          "required": ["id", "name", "email"],
          "properties": {
            "id": { "type": "number" },
            "name": { "type": "string" },
            "email": { "type": "string", "format": "email" }
          }
        }
      }
    }

Автоматическое использование cookies: Если перед API тестом выполнен web_login или другая авторизация через браузер, cookies из браузера автоматически передаются в API запросы. Это позволяет тестировать авторизованные endpoints без необходимости явно указывать токены в заголовках.

Пример с авторизацией через браузер:

{
  "steps": [
    {
      "id": "step-1",
      "action": "web_navigate",
      "data": { "url": "https://example.com/login" }
    },
    {
      "id": "step-2",
      "action": "web_login",
      "data": {
        "username": "user@example.com",
        "password": "password123"
      }
    },
    {
      "id": "step-3",
      "action": "api_test",
      "data": {
        "apiEndpoint": "/api/user/profile",
        "apiMethod": "GET",
        "expectedStatus": 200
      }
    }
  ]
}

Применение: Используйте для тестирования REST API endpoints, проверки корректности ответов, валидации схем данных и тестирования различных сценариев аутентификации. Результаты тестирования сохраняются в apiTestResults и отображаются в отчете.

WebSocket поддержка через api_request: Для тестирования GraphQL API через WebSocket (WSS/WS) используйте действие api_request вместо api_test. Укажите URL с протоколом wss:// или ws:// в параметре apiUrl. Система автоматически определит протокол и установит WebSocket соединение с полной поддержкой протокола graphql-ws. См. раздел api_request для подробностей.

21. graphql_test - Тестирование GraphQL API

Выполняет GraphQL запрос к endpoint и валидирует ответ, включая проверку на GraphQL ошибки. Примечание: Для GraphQL через WebSocket (WSS/WS) используйте действие api_request с URL протокола wss:// или ws://.

{
  "id": "step-graphql-1",
  "action": "graphql_test",
  "data": {
    "graphqlEndpoint": "/graphql",
    "graphqlQuery": "query { users { id name email } }",
    "graphqlVariables": {
      "limit": 10
    },
    "graphqlOperationName": "GetUsers",
    "apiHeaders": {
      "Content-Type": "application/json"
    },
    "apiAuthType": "bearer",
    "apiAuthToken": "your-jwt-token",
    "apiTimeout": 30000,
    "graphqlValidateErrors": true
  }
}

Параметры:

  • graphqlEndpoint - GraphQL endpoint URL (обязательно, может быть относительным или абсолютным)
  • graphqlQuery - GraphQL query строка (обязательно)
  • graphqlVariables - GraphQL variables (JSON объект, опционально)
  • graphqlOperationName - Имя операции (опционально)
  • graphqlExpectedData - Ожидаемая структура данных в ответе (опционально)
  • graphqlValidateErrors - Валидировать наличие GraphQL ошибок (по умолчанию false)
  • apiHeaders - Заголовки запроса (JSON объект)
  • apiTimeout - Таймаут запроса в миллисекундах (по умолчанию 30000)
  • apiAuthType - Тип аутентификации: none, bearer, basic, apikey (по умолчанию none)
  • apiAuthToken - Токен для Bearer или API Key аутентификации
  • apiAuthUsername - Имя пользователя для Basic Auth
  • apiAuthPassword - Пароль для Basic Auth
  • apiAuthHeaderName - Имя заголовка для API Key (по умолчанию X-API-Key)

Примеры использования:

  • Простой GraphQL запрос:
    {
      "action": "graphql_test",
      "data": {
        "graphqlEndpoint": "/graphql",
        "graphqlQuery": "query { users { id name } }",
        "apiAuthType": "bearer",
        "apiAuthToken": "token123"
      }
    }
  • GraphQL запрос с переменными:
    {
      "action": "graphql_test",
      "data": {
        "graphqlEndpoint": "/graphql",
        "graphqlQuery": "query GetUser($id: ID!) { user(id: $id) { id name email } }",
        "graphqlVariables": { "id": "1" },
        "graphqlOperationName": "GetUser"
      }
    }

Автоматическое использование cookies: Как и в api_test, GraphQL тесты автоматически используют cookies из браузера, если была выполнена авторизация через web_login или другой способ.

WebSocket для GraphQL: Действие graphql_test использует HTTP/HTTPS протокол. Если ваш GraphQL сервер работает только через WebSocket (WSS/WS), используйте действие api_request с URL протокола wss:// или ws://. Это обеспечит полную поддержку протокола graphql-ws с connection_init, start, data, complete сообщениями.

Применение: Используйте для тестирования GraphQL API endpoints через HTTP/HTTPS, проверки корректности GraphQL запросов и ответов, валидации структуры данных и обнаружения GraphQL ошибок. Для WebSocket используйте api_request. Результаты тестирования сохраняются в graphqlTestResults и отображаются в отчете.

22. rate_limit_test - Тестирование Rate Limiting

Отправляет серию запросов к endpoint для проверки наличия rate limiting защиты.

{
  "id": "step-rate-limit-1",
  "action": "rate_limit_test",
  "data": {
    "rateLimitEndpoint": "/api/endpoint",
    "rateLimitMethod": "GET",
    "rateLimitRequests": 10,
    "rateLimitInterval": 100,
    "rateLimitExpectedStatus": 429,
    "rateLimitExpectedHeader": "X-RateLimit-Remaining",
    "apiHeaders": {
      "Content-Type": "application/json"
    },
    "apiAuthType": "bearer",
    "apiAuthToken": "your-token",
    "apiTimeout": 30000
  }
}

Параметры:

  • rateLimitEndpoint - Endpoint для тестирования rate limiting (обязательно)
  • rateLimitMethod - HTTP метод: GET, POST, PUT, DELETE, PATCH (по умолчанию GET)
  • rateLimitRequests - Количество запросов для отправки (по умолчанию 10)
  • rateLimitInterval - Интервал между запросами в миллисекундах (по умолчанию 100)
  • rateLimitExpectedStatus - Ожидаемый статус-код при достижении rate limit (по умолчанию 429)
  • rateLimitExpectedHeader - Ожидаемое имя заголовка, указывающего на rate limit (например, X-RateLimit-Remaining)
  • apiHeaders - Заголовки запроса (JSON объект)
  • apiAuthType - Тип аутентификации: none, bearer, basic, apikey (по умолчанию none)
  • apiAuthToken - Токен для Bearer или API Key аутентификации
  • apiTimeout - Таймаут запроса в миллисекундах (по умолчанию 30000)

Примеры использования:

  • Базовый тест rate limiting:
    {
      "action": "rate_limit_test",
      "data": {
        "rateLimitEndpoint": "/api/users",
        "rateLimitMethod": "GET",
        "rateLimitRequests": 20,
        "rateLimitInterval": 50
      }
    }
  • Тест с проверкой заголовка rate limit:
    {
      "action": "rate_limit_test",
      "data": {
        "rateLimitEndpoint": "/api/endpoint",
        "rateLimitMethod": "POST",
        "rateLimitRequests": 15,
        "rateLimitInterval": 200,
        "rateLimitExpectedStatus": 429,
        "rateLimitExpectedHeader": "X-RateLimit-Remaining",
        "apiBody": { "action": "test" }
      }
    }

Автоматическое использование cookies: Rate limiting тесты также автоматически используют cookies из браузера для авторизованных запросов, что позволяет тестировать rate limiting на защищенных endpoints.

Применение: Используйте для проверки наличия и корректности работы rate limiting защиты на API endpoints. Тест отправляет указанное количество запросов с заданным интервалом и проверяет, срабатывает ли rate limiting (возвращается ожидаемый статус-код). Результаты тестирования сохраняются в rateLimitTestResults и включают информацию о количестве успешных и ограниченных запросов, среднее время ответа и детали каждого запроса.

Пример полного сценария с SEO и производительностью

Пример JSON сценария, демонстрирующий использование всех новых действий:

{
  "id": "full-seo-performance-test",
  "name": "Full SEO & Performance test",
  "description": "Complex test with SEO & speed",
  "startUrl": "https://example.com",
  "timeout": 300000,
  "steps": [
    {
      "id": "step-1",
      "action": "web_navigate",
      "data": {
        "url": "https://example.com"
      },
      "screenshot": true
    },
    {
      "id": "step-2",
      "action": "network_throttling",
      "data": {
        "networkThrottlingProfile": "3G"
      }
    },
    {
      "id": "step-3",
      "action": "cpu_throttling",
      "data": {
        "cpuThrottlingRate": 2
      }
    },
    {
      "id": "step-4",
      "action": "performance_analysis",
      "data": {}
    },
    {
      "id": "step-5",
      "action": "seo_analysis",
      "data": {}
    },
    {
      "id": "step-6",
      "action": "network_throttling",
      "data": {
        "disableNetworkThrottling": true
      }
    },
    {
      "id": "step-7",
      "action": "cpu_throttling",
      "data": {
        "disableCPUThrottling": true
      }
    }
  ]
}

Примечания:

  • SEO анализ запускается автоматически в конце теста, но вы можете запустить его вручную в любой момент через seo_analysis
  • Анализ производительности также запускается автоматически, но можно запустить вручную через performance_analysis
  • Network и CPU throttling можно установить перед тестированием для более реалистичных условий
  • Не забудьте отключить throttling после тестирования, если нужно продолжить с нормальной скоростью

Готовые веб-шаблоны

В системе доступны 6 готовых шаблонов для веб-тестирования:

🔐 Login Form Test

Комплексный тест формы входа с проверкой успешной авторизации.

  • Навигация на страницу входа
  • Заполнение логина и пароля
  • Отправка формы
  • Проверка успешного входа

🧭 Site Crawl Audit

Многоуровневый обход сайта с настраиваемой глубиной и количеством страниц.

  • Автоматический обход всех страниц сайта
  • Настраиваемая глубина вложенности
  • Проверка работоспособности ссылок
  • Анализ структуры навигации

📸 Full Site Scroll Preview

Полный скролл сайта с автоматическими скриншотами.

  • Открытие сайта
  • Постепенный скролл сверху донизу
  • Автоматическое создание скриншотов каждого экрана
  • Возврат наверх

🛡️ Security Scan Baseline

Быстрая проверка базовых параметров безопасности сайта.

  • Проверка SSL/TLS сертификата
  • Анализ security headers
  • Проверка CORS настроек
  • Тестирование rate limiting
  • Проверка open redirect уязвимостей

🔍 SEO & Performance Analysis

Комплексный анализ SEO и производительности сайта.

  • SEO анализ: broken links, canonical URLs, sitemap.xml, robots.txt, структура URL, дубли контента
  • Network throttling: эмуляция различных сетевых условий (3G, 4G, slow-3G)
  • CPU throttling: эмуляция медленного CPU
  • Performance метрики: memory profiling, network waterfall, long tasks detection, JS bundle analysis
  • Core Web Vitals: FCP, LCP, TTI, CLS, TBT

Применение: Используйте для полного аудита SEO и производительности сайта. Шаблон автоматически устанавливает throttling, выполняет анализ и отключает throttling в конце.

📱 Mobile Testing & Responsive Design

Комплексное мобильное тестирование с эмуляцией устройств и проверкой responsive design.

  • Эмуляция устройств: поддержка 16 популярных устройств:
    • iPhone: iPhone 13, iPhone 13 Pro, iPhone 12, iPhone 11, iPhone SE, iPhone 8
    • iPad: iPad Pro, iPad Air, iPad Mini
    • Android: Galaxy S21, Galaxy S20, Galaxy Note 20, Pixel 5, Pixel 4, Nexus 10, Nexus 7
    • Custom: возможность задать произвольные параметры viewport
    Все устройства имеют правильные viewport размеры, User-Agent и device scale factor
  • Responsive design: тестирование на разных разрешениях viewport (375x667 для мобильных, 768x1024 для планшетов) с автоматическими скриншотами
  • Ориентация экрана: тестирование в portrait и landscape режимах с автоматическим изменением размеров viewport
  • Touch жесты: тестирование swipe жестов (вверх, вниз) для проверки мобильных интерфейсов с поддержкой жестов
  • Автоматическое создание скриншотов на каждом этапе для визуальной проверки адаптации сайта

Применение: Используйте для проверки корректного отображения сайта на мобильных устройствах и планшетах. Шаблон автоматически переключает устройства, ориентацию и выполняет touch жесты с созданием скриншотов.

🔌 API Testing

Комплексное тестирование REST API с поддержкой различных методов HTTP и аутентификации.

  • HTTP методы: GET, POST, PUT, DELETE, PATCH
  • Валидация статус-кодов: проверка ожидаемых HTTP статус-кодов ответов
  • Проверка заголовков: валидация заголовков ответов (Content-Type, Authorization и др.)
  • Валидация JSON схем: проверка структуры ответа API на соответствие JSON схеме
  • Аутентификация: поддержка различных типов аутентификации:
    • Bearer Token: JWT токены и OAuth токены
    • Basic Auth: базовая HTTP аутентификация
    • API Key: ключи API в заголовках (X-API-Key и др.)
  • Query параметры: поддержка передачи параметров в URL
  • Request body: отправка JSON и других типов данных в теле запроса
  • Custom headers: возможность задать произвольные заголовки запроса
  • Таймауты: настраиваемые таймауты для запросов
  • Redirects: поддержка следования редиректам (опционально)
  • Автоматическое использование cookies: API тесты автоматически используют cookies из браузера, если была выполнена авторизация через web_login. Это позволяет тестировать авторизованные endpoints без явного указания токенов.

Применение: Используйте для тестирования REST API endpoints, проверки корректности ответов, валидации схем данных и тестирования различных сценариев аутентификации. Для тестирования авторизованных endpoints сначала выполните web_login, затем API тесты автоматически будут использовать cookies сессии.

Совет: Используйте готовые шаблоны как основу для своих сценариев. Загрузите шаблон и адаптируйте его под ваш сайт.

Сценарии тестирования

Не знаете, как создать сценарий? Используйте функцию "Сгенерировать сценарий с помощью ИИ" — опишите ваш сайт/API, и мы создадим для вас готовый JSON сценарий!

Структура JSON сценария

Все тесты в BotFake используют JSON формат для описания сценариев.

Visual Regression Testing в сценариях

Для включения регрессионного тестирования добавьте параметр visualRegression в шаг сценария:

{
  "id": "step-1",
  "action": "send_message",
  "data": { "text": "/start" },
  "screenshot": true,
  "visualRegression": {
    "baseline": false,
    "threshold": 0.1,
    "failOnDiff": true,
    "autoUpdateBaselineOnDimensionMismatch": false,
    "compareOverlappingArea": true,
    "ignoreAreas": [
      {
        "x": 0,
        "y": 0,
        "width": 100,
        "height": 50,
        "reason": "Ignore time area"
      }
    ]
  }
}

Обязательные поля:

  • id - уникальный идентификатор теста
  • name - название теста
  • steps - массив шагов теста

Опциональные поля:

  • description - описание теста
  • timeout - таймаут выполнения (мс)
  • retries - количество повторных попыток
  • botUsername - username бота (для тестов ботов)

Шаги теста

Каждый шаг в сценарии имеет следующую структуру:

{
  "id": "step-1",
  "action": "send_message",
  "data": { ... },
  "waitTime": 2000,
  "screenshot": true,
  "optional": false,
  "assertions": [ ... ]
}

Опциональные шаги

Параметр optional: true позволяет пропустить шаг без ошибки, если он не может быть выполнен. Это полезно для элементов, которые могут отсутствовать (например, всплывающие окна, cookie-баннеры, 18+ предупреждения):

{
  "id": "step-1",
  "action": "web_click",
  "data": {
    "buttonSelector": ".cookie-accept-btn",
    "waitTime": 1000
  },
  "screenshot": true,
  "optional": true
}

Система шаблонов тестов

Хотите создать шаблон из готового сценария? Используйте функцию "Сгенерировать сценарий с помощью ИИ" — получите готовый сценарий и сохраните его как шаблон одним кликом!

Каталог шаблонов

На вкладке «Шаблоны» (страница /test) отображается каталог карточек с фильтрами «Все / Глобальные / Мои» и поиском по названию/описанию. Каждая карточка показывает статус, количество запусков, даты создания и изменения.

  • Для личных шаблонов доступны кнопки-иконки: ✏️ редактирование, 🗑️ удаление.
  • Глобальные шаблоны доступны всем пользователям только для чтения.
  • Предустановленные шаблоны для Telegram:
    1. 🎯 Onboarding Flow With Document Upload — тестирование процесса онбординга с загрузкой документов
    2. 🤖 LLM Session With Adaptive Guidance — тестирование LLM сессии с адаптивным руководством
    3. 👥 Group Chat Summary Test — анализ группового чата через AI
    4. 📸 Photo Upload Test — тестирование загрузки фотографий
    5. 🔐 Login Form Test — тестирование формы входа
  • Предустановленные шаблоны для веб-тестирования:
    1. 🧭 Site Crawl Audit — двухуровневый краулинг сайта до 20 страниц с анализом статусов, SEO метрик и рекомендаций по улучшению. Поддерживает настройку глубины, количества страниц, таймаутов и следования внешним ссылкам.
    2. 📸 Full Site Scroll Preview — полный скролл сайта сверху донизу с автоматическими скриншотами каждого экрана для превью всего контента. Настраивается шаг скролла и задержка между шагами.
    3. 🛡️ Security Scan Baseline — комплексная проверка безопасности сайта: SSL/TLS сертификаты, security headers (CSP, X-Frame-Options, HSTS и др.), CORS политики, rate limiting, open redirect уязвимости, CSRF защита, управление сессиями, JWT токены, OAuth flow, Content Security Policy и Subresource Integrity. Поддерживает три уровня глубины проверки (basic, standard, aggressive).
    4. 🔍 SEO & Performance Analysis — комплексный анализ SEO, производительности и доступности:
      • SEO: проверка broken links (внутренних и внешних), валидация canonical URLs, проверка sitemap.xml и robots.txt, анализ структуры URL, обнаружение дублированного контента
      • Производительность: метрики Core Web Vitals (FCP, LCP, TTI, TBT, CLS), memory profiling, network waterfall анализ, обнаружение long tasks, анализ JavaScript bundles
      • Доступность (a11y): проверка ARIA атрибутов, alt-текстов для изображений, семантической разметки, иерархии заголовков, форм, навигации с клавиатуры, интеграция с axe-core и Lighthouse
      • Поддерживает эмуляцию сетевых условий (3G, 4G, slow-3G, fast-3G, offline) и CPU throttling для тестирования на медленных устройствах
    5. 📱 Mobile Testing & Responsive Design — комплексное мобильное тестирование:
      • Эмуляция устройств: поддержка 16 популярных устройств (iPhone, iPad, Android) с правильными viewport размерами, User-Agent и device scale factor
      • Responsive design: тестирование на разных разрешениях экрана (мобильные телефоны, планшеты) с автоматическими скриншотами
      • Ориентация экрана: тестирование в portrait и landscape режимах с автоматическим изменением размеров viewport
      • Touch жесты: тестирование swipe жестов (вверх, вниз, влево, вправо) для проверки мобильных интерфейсов с поддержкой жестов
      • Автоматическое создание скриншотов на каждом этапе для визуальной проверки адаптации сайта
    6. 🔌 API Testing — комплексное тестирование REST API и GraphQL (HTTP/HTTPS и WebSocket WSS/WS):
      • HTTP методы: GET, POST, PUT, DELETE, PATCH запросы
      • Валидация статус-кодов: проверка ожидаемых HTTP статус-кодов ответов
      • Проверка заголовков: валидация заголовков ответов
      • Валидация JSON схем: проверка структуры ответа API
      • Аутентификация: поддержка Bearer Token, Basic Auth, API Key
      • Query параметры и Request body: полная поддержка параметров запроса
      • Автоматическое использование cookies: API тесты автоматически используют cookies из браузера после авторизации через web_login
    7. 📊 GraphQL Testing — тестирование GraphQL API:
      • GraphQL запросы: выполнение query, mutation, subscription
      • Variables: поддержка GraphQL variables
      • Operation names: указание имени операции
      • Валидация ошибок: проверка наличия GraphQL ошибок в ответе
      • Валидация данных: проверка структуры данных в ответе
      • Аутентификация: поддержка Bearer Token, Basic Auth, API Key
      • Автоматическое использование cookies: GraphQL тесты автоматически используют cookies из браузера после авторизации через web_login
    8. 🚦 Rate Limiting Testing — проверка защиты от перегрузки:
      • Множественные запросы: отправка серии запросов для проверки rate limiting
      • Настраиваемый интервал: контроль интервала между запросами
      • Обнаружение rate limit: автоматическое определение срабатывания защиты
      • Проверка заголовков: анализ заголовков rate limiting (X-RateLimit-Remaining и др.)
      • Детальная статистика: информация о каждом запросе и общая статистика
      • Автоматическое использование cookies: Rate limiting тесты автоматически используют cookies из браузера для авторизованных запросов

Применение шаблонов

Нажмите «Выбрать» на карточке, чтобы открыть форму параметров. Форма адаптирована к тёмной и светлой темам, поддерживает подсказки и кнопку «Предпросмотр JSON». После заполнения параметров нажмите «Применить», и итоговый сценарий будет загружен в JSON редактор.

Создание и редактирование

Вкладка «Создать шаблон» открывает визуальный конструктор, который теперь поддерживает и Telegram, и веб-сценарии.

  • Telegram: поля botUsername, timeout, retries; действия send_message, api_request, wait, navigate_to_bot, send_document, send_voice, send_video, chat_summary, wait_for_photo и др.
  • Web: шаги web_navigate, web_click, web_fill_form, web_login, web_scroll_screenshot, crawler, security и др. Для каждого шага доступны селекторы, таймауты и настройка скриншотов.
  • Для действий со скриншотами открыт блок Visual Regression: включайте сравнение, обновляйте baseline, задавайте допустимый порог (threshold), поведение при отличиях и JSON с ignoreAreas прямо в конструкторе.
  • Security Scan конфигурируется прямо в конструкторе: чекбоксы проверок, глубина, лимит payload, опции включения доказательств и остановки на критических находках.
  • Кнопки «Предпросмотр JSON», «Применить в редактор» и «Сохранить шаблон» работают для обоих типов сценариев.
  • Режим редактирования личного шаблона выводит баннер «Редактирование: …» и позволяет выйти из режима одной кнопкой.

Визуальный конструктор с Drag & Drop

Визуальный конструктор для веб-сценариев поддерживает интуитивное создание тестов через перетаскивание элементов.

Основные возможности:

  • Перетаскивание шагов: Используйте иконку для перетаскивания шагов и изменения их порядка. Порядок автоматически сохраняется в сценарии.
  • Палитра действий: Нажмите кнопку "Palette" для открытия палитры готовых действий. Перетащите действие из палитры в список шагов для быстрого добавления.
  • Визуальные индикаторы: При перетаскивании шаги подсвечиваются, показывая текущую позицию вставки. Используются визуальные эффекты (ghost, chosen, drag классы) для лучшей обратной связи.
  • Удаление шагов: Каждая карточка шага содержит кнопку удаления для быстрого удаления ненужных шагов.
  • Автоматическое сохранение порядка: Порядок шагов сохраняется в state.steps и автоматически сериализуется в JSON при сохранении шаблона.
Совет: Используйте drag & drop для быстрой реорганизации шагов теста. Это особенно удобно при создании сложных сценариев с множеством шагов.

Сохранение как шаблона

После успешного прогона теста в блоке результатов появляется кнопка «Сохранить как шаблон». Сценарий можно сохранить с новым названием и описанием — он появится в разделе «Мои» и будет доступен для дальнейшего редактирования, применения или удаления.

Экспорт и API

API маршруты /api/templates поддерживают создание, обновление, удаление, применение, экспорт и импорт шаблонов. Сервер проверяет права доступа: редактировать и удалять могут только владельцы личных шаблонов. Счетчик использования увеличивается каждый раз при применении шаблона.

Отчеты и результаты

Просмотр отчетов

После завершения теста автоматически генерируется отчет с результатами.

Информация в отчете:

  • Статус выполнения (успешно/ошибка)
  • Время выполнения
  • Скриншоты каждого шага
  • Логи выполнения
  • Детали ошибок (если есть)

Экспорт отчетов

Отчеты доступны в форматах:

  • HTML - интерактивный отчет с скриншотами
  • JSON - структурированные данные для анализа
  • PDF - документ для печати и архивирования с встроенными скриншотами

Экспорт в PDF

PDF документы генерируются по запросу пользователя при нажатии на кнопку "Скачать PDF". Генерация выполняется синхронно, PDF сохраняется на сервере и кэшируется для повторных скачиваний.

Как это работает:

  1. После создания HTML отчета в списке отчетов сразу появляется кнопка 📄 Скачать PDF
  2. При нажатии на кнопку запускается генерация PDF документа из HTML отчета
  3. Во время генерации кнопка показывает индикатор загрузки (спиннер)
  4. После завершения генерации PDF файл автоматически скачивается в браузер
  5. PDF сохраняется на сервере с тем же именем, что и отчет, но с расширением .pdf
  6. При повторном запросе возвращается уже существующий PDF файл (кэширование)

Особенности PDF отчета:

  • Встроенные скриншоты - все скриншоты автоматически конвертируются в base64 и встраиваются в PDF
  • Полная ширина - отчет занимает всю ширину страницы без боковых отступов
  • Улучшенное форматирование - увеличенные шрифты для лучшей читаемости, правильные размеры заголовков
  • Предотвращение разрыва страницы - скриншоты не переносятся на новую страницу, остаются вместе с текстом
  • Без лишних отступов - удалены отступы перед изображениями для компактного отображения
  • Формат A4 - оптимизирован для печати и просмотра на стандартных размерах

Использование:

  1. Перейдите в раздел "Мои отчеты" внизу страницы тестирования
  2. Найдите нужный отчет в списке (кнопка PDF доступна сразу после создания отчета)
  3. Нажмите кнопку 📄 Скачать PDF рядом с отчетом
  4. Дождитесь завершения генерации (кнопка покажет индикатор загрузки)
  5. PDF файл автоматически загрузится в ваш браузер после генерации
Примечание: Генерация PDF выполняется синхронно при запросе. Время генерации зависит от размера отчета и количества скриншотов. Обычно это занимает от нескольких секунд до минуты. Сгенерированный PDF сохраняется на сервере и при повторном запросе возвращается сразу без повторной генерации.

История тестов

Все запущенные тесты сохраняются в истории. Вы можете:

  • Просматривать все отчеты
  • Фильтровать по дате, статусу, типу
  • Искать по названию или содержимому
  • Группировать результаты по датам
  • Выбирать несколько отчетов для массовых операций (удаление, сравнение)

Сравнение результатов тестов

Функция сравнения позволяет детально анализировать различия между двумя тестами, включая не только шаги сценария, но и метрики SEO, производительности, безопасности, доступности и тип сайта. Это особенно полезно для отслеживания регрессий и изменений в поведении приложения.

Как использовать:

  1. Перейдите в раздел "Мои отчеты" внизу страницы тестирования
  2. Выберите два отчета, установив чекбоксы рядом с ними
  3. Нажмите кнопку "Сравнить (2)", которая появится при выборе ровно двух отчетов
  4. В модальном окне откроется детальное сравнение тестов

Что сравнивается:

  • Метрики:
    • Статус выполнения (успешно/ошибка)
    • Длительность выполнения (с дельтой)
    • Количество шагов в сценарии
    • HTTP‑код и время загрузки страницы (если доступны в отчёте)
    • Время начала и окончания теста
  • Сценарии:
    • Side-by-side сравнение JSON сценариев
    • Подсветка различий в структуре сценариев
    • Детальное сравнение каждого шага
  • Шаги:
    • Таблица сравнения шагов с подсветкой различий
    • Отображение действий для каждого шага
    • Индикация идентичных и различающихся шагов
    • Раскрываемые блоки с полными JSON‑данными шага для обоих тестов
  • Скриншоты:
    • Side-by-side режим по умолчанию (до 3 скриншотов с каждой стороны)
    • Overlay режим с интерактивным Before/After‑слайдером по всей ширине изображения
    • Переключение между режимами одной кнопкой
    • Отдельный блок со скриншотами шагов (web_navigate / scroll with full page screenshot)
  • Аналитика по результатам:
    • SEO: общая оценка, количество проблем, ключевые мета‑теги (title, description, canonical, robots), наличие OG/Twitter Card, Schema.org
    • Производительность: Core Web Vitals (FCP, LCP, TTI, CLS), количество ресурсов по типам (total, scripts, styles, images)
    • Security Scan: общая оценка, уровень риска, количество критичных/высоких/средних/низких проблем, список рекомендаций с описанием и фиксом
    • Accessibility/a11y: оценка доступности, WCAG уровень (A/AA/AAA), количество проблем, ARIA/alt/формы
    • Тип сайта: определённый тип (лендинг, интернет‑магазин, блог и т.п.), уровень уверенности и основные индикаторы

Фильтр "Показывать только отличия":

Включите переключатель "Показывать только отличия" в верхней части модального окна сравнения, чтобы скрыть идентичные элементы и сосредоточиться только на различиях между тестами. Фильтр применяется как к таблице шагов, так и к другим блокам сравнения, где есть пометка о различиях.

Преимущества: Сравнение результатов помогает быстро выявить регрессии, отследить изменения в производительности и понять, что изменилось между запусками тестов.

Визуальные индикаторы:

  • Отличается - элементы, которые различаются между тестами
  • Одинаково - идентичные элементы
  • Желтая подсветка строк в таблице шагов для различий
  • Желтая рамка вокруг карточек тестов при наличии различий

Календарь тестирования

Календарь тестирования позволяет визуально отслеживать все ваши тесты - как запланированные, так и уже выполненные. Вы можете создавать расписания для автоматического запуска тестов и просматривать историю выполнения.

Обзор

Календарь отображает:

  • 📅 Запланированные тесты - тесты, которые будут запущены автоматически по расписанию
  • Выполненные тесты - все прошедшие тесты с результатами
  • 🔄 Выполняющиеся тесты - тесты, которые запущены прямо сейчас
  • Проваленные тесты - тесты, которые завершились с ошибкой

Виды календаря

Месячный вид

Отображает весь месяц с плашками тестов на соответствующих датах. Каждая плашка показывает время запуска и название теста. Цвет плашки указывает на статус:

  • Синий - запланированный тест (pending)
  • Желтый - выполняющийся тест (running)
  • Зеленый - успешно выполненный тест (completed)
  • Красный - проваленный тест (failed)

Недельный вид

Отображает одну неделю с почасовым расписанием. Удобен для детального планирования тестов на неделю. Навигация по неделям осуществляется стрелками влево/вправо.

Создание расписаний

Вы можете создать расписание для автоматического запуска тестов. Доступны следующие типы расписаний:

1. Разовый запуск

Запустить тест один раз в указанную дату и время.

  • Выберите дату запуска
  • Укажите время запуска
  • После выполнения тест автоматически отключится

2. Ежедневный запуск

Запускать тест каждый день в указанное время. Можно выбрать конкретные дни недели.

  • Укажите время запуска (например, 09:00)
  • Выберите дни недели (по умолчанию - все дни)

3. Еженедельный запуск

Запускать тест один раз в неделю в указанный день и время.

  • Выберите день недели (понедельник - воскресенье)
  • Укажите время запуска

4. Ежемесячный запуск

Запускать тест один раз в месяц в указанный день и время.

  • Выберите день месяца (1-31)
  • Укажите время запуска

5. Cron выражение

Для сложных расписаний используйте cron выражения. Формат: минута час день месяц день_недели

Примеры:
0 9 * * 1-5    # Каждый будний день в 9:00
0 */6 * * *    # Каждые 6 часов
0 0 1 * *      # Первое число каждого месяца в полночь

Как создать расписание

  1. Откройте календарь тестирования (кнопка календаря в верхней панели)
  2. Нажмите кнопку "Добавить расписание" или кликните на нужную дату в календаре
  3. Выберите шаблон теста (опционально) или создайте сценарий с нуля
  4. Заполните название и описание расписания
  5. Выберите тип расписания и настройте параметры
  6. Нажмите "Сохранить"

Управление расписаниями

В правой панели календаря отображается список всех ваших расписаний. Для каждого расписания доступны следующие действия:

  • Редактировать - изменить параметры расписания
  • Включить/Отключить - временно приостановить или возобновить расписание
  • Запустить сейчас - немедленно запустить тест по расписанию
  • Удалить - удалить расписание

Просмотр деталей теста

Кликните на любую плашку теста в календаре, чтобы открыть детальную информацию:

  • Название теста
  • Описание (если указано)
  • URL стартовой страницы (для веб-тестов)
  • Время начала и окончания
  • Статус выполнения
  • Ссылка на отчет (если тест завершен)
  • Кнопка скачивания PDF отчета

Индикаторы статуса

Рядом с каждой датой в месячном виде отображаются маленькие иконки, показывающие статистику тестов за день:

  • Зеленая галочка - количество успешных тестов
  • Красный крестик - количество проваленных тестов
  • Желтый спиннер - количество выполняющихся тестов

Интеграция с тестами

Все тесты, запущенные вручную или по расписанию, автоматически отображаются в календаре. Это позволяет:

  • Просматривать полную историю тестирования
  • Отслеживать прогресс выполнения тестов
  • Анализировать паттерны успешных и проваленных тестов
  • Быстро получать доступ к отчетам из календаря
Совет: Используйте календарь для планирования регулярных тестов (например, ежедневная проверка работоспособности сайта или еженедельный полный аудит безопасности). Это поможет автоматизировать процесс тестирования и не пропустить важные проверки.

PWA (Progressive Web App)

BotFake поддерживает полноценную работу как Progressive Web App (PWA), что позволяет устанавливать приложение на устройства и использовать его офлайн.

Возможности PWA

  • Установка на устройства — установка на домашний экран мобильных устройств и десктопов
  • Офлайн-режим — работа с кэшированными ресурсами при отсутствии интернета
  • Service Worker — автоматическое кэширование статических ресурсов и HTML страниц
  • Автоматические обновления — автоматическое обновление приложения при выходе новых версий
  • Кроссплатформенность — поддержка iOS, Android, Windows и всех современных браузеров

Web App Manifest

Приложение включает полнофункциональный Web App Manifest с:

  • Названием и описанием приложения
  • Иконками для всех платформ (192x192, 512x512, maskable)
  • Цветами темы и фона
  • Shortcuts для быстрого доступа к основным функциям
  • Настройками отображения (standalone режим)

Service Worker

Реализован полнофункциональный Service Worker с:

  • Стратегиями кэширования:
    • Cache First для статических ресурсов (CSS, JS, изображения)
    • Network First для HTML страниц с fallback на кэш
  • Автоматическим обновлением кэша при изменении версии
  • Очисткой старых кэшей при активации новой версии
  • Исключением API запросов из кэширования для актуальности данных

Установка PWA

Chrome/Edge (Desktop)

  • В адресной строке появится иконка установки
  • Или: меню → "Установить BotFake"

Chrome (Android)

  • Появится баннер "Добавить на главный экран"
  • Или: меню → "Добавить на главный экран"

Safari (iOS)

  • Поделиться → "На экран «Домой»"

Требования

  • HTTPS — PWA работают только по HTTPS (или localhost для разработки)
  • Современный браузер — Chrome, Edge, Firefox, Safari (iOS 11.3+)

Планировщик тестов (Календарь)

Планировщик тестов доступен без ограничений для всех планов подписки, включая Free. Вы можете:

  • Создавать разовые, ежедневные, еженедельные и ежемесячные расписания
  • Использовать гибкий Cron для сложных расписаний
  • Просматривать историю всех тестов в календаре
  • Получать статистику по расписаниям
Подробная документация: См. docs/PWA_IMPLEMENTATION.md для технических деталей реализации.

Подписки и тарифы

BotFake предлагает три тарифных плана для различных потребностей в тестировании.

🆓 Free (Бесплатный)

Цена: 0₽/месяц

Ограничения:

  • ✅ До 20 тестов Telegram ботов в месяц
  • ✅ До 20 веб-тестов в месяц
  • ✅ До 5 собственных шаблонов
  • 2 Security Scan в месяц
  • 1 baseline визуального регресса
  • Crawler: до 30 страниц, глубина 3
  • API: 100 запросов в день (включая запросы к LLM API через Ollama)
  • ✅ До 2 запросов на генерацию сценариев в месяц
  • Безлимитные скриншоты
  • ❌ Приоритет в очереди недоступен

Идеально для: Тестирования на этапе разработки, личных проектов, изучения платформы.

💼 Professional (Профессиональный)

Цена: 499₽/месяц (или 4990₽/год со скидкой 17%)

Ограничения:

  • ✅ До 200 тестов Telegram ботов в месяц
  • ✅ До 200 веб-тестов в месяц (включая API/GraphQL/Rate Limiting)
  • ✅ До 50 собственных шаблонов
  • ✅ До 50 Security Scan в месяц
  • Visual Regression Testing (неограниченно baseline'ов)
  • Crawler неограничено (без ограничений по страницам и глубине)
  • API доступ (до 3000 запросов/день, включая запросы к LLM API через Ollama)
  • ✅ До 10 запросов на генерацию сценариев в месяц
  • ✅ Приоритет в очереди (высокий приоритет)
  • ✅ Email уведомления о завершении тестов
  • ❌ Управление командой недоступно
  • ❌ Белый лейбл недоступен

Идеально для: Фрилансеров, небольших команд, регулярного тестирования проектов.

🏢 Corporate (Корпоративный)

Цена: 4999₽/месяц (или 49990₽/год со скидкой 17%)

Ограничения:

  • ВСЕ функции Professional
  • Неограниченные собственные шаблоны
  • Security Scan (полный набор, включая Phase 3: Advanced SQLi, Stored XSS, Business Logic Flaws, Authentication & Authorization)
  • Visual Regression Testing (неограниченно)
  • Crawler неограничено (без ограничений)
  • Управление командой (до 10 пользователей)
  • Приоритетная поддержка (ответ в течение 4 часов)
  • Неограниченный API (без ограничений по запросам, включая запросы к LLM API через Ollama)
  • Неограниченные запросы на генерацию сценариев
  • Webhooks для интеграций
  • ✅ Расширенная аналитика (экспорт в CSV/Excel, дашборды)
  • SLA гарантии (99.9% uptime)
  • ✅ Резервное копирование данных
  • ✅ Dedicated support менеджер

Идеально для: Корпораций, крупных команд, агентств, enterprise-клиентов.

🤖 Подсчет запросов к LLM API

Система автоматически подсчитывает все запросы к LLM (Language Model) API в лимит API запросов. Это включает:

Типы запросов, которые подсчитываются:

  1. Запросы через действие chat_summary:
    • Когда выполняется шаг с действием chat_summary в сценарии
    • Система собирает все сообщения из чата и отправляет их на анализ в Ollama
    • Каждый запрос к Ollama API для генерации саммари подсчитывается как 1 API запрос
  2. Запросы через действие api_request:
    • Когда в сценарии используется шаг с действием api_request и URL совпадает с OLLAMA_URL из .env
    • Система автоматически определяет, что это запрос к LLM API
    • Каждый успешный запрос к LLM API подсчитывается как 1 API запрос

Как это работает:

  • Определение LLM API: Система сравнивает URL запроса с значением OLLAMA_URL из конфигурации (по умолчанию http://localhost:11434)
  • Автоматический подсчет: Счетчик увеличивается автоматически после успешного запроса к LLM API
  • Единый лимит: Запросы к LLM API учитываются в общем лимите API запросов для вашего тарифа:
    • Free: 100 запросов/день (включая LLM)
    • Professional: 3000 запросов/день (включая LLM)
    • Corporate: безлимитно (включая LLM)

Где видеть статистику:

Статистика использования API запросов (включая запросы к LLM) отображается на странице /subscription.html в разделе "Использование лимитов":

  • Показывается текущее использование: X / Y (использовано / лимит)
  • Показывается оставшееся количество: Осталось: Z

Примеры использования:

Запрос через chat_summary:

{
  "action": "chat_summary",
  "id": "chat-summary-1"
}

Такой шаг делает 1 запрос к LLM API для анализа чата и добавляет 1 к счетчику API запросов.

Запрос через api_request:

{
  "action": "api_request",
  "data": {
    "apiUrl": "http://localhost:11434/api/generate",
    "apiMethod": "POST",
    "apiBody": {
      "model": "qwen2.5",
      "prompt": "Анализируй чат..."
    }
  }
}

Такой шаг также делает 1 запрос к LLM API (если URL совпадает с OLLAMA_URL) и добавляет 1 к счетчику API запросов.

💳 Оплата и управление подпиской

Оплата производится через CloudPayments (основной платежный шлюз). Поддерживаются банковские карты, СБП, Apple Pay, Google Pay.

YooKassa доступен как дополнительный/резервный платежный провайдер.

🎁 Trial период

При регистрации каждый новый пользователь автоматически получает 7 дней бесплатного Professional плана с полным доступом ко всем функциям Professional тарифа.

Ограничения: Один пользователь может получить trial подписку только один раз. Если у пользователя уже есть активная платная подписка, trial не может быть выдан.

Часто задаваемые вопросы

Общие вопросы

Как создать первый тест?

Используйте встроенный пример сценария или создайте свой JSON файл. Подробнее в разделе \"Начало работы\".

Сколько тестов можно запустить одновременно?

По умолчанию один тест на пользователя. Для увеличения лимита обратитесь к администратору.

Как долго хранятся отчеты?

Отчеты хранятся неограниченное время. Вы можете вручную удалить старые отчеты через интерфейс.

Технические вопросы

Почему тест не запускается?

Проверьте:

  • Валидность JSON сценария
  • Доступность бота/сайта
  • Наличие ошибок в логах

Как настроить timeout для теста?

Укажите поле timeout в корне JSON сценария (в миллисекундах).

Решение проблем

Частые проблемы

Ошибка парсинга JSON

Проблема: Невалидный JSON синтаксис

Решение:

  • Проверьте все запятые и скобки
  • Убедитесь, что все строки в двойных кавычках
  • Используйте онлайн валидатор JSON

Ошибка подключения к серверу

Проблема: WebSocket соединение не устанавливается

Решение:

  • Проверьте, что сервер запущен
  • Убедитесь, что порт не заблокирован
  • Попробуйте обновить страницу (F5)

Тест не завершается

Проблема: Тест зависает на каком-то шаге

Решение:

  • Увеличьте timeout для теста
  • Проверьте waitTime для шагов
  • Используйте кнопку \"Остановить тест\"

Получение помощи

Если проблема не решена:

  • Проверьте логи выполнения теста
  • Обратитесь в поддержку через форму обратной связи
  • Изучите раздел \"FAQ\" для дополнительной информации