Modern QA2026Гибридные стратегии: Совместное использование Skills и MCP
Join

Course01 Agent Skills for Browser Automation

Cutting-edge · Chapter 01

Гибридные стратегии: Совместное использование Skills и MCP

Updated Jul 2026

Почему гибридный подход?

Skills и MCP имеют сильные стороны, которых нет у другого:

Возможность Skills (CLI) MCP
Эффективность токенов Отличная Плохая
Семантическое понимание страницы Нет (только текст/скриншоты) Отличное (деревья доступности)
Скорость Быстро (130 токенов/шаг) Медленно (5K+ токенов/шаг)
Обнаружение Ручное (нужно знать селекторы) Автоматическое (агент читает структуру страницы)

Гибридный подход использует MCP для понимания и Skills для действий.

Стратегия 1: MCP для обнаружения, Skills для выполнения

Паттерн

Фаза 1: Обнаружение (MCP)
  Агент: "Что на этой странице?"
  → browser_snapshot() возвращает дерево доступности
  → Агент определяет: форма входа с #email, #password, button.submit

Фаза 2: Выполнение (Skill)
  Агент: "Теперь я знаю селекторы. Выполнить тест."
  → vibe-check type "#email" "user@test.com"
  → vibe-check type "#password" "secret"
  → vibe-check click "button.submit"

Стоимость токенов

Фаза обнаружения:  ~5 000 токенов (однократное чтение дерева доступности)
Фаза выполнения:   ~500 токенов (5 CLI-команд)
Итого:             ~5 500 токенов

vs. Чистый MCP:    ~25 000 токенов (все шаги через MCP-инструменты)
vs. Чистый Skill:  ~500 токенов (но нужно знать селекторы заранее)

Когда использовать

  • Новые приложения, где вы не знаете структуру DOM
  • UI, который часто меняется — фаза обнаружения адаптируется автоматически
  • Первый запуск теста новой функции — последующие запуски используют закешированные селекторы

Стратегия 2: Skill по умолчанию, MCP как резерв

Паттерн

# Псевдокод поведения агента
try:
    # Основной: использовать skill (быстро, дёшево)
    vibe-check click "button.submit"
except SelectorNotFound:
    # Резерв: использовать MCP для понимания страницы
    snapshot = browser_snapshot()  # MCP-инструмент
    # Агент рассуждает о дереве доступности
    # Агент находит правильный селектор
    new_selector = agent.reason(snapshot, "find the submit button")
    vibe-check click new_selector  # Обратно к skill

Стоимость токенов

Успешный путь (skill работает): ~130 токенов
Резервный путь (нужен MCP):     ~5 130 токенов (один снимок + повтор)
Среднее (при 90% успехе):       ~630 токенов за шаг

Когда использовать

  • Зрелые тестовые наборы, где большинство селекторов стабильны
  • Самовосстанавливающиеся тесты, адаптирующиеся при изменении UI
  • Оптимизация стоимости — платить стоимость MCP только когда необходимо

Стратегия 3: Разные инструменты для разных типов тестов

Паттерн

Тип теста Основной инструмент Почему
Функциональные тесты Skill (vibe-check) Известные потоки, известные селекторы, быстро
Аудиты доступности MCP (Playwright) Нужен семантический анализ страницы
Визуальная регрессия Skill + скриншоты Сравнение скриншотов — дёшево
Исследовательское тестирование MCP Агенту нужно обнаруживать UI
API интеграционные тесты Skill + eval vibe-check eval для инспекции XHR
Проверки производительности Skill + eval vibe-check eval "performance.timing"

Конфигурация

# test-framework-config.yaml
test_types:
  functional:
    tool: vibe-check
    mode: daemon
    headless: true

  accessibility:
    tool: playwright-mcp
    a11y_analysis: true

  visual:
    tool: vibe-check
    screenshots: true
    comparison_threshold: 0.98

  exploratory:
    tool: playwright-mcp
    snapshot_mode: full
    max_depth: 5

Стратегия 4: Поэтапное внедрение фреймворка

Фаза 1: Только Skills (недели 1-2)

Начните с простейшего подхода:

  • Установить навык vibe-check
  • Писать тесты с использованием известных CSS-селекторов
  • Запускать в режиме daemon для разработки, oneshot для CI
# Простой тестовый скрипт
vibe-check navigate https://app.example.com/login
vibe-check type "#email" "test@example.com"
vibe-check type "#password" "password"
vibe-check click "#submit"
vibe-check wait ".dashboard"
vibe-check text ".welcome" | grep "Welcome"

Фаза 2: Добавить MCP для обнаружения (недели 3-4)

Когда вы сталкиваетесь с тестами, где селекторы неизвестны или нестабильны:

  • Добавить Playwright MCP: claude mcp add playwright -- npx @playwright/mcp
  • Использовать MCP только для обнаружения страницы и тестирования доступности
  • Всё выполнение оставить на vibe-check

Фаза 3: Интеллектуальная маршрутизация (неделя 5+)

Построить логику маршрутизации, выбирающую правильный инструмент:

  • Известные селекторы → skill
  • Неизвестные страницы → MCP для обнаружения, затем skill для выполнения
  • Тесты доступности → всегда MCP
  • Запуски CI → только skill (оптимизация стоимости)

Реализация: Простой гибридный тест

Вот как выглядит гибридный тест на практике, как его выполнил бы агент:

Рассуждения агента: "Мне нужно протестировать поток входа на новой
переработанной странице. Я не знаю новые селекторы. Сначала обнаружу."

Шаг 1: Навигация (Skill — дёшево)
  → Bash: vibe-check navigate https://app.example.com/login

Шаг 2: Обнаружение структуры страницы (MCP — дорого, но необходимо)
  → browser_snapshot()
  → Агент получает дерево доступности:
    [role="form" name="Login"]
      [role="textbox" name="Email address" ref=3]
      [role="textbox" name="Password" ref=4]
      [role="button" name="Sign in" ref=5]
      [role="link" name="Forgot password?" ref=6]

Шаг 3: Агент сопоставляет семантические имена с селекторами
  → Агент рассуждает: поле "Email address" = textbox ref=3
  → Использует vibe-check find-all "input" --json для получения CSS-селекторов
  → Сопоставляет: email → "input[aria-label='Email address']"

Шаг 4: Выполнение теста (Skill — дёшево)
  → Bash: vibe-check type "input[aria-label='Email address']" "test@example.com"
  → Bash: vibe-check type "input[aria-label='Password']" "secret"
  → Bash: vibe-check click "button[name='Sign in']"
  → Bash: vibe-check wait ".dashboard"
  → Bash: vibe-check text ".welcome"

Шаг 5: Проверка + скриншот (Skill — дёшево)
  → Bash: vibe-check screenshot -o login-test-result.png

Итого: 1 вызов MCP (~5K токенов) + 7 вызовов skill (~900 токенов) = ~5 900 токенов
vs. Чистый MCP: ~35 000 токенов

Антипаттерны, которых следует избегать

Не надо: Использовать MCP для каждого клика

# ПЛОХО: Каждое действие через MCP
browser_click(ref=5)      # ~5K токенов (включает полное обновление снимка)
browser_type(ref=3, "hi") # ~5K токенов
browser_click(ref=7)      # ~5K токенов
# Итого: 15K+ токенов за 3 действия

Не надо: Использовать Skills для неизвестных страниц

# ПЛОХО: Угадывание селекторов
vibe-check click ".btn-primary"    # Может не существовать
vibe-check click "#submit"         # Неправильный ID
vibe-check click "button"          # Неправильная кнопка
# Потрачено 3 попытки + обработка ошибок

Надо: Соответствие инструмента задаче

# ХОРОШО: MCP для понимания, skill для действия
MCP: Что на этой странице?       → 5K токенов (однократное понимание)
Skill: Теперь нажать правильную кнопку → 130 токенов (точное действие)

Тезис для собеседования

«Наш фреймворк использует гибридный подход. Для известных тестовых потоков со стабильными селекторами мы используем CLI-навык vibe-check — он в 29 раз дешевле по токенам и быстрее. Для новых функций или страниц, где мы не знаем структуру DOM, мы используем Playwright MCP для обнаружения макета страницы через деревья доступности, а затем переключаемся обратно на навык для выполнения. Мы также используем MCP исключительно для аудитов доступности, где семантический анализ страницы — это суть. Это даёт нам эффективность CLI-навыков для 90% нашей работы и богатство MCP, когда оно действительно необходимо.»