Видео (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 для максимальной информативности при отладке.