Playwright Codegen — встроенный инструмент, который записывает действия пользователя в открытом браузере (клики, ввод текста, переходы по страницам) и превращает их в готовый код теста на выбранном языке. Запускается командой npx playwright codegen <URL> — открывается браузер и отдельное окно Playwright Inspector, где в реальном времени появляется код по мере того, как вы взаимодействуете со страницей.
Как запустить Playwright Codegen в базовом режиме?
npx playwright codegen https://example.com
Команда открывает Chromium с целевым сайтом и окно Inspector рядом. Клик по кнопке «Войти» в браузере сразу появляется в Inspector как строка await page.getByRole('button', { name: 'Войти' }).click();. Ввод текста в поле — как await page.getByLabel('Логин').fill('testuser'). Codegen сам выбирает локатор для каждого элемента, стараясь использовать устойчивые атрибуты (роль, текст, data-testid), а не хрупкие CSS-селекторы по классам, которые могут измениться при следующем деплое фронтенда.
Как выбрать язык и файл вывода для Codegen?
npx playwright codegen --target=python -o test_login.py https://example.com
По умолчанию Codegen генерирует код на JavaScript/TypeScript (целевой формат по умолчанию называется playwright-test), но флаг --target переключает язык вывода — доступны python, python-async, python-pytest, java, csharp и другие варианты в зависимости от установленных биндингов Playwright. Флаг -o (или --output) сразу сохраняет сгенерированный код в файл, а не просто печатает его в Inspector — удобно, когда сразу известно, куда добавить готовый тест.
Как сохранить состояние логина при записи в Codegen?
npx playwright codegen --save-storage=auth.json https://example.com/login
Codegen может сохранить состояние браузера (cookies, localStorage) после того, как вы вручную залогинились во время записи — файл auth.json потом можно подключить в реальных тестах через storageState, чтобы не проходить логин в каждом тесте заново. Это тот же механизм storageState, который в Playwright обычно применяется для переиспользования аутентификации между тестами в целом, а не только при записи через Codegen.
Можно ли использовать код Codegen как готовый тест без правок?
Код, сгенерированный Codegen, обычно работает сразу после записи, но требует ручной доработки перед тем, как стать частью реального набора тестов: нужно добавить expect-проверки (Codegen записывает только действия, а не ассерты — проверки нужно дописать самостоятельно, наблюдая за приложением), убрать лишние клики или паузы, которые случайно попали в запись, и адаптировать локаторы там, где Codegen выбрал что-то нестабильное (например, текст кнопки, который может измениться от локализации). Codegen отлично экономит время на «первом черновике» теста и на изучении, какие локаторы доступны для конкретного элемента, но не заменяет осмысленное проектирование теста.
Какие флаги Codegen стоит запомнить?
— `npx playwright codegen <URL>`. Открывает браузер и окно Inspector, записывает действия в код теста. Пример: npx playwright codegen https://example.com.
— `--target`. Меняет язык генерируемого кода (по умолчанию JavaScript/TypeScript). Пример: --target=python.
— `-o`, `--output`. Сохраняет сгенерированный код в файл вместо вывода в Inspector. Пример: -o test_login.py.
— `--save-storage`. Сохраняет cookies и localStorage после логина в файл для storageState. Пример: --save-storage=auth.json.
Этот список — не полный перечень параметров Codegen, а только тех флагов, которые пригождаются чаще всего: смена языка вывода, сохранение кода в файл и сохранение состояния логина для повторного использования в тестах.
— `--target`. Меняет язык генерируемого кода (по умолчанию JavaScript/TypeScript). Пример: --target=python.
— `-o`, `--output`. Сохраняет сгенерированный код в файл вместо вывода в Inspector. Пример: -o test_login.py.
— `--save-storage`. Сохраняет cookies и localStorage после логина в файл для storageState. Пример: --save-storage=auth.json.
Этот список — не полный перечень параметров Codegen, а только тех флагов, которые пригождаются чаще всего: смена языка вывода, сохранение кода в файл и сохранение состояния логина для повторного использования в тестах.
Частые вопросы про Playwright Codegen
Codegen можно запустить без установки отдельного пакета? Да, если в проекте уже установлен @playwright/test (или playwright), команда npx playwright codegen доступна сразу — никакой дополнительной установки не требуется.
Codegen записывает проверки (assertions) автоматически? Нет, по умолчанию Codegen записывает только действия (клики, ввод текста, навигацию). Но в интерфейсе Playwright Inspector есть отдельные кнопки для добавления конкретных ассертов вручную во время записи (например, «assert visibility», «assert text») — они генерируют expect(...) в код, но это осознанное отдельное действие, не автоматическая запись.
Можно ли использовать Codegen для существующего проекта с уже настроенным playwright.config.ts? Да, Codegen — самостоятельный инструмент записи, не завязанный на конкретный проект. Сгенерированный код можно скопировать в любой существующий файл тестов и адаптировать под структуру и фикстуры конкретного проекта.
Codegen подходит для тестирования сложных сценариев с условной логикой? Не напрямую — Codegen записывает линейную последовательность действий одного конкретного прохода через интерфейс. Условная логика, циклы, параметризация тестов и переиспользуемые функции дописываются вручную после того, как получен базовый рабочий код действий от Codegen.
Codegen записывает проверки (assertions) автоматически? Нет, по умолчанию Codegen записывает только действия (клики, ввод текста, навигацию). Но в интерфейсе Playwright Inspector есть отдельные кнопки для добавления конкретных ассертов вручную во время записи (например, «assert visibility», «assert text») — они генерируют expect(...) в код, но это осознанное отдельное действие, не автоматическая запись.
Можно ли использовать Codegen для существующего проекта с уже настроенным playwright.config.ts? Да, Codegen — самостоятельный инструмент записи, не завязанный на конкретный проект. Сгенерированный код можно скопировать в любой существующий файл тестов и адаптировать под структуру и фикстуры конкретного проекта.
Codegen подходит для тестирования сложных сценариев с условной логикой? Не напрямую — Codegen записывает линейную последовательность действий одного конкретного прохода через интерфейс. Условная логика, циклы, параметризация тестов и переиспользуемые функции дописываются вручную после того, как получен базовый рабочий код действий от Codegen.
Закрепить Codegen на практике
Разница между записанным Codegen кодом и рабочим тестом — именно в шагах, которые надо дописать руками: условная логика, параметризация, ассерты. Потренироваться писать такие тесты с нуля, опираясь на структуру, близкую к реальным проектам, можно на бесплатном тренажёре Playwright Arena от Quality Academy — 30 задач в трёх модулях, без ограничения попыток.
-------
Полезные ссылки школы
Сайт Quality Academy:
/main
Telegram-канал:
https://t.me/quality_academy
YouTube-канал:
https://www.youtube.com/@quality_academy
ВКонтакте:
https://vk.com/quality_academy
Канал отзывов учеников (58+ отзывов):
https://t.me/quality_academy_reviews
Задать вопрос менеджеру:
https://t.me/quality_academy_bot
Тест «Подойдёт ли вам тестирование»:
https://quiz.quality-academy.ru
5000+ вопросов с собесов тестировщика — бот-тренажёр:
https://t.me/quality_academy_interview_bot
3 практические задачи и дорожная карта:
https://t.me/quality_academy_tasks_bot
Бесплатные тренажёры — SQL Arena, Playwright Arena, Python Arena:
SQL Arena · Playwright Arena · Python Arena
/main
Telegram-канал:
https://t.me/quality_academy
YouTube-канал:
https://www.youtube.com/@quality_academy
ВКонтакте:
https://vk.com/quality_academy
Канал отзывов учеников (58+ отзывов):
https://t.me/quality_academy_reviews
Задать вопрос менеджеру:
https://t.me/quality_academy_bot
Тест «Подойдёт ли вам тестирование»:
https://quiz.quality-academy.ru
5000+ вопросов с собесов тестировщика — бот-тренажёр:
https://t.me/quality_academy_interview_bot
3 практические задачи и дорожная карта:
https://t.me/quality_academy_tasks_bot
Бесплатные тренажёры — SQL Arena, Playwright Arena, Python Arena:
SQL Arena · Playwright Arena · Python Arena