Перейти к основному контенту
Tech Path Finder
КурсыИнтервьюКод-ревьюБлог
Tech Path Finder

Персонализированный путеводитель в IT. Квизы, мок-интервью, код ревью и аналитика прогресса.

@potapov_me

Платформа

  • Курсы
  • Прогресс
  • Мок-интервью
  • Код ревью
  • Живое ревью с ИИ
  • Тренажёр переговоров
  • Закладки

Контент

  • Блог
  • Главная
  • Обратная связь

Компания

  • О проекте
  • Тарифы
  • Условия использования
  • Конфиденциальность
  • Согласие на обработку данных
  • Cookie
  • Реквизиты

Аккаунт

  • Войти
  • Зарегистрироваться
  • Профиль

© 2026 Tech Path Finder. Все права защищены.

·ИП Потапов К.С.·Политика конфиденциальности·
Сделано с ❤️ в России
  1. Введение в Playwright
intro

Введение в Playwright

Установка, настройка окружения, первый тест, запуск в браузере

Введение в Playwright

Playwright — это фреймворк от Microsoft, который позволяет автоматизировать Chromium, Firefox и WebKit через единый API. Он создан для надёжного end-to-end тестирования современных веб-приложений.

#1. Почему Playwright?

До Playwright доминировал Selenium WebDriver. У Selenium есть фундаментальная проблема: тест общается с браузером через HTTP-протокол (WebDriver). Каждый клик — это HTTP-запрос → ответ → следующий запрос. Это медленно и ненадёжно.

Playwright работает напрямую с браузерным процессом через Chrome DevTools Protocol (CDP) и его аналоги для Firefox/WebKit. Связь идёт по WebSocket — мгновенно и с доступом ко всем внутренним событиям браузера.

ХарактеристикаSeleniumPlaywright
ПротоколHTTP (WebDriver)WebSocket (CDP)
СкоростьМедленнееБыстрее
Auto-waitingНет (нужен WebDriverWait)Встроенный
Мульти-вкладкиСложноНативно
Перехват сетиНетВстроенный
Мобильная эмуляцияОграниченаПолная

#2. Установка

Установка состоит из двух шагов. Первый — установка Python-библиотеки, второй — загрузка браузеров.

pip install playwright playwright install

Команда playwright install загружает Chromium, Firefox и WebKit. Если нужен только один браузер — укажите его явно:

playwright install chromium

Рекомендация: в CI/CD устанавливайте только нужный браузер — это экономит время и место.

#3. Синхронный и асинхронный API

Playwright для Python предоставляет два API.

Синхронный API — подходит для простых скриптов и pytest-тестов. Вызовы блокирующие, код читается линейно:

from playwright.sync_api import sync_playwright with sync_playwright() as pw: browser = pw.chromium.launch() page = browser.new_page() page.goto('https://example.com') print(page.title()) browser.close()

Асинхронный API — использует async/await, работает с asyncio. Подходит для интеграции в асинхронные приложения:

import asyncio from playwright.async_api import async_playwright async def main(): async with async_playwright() as pw: browser = await pw.chromium.launch() page = await browser.new_page() await page.goto('https://example.com') print(await page.title()) await browser.close() asyncio.run(main())

Важно: не смешивайте await с sync_api и не используйте синхронные вызовы с async_api. Это вызовет ошибку.

#4. Архитектура: Browser → Context → Page

Понимание иерархии — ключ к эффективному использованию Playwright.

Browser (процесс браузера)
  └── BrowserContext (изолированная сессия)
        └── Page (одна вкладка)
              └── Frame (фрейм внутри страницы)

Browser — запущенный процесс браузера. Создаётся через pw.chromium.launch().

BrowserContext — изолированная среда внутри браузера. Аналог инкогнито-сессии. Каждый контекст имеет собственные cookies, localStorage и sessionStorage. Создаётся через browser.new_context().

Page — одна вкладка браузера. Объект для всех действий: клики, заполнение полей, навигация. Создаётся через context.new_page() или сокращённо browser.new_page().

from playwright.sync_api import sync_playwright with sync_playwright() as pw: browser = pw.chromium.launch(headless=True) # Один браузер — два изолированных контекста context_a = browser.new_context() context_b = browser.new_context() page_a = context_a.new_page() page_b = context_b.new_page() page_a.goto('https://example.com') page_b.goto('https://example.com') # Cookies не пересекаются между контекстами print(len(context_a.cookies())) # свои cookies print(len(context_b.cookies())) # другие cookies browser.close()

Почему это важно? В тестах каждый тест должен быть изолирован. Создавая новый контекст для каждого теста, вы гарантируете, что cookies, localStorage и состояние одного теста не повлияют на другой.

#5. Первый тест

Напишем минимальный тест: открыть страницу, проверить заголовок.

from playwright.sync_api import sync_playwright def test_example_title(): with sync_playwright() as pw: browser = pw.chromium.launch() page = browser.new_page() page.goto('https://example.com') # Проверка заголовка assert page.title() == 'Example Domain' # Проверка наличия элемента assert page.query_selector('h1') is not None browser.close()

Этот тест делает три вещи: запускает браузер, открывает страницу, проверяет два условия. Если хотя бы одно assert не выполнится — тест упадёт.

#6. Запуск с видимым браузером (headed mode)

По умолчанию launch() запускает браузер в headless-режиме — без отображения окна. Для отладки полезно видеть, что происходит:

browser = pw.chromium.launch(headless=False, slow_mo=500)

Параметр slow_mo замедляет каждое действие на 500 мс — вы успеете увидеть, что делает тест. Это незаменимый инструмент при разработке тестов.

Рекомендация: используйте headed=True только при отладке. В CI/CD всегда headless=True.

#7. Playwright Codegen

Самый быстрый способ начать — записать действия через Codegen. Откройте браузер, кликайте, заполняйте формы — Playwright сгенерирует код.

playwright codegen https://example.com

Откроется браузер. Все ваши действия конвертируются в Python-код в соседнем окне. Codegen использует встроенные локаторы (get_by_role, get_by_text), а не хрупкие CSS-селекторы.

#8. Pytest-интеграция

Playwright предоставляет готовый pytest-плагин. Установите его:

pip install pytest-playwright

Теперь тесты пишутся через фикстуры page и browser:

def test_homepage(page): page.goto('https://example.com') assert page.title() == 'Example Domain'

Фикстура page автоматически создаёт браузер, контекст и страницу. После теста контекст закрывается — полная изоляция без ручного управления.

Запуск:

pytest test_example.py --browser chromium

#9. Поддерживаемые браузеры

Playwright поддерживает три движка:

ДвижокБраузерыПлатформы
ChromiumChrome, Edge, OperamacOS, Linux, Windows
FirefoxFirefoxmacOS, Linux, Windows
WebKitSafarimacOS, Linux, Windows

Вы можете запускать одни и те же тесты на всех трёх движках:

for browser_type in ['chromium', 'firefox', 'webkit']: browser = pw[browser_type].launch() page = browser.new_page() page.goto('https://example.com') assert 'Example' in page.title() browser.close()

#10. Типичные ошибки начинающих

❌ Использование time.sleep() вместо auto-waiting. Playwright автоматически ждёт готовности элементов. time.sleep() только замедляет тесты.

❌ Переиспользование page между тестами без очистки. Каждый тест должен создавать свой контекст — иначе состояние одного теста утекает в другой.

❌ Глобальный браузер на уровне модуля. Если один тест закроет браузер, остальные тесты упадут. Создавайте браузер через фикстуры.

✅ Правильный подход: используйте pytest-фикстуры, доверяйте auto-waiting, закрывайте контексты после каждого теста.


#Упражнения

  1. Установите Playwright в виртуальное окружение и запустите playwright install chromium.
  2. Напишите скрипт, который открывает https://example.com и выводит все ссылки на странице.
  3. Запустите Codegen для https://google.com и запишите поиск фразы «playwright testing».
  4. Установите pytest-playwright и напишите pytest-тест, проверяющий заголовок и наличие <h1> на https://example.com.

#Что дальше?

Изучите локаторы и взаимодействие с элементами — это основа всех тестов. Вы научитесь надёжно находить элементы на странице и взаимодействовать с ними.

Далее: Локаторы и взаимодействие с элементами