Playwright — современный инструмент для автоматизации браузеров, который предоставляет высокую скорость, стабильность и поддержку современных веб-технологий. При переходе с Selenium WebDriver важно учитывать различия в архитектуре, синтаксисе и подходах к синхронизации.
Selenium WebDriver использует модель взаимодействия через браузерный драйвер, который переводит команды в действия внутри браузера. Каждое действие влечёт сетевое взаимодействие с драйвером, что может приводить к задержкам и нестабильности при тестировании сложных интерфейсов.
Playwright управляет браузером напрямую через протоколы DevTools или WebSocket. Это позволяет:
В Selenium привычно создавать один WebDriver на тестовый
класс или сессию. В Playwright ключевое понятие —
BrowserContext. Это изолированная среда в одном
браузере, которая имитирует отдельный пользовательский профиль.
Пример:
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch({ headless: false });
const context = await browser.newContext(); // аналог новой сессии
const page = await context.newPage();
await page.goto('https://example.com');
})();
Преимущество контекста: изоляция cookies, localStorage и cache, что позволяет запускать параллельные тесты без конфликтов.
В Selenium часто применяются Thread.sleep или
WebDriverWait для синхронизации, что увеличивает сложность
и время тестов. Playwright предлагает автоожидания:
page.goto() ждёт полной загрузки
страницы.click,
fill) автоматически ожидают доступности
элементов.page.waitForSelector или
page.waitForResponse.Пример клика с ожиданием:
await page.click('button#submit', { timeout: 5000 });
await page.waitForSelector('text=Успешно');
Автоожидания снижают вероятность
ElementNotInteractableException, типичной для Selenium.
Selenium использует WebElement, Playwright —
Locator. Locator позволяет повторно использовать логику
поиска и поддерживает цепочку действий:
const loginButton = page.locator('button#login');
await loginButton.click();
await loginButton.hover();
Особенности Locator:
await loginButton.waitFor({ state: 'visible' }).Playwright расширяет возможности селекторов:
text=, role=, has-text=.page.locator('div', { hasText: 'Пример' }).Это упрощает миграцию сценариев, где в Selenium использовались сложные XPath выражения.
Selenium требует отдельного драйвера для каждого браузера. Playwright поддерживает:
const { chromium, firefox, webkit } = require('playwright');
Одинаковый API для всех браузеров позволяет запускать один и тот же тест без изменений.
Selenium использует синхронные вызовы через WebDriver, Playwright —
асинхронные Promise:
await page.fill('#username', 'user123');
await page.click('#submit');
Для миграции важно заменить все синхронные методы Selenium на асинхронные конструкции Playwright. Это повышает стабильность и позволяет параллельно запускать несколько тестов.
Playwright поддерживает встроенную запись скриншотов и видео:
await page.screenshot({ path: 'screenshot.png', fullPage: true });
Также можно автоматически сохранять видео сессий для последующего анализа, чего в Selenium нужно реализовывать сторонними инструментами.
Playwright тесно интегрирован с @playwright/test,
который поддерживает:
Пример параллельного запуска:
import { test } from '@playwright/test';
test('проверка логина', async ({ page }) => {
await page.goto('https://example.com/login');
await page.fill('#username', 'user');
await page.fill('#password', 'pass');
await page.click('#submit');
await page.waitForSelector('text=Добро пожаловать');
});
async/await.Playwright обеспечивает более современный подход к автоматизации тестирования, упрощает работу с элементами, управляет ожиданиями и позволяет писать стабильные параллельные тесты. Миграция с Selenium требует понимания асинхронной модели и новых абстракций, но взамен повышает надежность и масштабируемость тестового покрытия.