Что такое Playwright
Playwright — open-source фреймворк для автоматизации браузеров от Microsoft. Как и Selenium, он управляет реальным браузером из кода, но проектировался уже с учётом проблем, на которые натыкались на Selenium: нестабильность из-за таймингов, разные драйверы под каждый браузер, многословные ожидания.
Один и тот же код Playwright работает в трёх движках: Chromium (Chrome/Edge), Firefox и WebKit (Safari). Браузеры скачиваются самим Playwright — отдельный ChromeDriver/GeckoDriver не нужен.
Архитектура: browser → context → page
- Browser — запущенный экземпляр браузера (Chromium и т.д.).
- BrowserContext — изолированная сессия внутри браузера: свои cookies, localStorage, кэш. Похоже на окно «инкогнито». Несколько контекстов в одном браузере не видят данные друг друга — удобно для параллельных и независимых тестов.
- Page — вкладка внутри контекста, с которой вы и работаете в тестах.
pytest-playwright для каждого теста создаётся свежий context и page — тесты изолированы по умолчанию, без «грязного» состояния от предыдущих.
Главное отличие — авто-ожидания
В Selenium, если элемент ещё не появился или не кликабелен, действие падает — поэтому пишут явные ожидания (WebDriverWait + expected_conditions) или, что плохо, time.sleep().
Playwright перед каждым действием выполняет проверки actionability: элемент существует, видим, стабилен (не двигается), доступен для взаимодействия. Он автоматически ждёт выполнения этих условий до таймаута. В итоге:
# Selenium — нужно явно ждать
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.ID, "submit"))
)
element.click()
# Playwright — ожидание встроено в click()
page.get_by_role("button", name="Submit").click()
Web-first проверки: expect()
У Playwright есть собственные проверки expect(), которые тоже ждут. Например, expect(locator).to_be_visible() повторяет проверку до таймаута, пока элемент не станет видимым. Это убирает целый класс «мигающих» (flaky) тестов.
from playwright.sync_api import expect
# Ждёт появления текста до таймаута, потом проверяет
expect(page.get_by_text("Заказ оформлен")).to_be_visible()
expect — в уроке 18. Здесь важно понять идею: проверки в Playwright «умные» и сами ждут.
Установка
Для интеграции с pytest используется плагин pytest-playwright. Он приносит готовые фикстуры (page, context, browser).
# 1. Установить плагин (тянет за собой playwright)
pip install pytest-playwright
# 2. Скачать браузеры (Chromium, Firefox, WebKit)
playwright install
# (опционально) только Chromium
playwright install chromium
После этого тест — это обычная pytest-функция, которая принимает фикстуру page:
# test_first.py
from playwright.sync_api import Page, expect
def test_title(page: Page):
page.goto("https://playwright.dev/")
expect(page).to_have_title(__import__("re").compile("Playwright"))
Когда что выбирать
Playwright не «отменяет» Selenium — оба живы и востребованы. Selenium — отраслевой стандарт с огромной экосистемой; Playwright — более молодой, с акцентом на стабильность и удобство. Понимание обоих делает вас сильнее как автоматизатора.