✅ Решения

← К оглавлению урока

⚡ Кратко

pip install pytest-playwright
playwright install
pytest test_smoke.py --headed

Часть 1. Ответы

  1. Chromium, Firefox, WebKit.
  2. BrowserContext — изолированная сессия (cookies/localStorage), как «инкогнито». Даёт независимость тестов друг от друга.
  3. Потому что Playwright перед действием сам ждёт actionability (элемент видим, стабилен, кликабелен) до таймаута.
  4. expect() — web-first: повторяет проверку до таймаута, пока условие не выполнится. Обычный assert проверяет мгновенный снимок и падает, если элемент ещё не появился.
  5. Браузеры — playwright install; запись теста — playwright codegen <url>.

Часть 2. Первый тест — эталон

# test_smoke.py
import re
from playwright.sync_api import Page, expect

def test_homepage_title(page: Page):
    page.goto("https://playwright.dev/")
    expect(page).to_have_title(re.compile("Playwright"))
# Терминал
python -m venv venv
venv\Scripts\activate        # Windows
pip install pytest-playwright
playwright install
pytest test_smoke.py            # headless
pytest test_smoke.py --headed   # видимый браузер

Часть 3. Клик и скриншот — эталон

# test_navigation.py
from playwright.sync_api import Page, expect

def test_get_started(page: Page):
    page.goto("https://playwright.dev/")
    page.get_by_role("link", name="Get started").click()
    expect(page.get_by_role("heading", name="Installation")).to_be_visible()
    page.screenshot(path="installation.png", full_page=True)

Часть 4. codegen

После playwright codegen https://playwright.dev/ сгенерированный код выглядит примерно так (его оформляют в тест):

from playwright.sync_api import Page

def test_recorded(page: Page):
    page.goto("https://playwright.dev/")
    page.get_by_role("link", name="Get started").click()
    # ... остальные записанные действия
⚠️ Точный сгенерированный код зависит от версии и состояния сайта — ориентируйтесь на структуру, а не на дословное совпадение.