Playwright Python — справочник На главный сайт

Что такое Playwright Codegen

Playwright Codegen — это встроенный инструмент, который записывает ваши действия в браузере и преобразует их в готовый тестовый код. Достаточно выполнить одну команду в терминале, и откроется браузер, каждое ваше действие будет записано в виде стабильного, готового к использованию теста на Python.

Важно: Сгенерированный код использует правильные локаторы с auto-waiting, что делает тесты надёжными и читаемыми. Codegen — отличный способ начать изучение Playwright или быстро создать каркас теста для сложной страницы.

Запуск генератора

Базовый запуск

Просто выполните команду в терминале:

# Запуск генератора в режиме по умолчанию
playwright codegen

После запуска откроется два окна: браузер (где вы выполняете действия) и Playwright Inspector (с генерируемым кодом). Выберите язык Python в Inspector, если он не установлен по умолчанию.

С указанием URL

Можно сразу указать адрес страницы, с которой начать:

# Открыть playwright.dev и начать запись
playwright codegen playwright.dev

# Запуск с локальным сервером
playwright codegen http://localhost:3000

Настройка размера окна

По умолчанию окно браузера имеет размер 1280x720. Вы можете изменить его:

# Кастомный размер окна просмотра
playwright codegen --viewport-size=1280,720

# Мобильный размер
playwright codegen --viewport-size=375,812

Эмуляция устройств

Codegen поддерживает эмуляцию мобильных устройств, что позволяет генерировать код для мобильных сценариев:

# Эмуляция iPhone 13
playwright codegen --device="iPhone 13"

# Эмуляция Pixel 5
playwright codegen --device="Pixel 5"

# Эмуляция iPad Pro
playwright codegen --device="iPad Pro 11"

Совет: При использовании --device размер окна, user-agent и другие параметры автоматически устанавливаются под выбранное устройство. Дополнительный --viewport-size в этом случае игнорируется.

Цветовая схема

Вы можете задать цветовую схему для тестирования тёмной темы:

# Тёмная тема
playwright codegen --color-scheme=dark

# Светлая тема (по умолчанию)
playwright codegen --color-scheme=light

Сохранение результата в файл

Сгенерированный код можно сразу сохранить в файл:

# Сохранение в файл test_my.py
playwright codegen --output test_my.py

# Сохранение с указанием полного пути
playwright codegen --output tests/test_login.py

Выбор целевого языка

По умолчанию Codegen генерирует код на Python. Можно явно указать целевой язык:

# Python (по умолчанию)
playwright codegen --target=python

# JavaScript
playwright codegen --target=javascript

# Java
playwright codegen --target=java

# .NET C#
playwright codegen --target=csharp

Важно: Изменение языка происходит только на старте. Если нужно переключиться во время сессии, используйте выпадающий список в Inspector.

Запись действий

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

  • Клики — по кнопкам, ссылкам, любым элементам. Генерируется locator.click()
  • Ввод текста — заполнение полей ввода. Генерируется locator.fill()
  • Навигация — переход по ссылкам, ввод URL. Генерируется page.goto()
  • Выбор опций — из выпадающих списков. Генерируется locator.select_option()
  • Отметка чекбоксов — генерируется locator.check() / locator.uncheck()
  • Drag-and-drop — генерируется locator.drag_to()

Пример сгенерированного кода:

from playwright.sync_api import sync_playwright

def run(playwright):
    browser = playwright.chromium.launch(headless=False)
    context = browser.new_context()
    page = context.new_page()
    page.goto("https://example.com")
    page.get_by_role("button", name="Submit").click()
    page.get_by_label("Email").fill("user@example.com")
    page.get_by_role("combobox", name="Country").select_option("RU")
    page.get_by_role("checkbox", name="Agree").check()
    page.get_by_role("link", name="Logout").click()
    context.close()
    browser.close()

with sync_playwright() as playwright:
    run(playwright)

Playwright Inspector

Playwright Inspector — это графический интерфейс, который открывается вместе с Codegen. Он предоставляет:

  • Дерево локаторов — иерархия DOM с подсветкой элементов при наведении
  • Генерируемый код — обновляется в реальном времени по мере действий
  • Копирование селекторов — можно скопировать рекомендованный локатор для любого элемента
  • Режим Pick Locator — выберите элемент на странице и получите лучший локатор

Pick Locator mode

Режим Pick Locator позволяет навести курсор на любой элемент страницы и мгновенно получить рекомендуемый локатор для него. Playwright анализирует DOM и выбирает наиболее стабильный и читаемый локатор (обычно get_by_role или get_by_text).

# Включение Pick Locator из командной строки
playwright codegen --inspector

В Inspector нажмите кнопку "Pick Locator" (значок прицела), затем наведитесь на элемент на странице — в Inspector отобразится лучший локатор.

Совет: Pick Locator особенно полезен для сложных SPA-приложений, где ручной поиск стабильного селектора может занять много времени.

Assertion tools (Утверждения)

Codegen позволяет добавлять проверки прямо во время записи. В Inspector есть три кнопки для утверждений:

  • Visibility — проверка видимости элемента. Генерирует expect(locator).is_visible()
  • Text — проверка текста элемента. Генерирует expect(locator).to_have_text()
  • Value — проверка значения поля. Генерирует expect(locator).to_have_value()

Пример сгенерированного кода с утверждениями:

def run(playwright):
    browser = playwright.chromium.launch(headless=False)
    context = browser.new_context()
    page = context.new_page()
    page.goto("https://example.com")

    # Утверждение: кнопка видна
    page.get_by_role("button", name="Submit").is_visible()

    # Утверждение: текст заголовка
    page.get_by_role("heading", name="Welcome").is_visible()

    # Утверждение: поле содержит значение
    page.get_by_label("Email").fill("user@example.com")
    page.get_by_label("Email").input_value() == "user@example.com"

    context.close()
    browser.close()

Эмуляционные опции

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

Часовой пояс

# Эмуляция часового пояса Москвы
playwright codegen --timezone="Europe/Moscow"

# Эмуляция часового пояса Нью-Йорка
playwright codegen --timezone="America/New_York"

Геолокация

# Эмуляция координат (Москва)
playwright codegen --geolocation="55.7558,37.6173"

# Эмуляция координат (Нью-Йорк)
playwright codegen --geolocation="40.7128,-74.0060"

Язык браузера

# Русский язык интерфейса
playwright codegen --lang="ru-RU"

# Несколько языков
playwright codegen --lang="de-DE,en-US"

page.pause() — открытие Inspector в коде

Вы можете вставить вызов page.pause() в свой тестовый код, чтобы вручную открыть Playwright Inspector в нужный момент выполнения. Это позволяет переключиться в режим записи прямо посередине теста.

def test_example(page):
    page.goto("https://example.com")
    page.get_by_role("button", name="Login").click()

    # Открыть Inspector для ручного взаимодействия
    page.pause()

    # Код после паузы продолжится после нажатия "Resume" в Inspector
    page.get_by_role("heading", name="Dashboard").is_visible()

Важно: page.pause() приостанавливает выполнение теста до тех пор, пока вы не нажмёте кнопку "Resume" в Playwright Inspector. Это полезно для отладки, не оставляйте pause() в финальной версии теста.

Сохранение и загрузка аутентификации

Codegen поддерживает сохранение состояния аутентификации (cookies, localStorage) для повторного использования в последующих сессиях.

Сохранение состояния

# Запись действий с сохранением сессии
playwright codegen --save-storage=auth.json

# После закрытия браузера файл auth.json будет содержать куки и localStorage

Загрузка состояния

# Запуск с ранее сохранённой сессией
playwright codegen --load-storage=auth.json

# Пользователь уже будет авторизован
playwright codegen --load-storage=auth.json https://example.com/dashboard

Программное использование storageState:

import json

# Сохранение состояния контекста
storage = context.storage_state(path="auth.json")

# Загрузка состояния в новый контекст
context = browser.new_context(storage_state="auth.json")

Настройка трассировки, видео и скриншотов из Codegen

Вы можете настроить дополнительные опции прямо при запуске Codegen:

Трассировка

# Включение трассировки
playwright codegen --trace on

# Трассировка только при ошибках
playwright codegen --trace retain-on-failure

Видеозапись

# Запись видео теста
playwright codegen --video on

# Видео только при падении
playwright codegen --video retain-on-failure

Скриншоты

# Скриншоты на каждом шаге
playwright codegen --screenshot on

# Скриншоты только при падении
playwright codegen --screenshot only-on-failure

Практический пример: запись теста авторизации

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

# Шаг 1: Запуск генератора с эмуляцией мобильного устройства и русским языком
playwright codegen --device="iPhone 13" --lang="ru-RU" --output test_auth.py

# Шаг 2: Выполните в браузере:
# 1. Перейдите на страницу логина
# 2. Введите email
# 3. Введите пароль
# 4. Нажмите кнопку "Войти"
# 5. Добавьте утверждение (visibility) на элемент после входа

# Шаг 3: Закройте браузер — код сохранится в test_auth.py

Результат в файле test_auth.py:

from playwright.sync_api import sync_playwright

def run(playwright):
    iphone_13 = playwright.devices["iPhone 13"]
    browser = playwright.webkit.launch(headless=False)
    context = browser.new_context(
        **iphone_13,
        locale="ru-RU",
    )
    page = context.new_page()
    page.goto("https://example.com/login")
    page.get_by_placeholder("Email").fill("user@example.com")
    page.get_by_placeholder("Пароль").fill("mypassword")
    page.get_by_role("button", name="Войти").click()
    page.get_by_role("heading", name="Dashboard").is_visible()
    context.close()
    browser.close()

with sync_playwright() as playwright:
    run(playwright)

Советы и рекомендации

Совет 1: Используйте --output для автоматического сохранения кода. Это удобно при длительных сессиях записи.

Совет 2: Комбинируйте --device с --lang и --geolocation для максимально реалистичной эмуляции пользователя.

Совет 3: После генерации кода просмотрите его и, при необходимости, добавьте expect() для ключевых проверок. Codegen записывает базовые утверждения, но не может предугадать все бизнес-требования.

Совет 4: Используйте --save-storage для длинных сценариев, где нужно пройти аутентификацию один раз, а затем многократно генерировать тесты для защищённых разделов.

Заключение

Playwright Codegen — мощный инструмент для быстрого создания тестов. Он не только ускоряет написание кода, но и помогает изучать правильные паттерны использования локаторов и API Playwright. Используйте его как отправную точку, а затем дорабатывайте тесты под свои нужды.