⚖️ Selenium vs Playwright

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

⚡ Ключевые отличия

  • Запуск браузера руками → фикстура page
  • webdriver-manager / драйверы → playwright install
  • WebDriverWait + EC → встроенные авто-ожидания
  • assert по «снимку» → web-first expect() с авто-повтором

Playwright — не «устаревший vs новый» (Selenium актуален), а другой подход. Сравним один и тот же сценарий: открыть страницу, кликнуть кнопку, проверить текст.

Сравнение 1: настройка и первый тест

🟡 Selenium (изучали в курсе)

# test_login.py
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

def test_login():
    driver = webdriver.Chrome()
    driver.implicitly_wait(10)
    driver.get("https://example.com/login")

    btn = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.ID, "submit"))
    )
    btn.click()

    msg = driver.find_element(By.CSS_SELECTOR, ".welcome")
    assert msg.text == "Привет!"
    driver.quit()

🟢 Playwright (то же самое)

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

def test_login(page: Page):
    page.goto("https://example.com/login")

    # авто-ожидание кликабельности встроено
    page.get_by_role("button", name="Submit").click()

    # expect сам ждёт нужный текст
    expect(page.locator(".welcome")).to_have_text("Привет!")
  • Нет ручного создания/закрытия драйвера — фикстура page делает это сама.
  • Нет WebDriverWait — ожидание встроено в click() и expect().
  • Меньше импортов и шума, фокус на сценарии.

Сравнение 2: установка браузеров

🟡 Selenium

# Selenium 4: Selenium Manager сам ищет драйвер,
# но браузер (Chrome) должен быть установлен в системе
pip install selenium

🟢 Playwright

# Браузеры скачивает сам Playwright —
# изолированные сборки Chromium/Firefox/WebKit
pip install pytest-playwright
playwright install
⚠️ Это сравнение — для понимания подхода, а не «что лучше». Оба инструмента живые; выбор зависит от команды и проекта.