Часть 1. Ответы
- Chromium, Firefox, WebKit.
BrowserContext— изолированная сессия (cookies/localStorage), как «инкогнито». Даёт независимость тестов друг от друга.- Потому что Playwright перед действием сам ждёт actionability (элемент видим, стабилен, кликабелен) до таймаута.
expect()— web-first: повторяет проверку до таймаута, пока условие не выполнится. Обычныйassertпроверяет мгновенный снимок и падает, если элемент ещё не появился.- Браузеры —
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()
# ... остальные записанные действия
⚠️ Точный сгенерированный код зависит от версии и состояния сайта — ориентируйтесь на структуру, а не на дословное совпадение.