Видео (Video Recording)

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

Включение записи видео

Видео включается при создании контекста через параметр record_video_dir.

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch()
    context = browser.new_context(
        record_video_dir="videos/"
    )
    page = context.new_page()
    page.goto("https://example.com")
    # видео сохранится при закрытии контекста
    context.close()
    browser.close()

Настройка размера видео

Параметр record_video_size задаёт размер записываемого видео.

context = browser.new_context(
    record_video_dir="videos/",
    record_video_size={"width": 1280,
                       "height": 720}
)
Примечание: Размер видео не может превышать 800×800 пикселей независимо от указанных значений. Playwright подгоняет его под ограничение.

Сохранение видео при закрытии контекста

Видео сохраняется автоматически при вызове context.close(). Каждая страница получает отдельный видеофайл.

context = browser.new_context(
    record_video_dir="videos/")
page = context.new_page()
page.goto("https://example.com")
context.close()
# Файл .webm уже на диске в videos/

Путь к видео

После закрытия страницы или контекста можно получить путь к видео через page.video.path().

context.close()
video_path = page.video.path()
print(video_path)
# videos/6c4a2b3e...webm

Сохранение копии видео

Метод page.video.save_as() сохраняет копию видео в указанное место.

context.close()
page.video.save_as("output.webm")

Удаление видео

Метод page.video.delete() удаляет видео с диска.

context.close()
page.video.delete()
Важно: Вызов delete() до закрытия контекста не даст эффекта. Видео должно быть сначала сохранено.

Видео в pytest

Плагин pytest-playwright предоставляет CLI-флаги для управления видео.

# Запись видео для каждого теста
pytest --video on

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

Пример фикстуры с видео:

import pytest

@pytest.fixture(scope="function")
def context(browser):
    ctx = browser.new_context(
        record_video_dir="videos/"
    )
    yield ctx
    ctx.close()

def test_example(context):
    page = context.new_page()
    page.goto("https://example.com")
    expect(page).to_have_title("Example")
Совет: Комбинируйте --video retain-on-failure с --trace on для максимальной информативности при отладке.