До появления Playwright MCP AI-генерация тестов проваливалась на локаторах: модель представляла структуру DOM которой не существовало. С MCP всё иначе. AI открывает браузер, смотрит на реальное дерево доступности и генерирует getByRole и getByLabel из того что видит, а не из того что предполагает. Эта статья объясняет как работает Playwright MCP, как подключить его к Claude Desktop, что именно AI видит через браузер, и как выглядит рабочий процесс генерации, проверки и доработки тестов на живом приложении.
Что такое MCP и зачем он нужен для тестирования
Аббревиатура MCP означает Model Context Protocol: открытый протокол позволяющий AI-ассистентам подключаться к внешним инструментам и источникам данных. Anthropic выпустила его в 2024 году, в 2025-м команда Playwright добавила официальную поддержку.
На практике это означает: AI-ассистент с поддержкой MCP (например, Claude в IDE) может открыть браузер, перейти в твоё приложение, изучить DOM и понять какие элементы там есть, прежде чем написать хоть строчку кода теста.
До MCP генерация тестов выглядела так:
1. Описываешь приложение текстом
2. AI генерирует код на основе описания
3. Обнаруживаешь что локаторы неверные: AI придумал структуру которой нет
4. Правишь локаторы вручную
С MCP:
1. AI открывает приложение в браузере
2. Изучает реальную структуру DOM
3. Генерирует код с реальными ролями, реальными лейблами, реальными data-testid
4. Локаторы работают с первого запуска (обычно)
Это не просто удобство. Качество результата меняется принципиально.
Установка Playwright MCP
Что нужно заранее
Node.js 18 или выше и MCP-совместимый AI-клиент (Claude Desktop или IDE с поддержкой MCP).
Установка
npm install -g @playwright/mcpИли как зависимость проекта:
npm install --save-dev @playwright/mcpПодключение к Claude Desktop
Добавь MCP-сервер в конфигурацию Claude Desktop. Файл конфигурации:
macOS/Linux:~/.config/claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": ["@playwright/mcp"]
}
}
}Перезапусти Claude Desktop. В меню инструментов появится новый инструмент Playwright.
Подключение к VS Code
Если используешь MCP-совместимое расширение VS Code (например, расширение Claude), конфигурация аналогичная: добавь сервер в настройках MCP-серверов расширения.
Что AI видит через MCP
При подключении через Playwright MCP у AI есть доступ к следующему.
Дерево доступности. Семантическая структура страницы: каждая кнопка, инпут, заголовок, ссылка, таблица и элемент формы с их доступными ролями и лейблами. Именно это используют локаторыgetByRole и getByLabel, поэтому AI естественным образом генерирует локаторы следуя лучшим практикам.
Скриншоты страницы. AI видит как страница выглядит визуально, а не только структуру DOM. Это помогает понять контекст который дерево доступности не передаёт.
Сетевые запросы. Какие API-вызовы делает страница. Важно для понимания когда данные загружены и когда делать ассёрты.
Вывод консоли. JavaScript-ошибки которые появляются пока AI навигирует по приложению.
Генерация теста через MCP
Реальная MCP-сессия выглядит так. Открываешь AI-ассистент, просишь написать тест, и он начинает работать.
Ты: Напиши Playwright-тест который проверяет что пользователь может залогиниться на lab.becomeqa.com с валидными данными. AI: (переходит на lab.becomeqa.com, делает скриншот, изучает DOM)AI видит:
- Навигационную панель с кнопкой «Login» (роль: button, имя: «Login»)
- Модал с двумя инпутами (лейбл: «Username», лейбл: «Password»)
- Кнопку отправки (роль: button, имя: «Submit»)
- После входа: заголовок с текстом «My Travel Items»
AI генерирует:
import { test, expect } from '@playwright/test';
test('user can log in with valid credentials', async ({ page }) => {
await page.goto('https://lab.becomeqa.com');
await page.getByRole('button', { name: 'Login' }).click();
await page.getByLabel('Username').fill('admin@becomeqa.com');
await page.getByLabel('Password').fill('testpass123');
await page.getByRole('button', { name: 'Submit' }).click();
await expect(page.getByRole('heading', { name: 'My Travel Items' })).toBeVisible();
});Локаторы верны потому что AI смотрел на реальное приложение, а не на его описание. getByRole('button', { name: 'Login' }) работает потому что AI убедился: такая кнопка с таким точным доступным именем существует.
Запуск MCP-генерированных тестов в существующем проекте
MCP генерирует стандартные Playwright-тесты. Они интегрируются в существующий тест-сьют без каких-либо изменений:
# запускаем как любой другой тест
npx playwright test tests/login.spec.ts
# или все тесты
npx playwright testСгенерированные тесты используют тот же playwright.config.ts, те же репортеры, тот же CI-пайплайн. MCP не тест-раннер, а инструмент генерации.
Рабочий процесс: разработка тестов с помощью AI
Процесс который хорошо работает на практике.
Шаг 1: генерируем начальный тест через MCP
Попроси AI написать тест для конкретного сценария. Будь конкретен в том что нужно проверить: не «протестируй логин», а «убедись что вход с валидными данными показывает дашборд с именем пользователя в навигации».
Шаг 2: проверяем сгенерированный код
Смотрим на:
- Локаторы через
getByRole/getByLabel/getByTestId? Хорошо. - Есть
getByXpathилиlocator('div.some-class')? Плохо, сломаются. - Есть вызовы
page.waitForTimeout(2000)? Плохо, заменяй наawait expect(...). - Есть смысловые ассёрты, а не просто «страница загрузилась»?
Шаг 3: запускаем тест
npx playwright test tests/login.spec.ts --headedСмотрим как работает. Совпадает с ожиданиями?
Шаг 4: просим доработать
Если что-то не так, говорим AI что произошло. «Тест падает на шаге с моделью. Похоже модал появляется не сразу. Можешь добавить нормальное ожидание?» AI может вернуться в приложение и посмотреть что происходит.
Шаг 5: добавляем негативные сценарии
Когда happy path работает, просим написать негативные тесты: «Теперь напиши тест для случая когда пароль неверный.» MCP позволяет AI взаимодействовать с приложением и увидеть что реально происходит: какое сообщение об ошибке появляется, где и как написано.
Что MCP генерирует хорошо, а что хуже
Генерирует хорошо
- Базовые сценарии с понятной структурой UI
- Взаимодействие с формами (fill, select, click)
- Ассёрты на видимый текст и заголовки
- Взаимодействие с модалами и диалогами
- Тесты для приложений с хорошей семантической HTML-разметкой
Генерирует хуже
- Сложные сценарии зависящие от состояния («у пользователя ровно 3 элемента в конкретном статусе»)
- Тесты которые требуют подготовки данных на бэкенде
- Тесты визуального расположения элементов
- Гонки состояний и чувствительные к таймингу сценарии
- Тесты требующие setup/teardown базы или API
Для второй категории AI-генерация даёт стартовую структуру которую нужно дорабатывать вручную.
MCP против обычной AI-генерации
| Аспект | MCP | Генерация из описания |
|--------|-----|----------------------|
| Точность локаторов | Высокая, из реального DOM | Варьируется, из описания |
| Работает с первого запуска | Обычно да | Часто требует правок |
| Требование | Доступ к запущенному приложению | Только текстовое описание |
| Полезен когда | Приложение запущено локально | Приложение ещё не построено |
Оба подхода уместны. Для тестирования задеплоенного приложения MCP существенно лучше. Для написания тестов до того как приложение существует (test-driven development), генерация из спецификации по-прежнему полезна.
MCP в CI
MCP не запускается в CI: это инструмент разработки. Используешь MCP локально для генерации и доработки тестов, коммитишь сгенерированные тесты в репозиторий, и CI запускает их в headless-режиме через стандартный Playwright. В CI запускаются тесты которые MCP помог написать, а не сам MCP.
FAQ
MCP работает с любым приложением или только с определёнными фреймворками?
С любым веб-приложением доступным через браузер. Неважно React, Vue, Angular или чистый HTML. MCP работает на уровне браузера, а не фреймворка.
Может ли MCP обновлять существующие тесты когда UI меняется?
Экспериментально, да. Можно попросить AI посмотреть на текущее приложение и починить тест который падает из-за UI-изменения. На практике хорошо работает для обновления локаторов, хуже для структурных изменений в тест-флоу.
MCP бесплатный?
Пакет @playwright/mcp открытый и бесплатный. Нужен MCP-совместимый AI-клиент. Claude Desktop (Anthropic) есть в бесплатном и платном варианте. Другие совместимые клиенты отличаются по условиям.
Работает с TypeScript и JavaScript?
С обоими. Укажи что именно нужно: «Напиши этот тест на TypeScript со strict mode», или AI использует то что соответствует конфигурации проекта.
Может ли AI запускать тесты и самостоятельно исправлять ошибки?
При правильной конфигурации MCP и AI-клиента, да. Можно попросить AI запустить тест, посмотреть на падение, изучить приложение в состоянии ошибки и обновить тест. Это агентный рабочий процесс тестирования который формируется в 2026 году: AI итерирует тесты автономно пока они не пройдут.
→ See also: ИИ в QA в 2026 году: что реально полезно, а что просто хайп | Заменит ли ИИ QA-инженеров? Честная оценка