javascript42
Главная
Все учебники
Блог
Учебник Playwright
Введение в Playwright
Что такое Playwright и его место среди инструментов автоматизации
История создания и развитие проекта
Ключевые возможности и преимущества Playwright
Сравнение с Selenium, Puppeteer и Cypress
Архитектура Playwright и принципы работы
Поддерживаемые браузеры и платформы
Когда стоит выбрать Playwright для проекта
Установка и настройка окружения
Требования к системе и зависимости
Установка Node.js и npm
Установка Playwright через npm
Установка браузеров и их бинарных файлов
Настройка первого проекта
Структура директорий проекта
Конфигурационный файл playwright.config.js
Работа с переменными окружения
Настройка IDE для работы с Playwright
Основы работы с Playwright API
Импорт и инициализация библиотеки
Запуск браузера и создание контекста
Открытие и закрытие страниц
Жизненный цикл объектов Browser, Context и Page
Headless и headed режимы
Работа с несколькими браузерами одновременно
Управление viewport и размером окна
Обработка ошибок и исключений
Локаторы и стратегии поиска элементов
Философия локаторов в Playwright
Базовые CSS селекторы
XPath селекторы и их применение
Text селекторы для поиска по тексту
Роль атрибутов в локаторах
Role-based локаторы и доступность
Комбинирование локаторов
Фильтрация элементов с помощью filter и locator
Работа с nth элементами и first/last
Поиск внутри других элементов
Playwright Inspector и генерация локаторов
Взаимодействие с элементами страницы
Очистка полей ввода
Работа с чекбоксами и радио-кнопками
Выбор опций в select элементах
Загрузка файлов через input
Наведение курсора и hover эффекты
Перетаскивание элементов drag and drop
Нажатие клавиш клавиатуры
Комбинации клавиш и модификаторы
Фокусировка на элементах
Прокрутка страницы и элементов
Работа с disabled и readonly элементами
Ожидания и синхронизация
Автоматические ожидания в Playwright
Явные ожидания с waitFor методами
Ожидание видимости элементов
Ожидание состояния элементов
Ожидание навигации и загрузки страницы
Ожидание сетевых запросов
Ожидание функций и условий
Таймауты и их настройка
Стратегии работы с динамическим контентом
Polling и retry механизмы
Работа с фреймами и iframe
Понятие фреймов в веб-страницах
Доступ к фреймам через frameLocator
Переключение контекста между фреймами
Взаимодействие с элементами внутри фреймов
Вложенные фреймы и их обработка
Ожидание загрузки фреймов
Обработка диалоговых окон и всплывающих элементов
Alert, confirm и prompt диалоги
Автоматическое и ручное управление диалогами
Модальные окна и их обработка
Работа с popup окнами и новыми вкладками
Управление контекстом при открытии новых страниц
Before unload диалоги
Навигация и работа с историей браузера
Переход по URL
Перезагрузка страницы
Навигация назад и вперед
Ожидание событий навигации
Работа с якорями и hash-навигацией
Обработка redirects
Сетевые запросы и API тестирование
Перехват сетевых запросов с route
Модификация запросов и ответов
Блокировка определенных ресурсов
Мокирование API ответов
Ожидание конкретных запросов
Анализ сетевого трафика
Работа с WebSocket соединениями
HAR файлы для записи и воспроизведения трафика
Использование APIRequestContext для прямых API вызовов
Интеграция API и UI тестов
Скриншоты и видеозапись
Создание скриншотов страницы
Скриншоты отдельных элементов
Полностраничные скриншоты
Настройка качества и формата изображений
Запись видео выполнения тестов
Настройка параметров видеозаписи
Сохранение артефактов при падении тестов
Оптимизация размера медиафайлов
Работа с cookies и локальным хранилищем
Получение и установка cookies
Удаление cookies
Работа с cookie domains и paths
Session storage и local storage
Манипуляции с данными хранилища
Сохранение и восстановление состояния сессии
Эмуляция устройств и условий
Эмуляция мобильных устройств
Настройка user agent
Эмуляция геолокации
Эмуляция часового пояса и локали
Эмуляция цветовой схемы
Эмуляция сетевых условий
Эмуляция прав доступа
Работа с prefers-reduced-motion и другими media features
Аутентификация и авторизация
Базовая HTTP аутентификация
Работа с формами логина
Сохранение состояния авторизации
Storage state и его использование
Переиспользование сессий между тестами
Работа с токенами и JWT
OAuth и социальные сети
Многобраузерное тестирование
Конфигурация проектов для разных браузеров
Запуск тестов в Chromium, Firefox и WebKit
Специфика работы с разными движками
Условное выполнение кода для браузеров
Отладка браузерно-специфичных проблем
Параллельное выполнение и производительность
Параллелизм на уровне файлов
Параллелизм внутри файла
Workers и их настройка
Управление ресурсами при параллельном запуске
Шардинг тестов для CI/CD
Оптимизация времени выполнения тестов
Повторное использование контекстов браузера
Организация тестового кода
Структурирование тестов
Page Object Model паттерн
Создание переиспользуемых компонентов
Хуки before и after
Фикстуры в Playwright Test
Группировка тестов describe блоками
Тегирование и аннотации тестов
Условное выполнение и пропуск тестов
Зависимости между тестами
Playwright Test Runner
Введение в @playwright/test
Отличия от других test runners
Написание первого теста
Assertions и ожидания
Встроенные матчеры для UI тестирования
Автоматические скриншоты при падении
Трассировка выполнения тестов
Конфигурация test runner
Фильтрация и выбор тестов для запуска
Режим отладки
Отчеты и анализ результатов
Встроенные репортеры
HTML reporter и его возможности
JUnit reporter для CI интеграции
JSON reporter
Создание кастомных репортеров
Анализ упавших тестов
Trace Viewer для детальной диагностики
Интеграция с системами отчетности
Отладка тестов
Playwright Inspector в деталях
Пошаговое выполнение тестов
Использование page.pause
Логирование и вывод отладочной информации
Работа с browser console
DevTools протокол
Отладка в headed режиме
Отладка в IDE с breakpoints
Работа с JavaScript и асинхронностью
Promises и async/await в контексте Playwright
Обработка асинхронных операций
Promise.all для параллельных действий
Обработка race conditions
Работа с таймерами и intervals
Evaluation кода на странице
Выполнение JavaScript на странице
Метод evaluate и его применение
Возврат данных из страницы
evaluateHandle для работы с объектами
Различия между evaluate и evaluateHandle
Выполнение кода в контексте элемента
Работа с Window объектом
Манипуляции с DOM через JavaScript
Ограничения и безопасность
Events и обработка событий
Подписка на события страницы
События навигации
События консоли
События dialogs
События download
События request и response
Кастомные события
Отписка от событий
Ожидание конкретных событий
Загрузка и скачивание файлов
Загрузка файлов через input элементы
Загрузка через drag and drop
Сохранение скачанных файлов
Проверка содержимого файлов
Работа с различными типами файлов
Таймауты при загрузке больших файлов
Accessibility тестирование
Основы веб-доступности
Роль Playwright в accessibility тестировании
Работа с ARIA атрибутами
Проверка доступности элементов
Keyboard navigation тестирование
Screen reader совместимость
Accessibility snapshots
Интеграция с axe-core
Визуальное тестирование
Концепция визуального регрессионного тестирования
Создание baseline скриншотов
Сравнение скриншотов с expect(page).toHaveScreenshot
Настройка threshold и чувствительности
Работа с динамическими элементами
Маскирование областей на скриншотах
Обновление baseline изображений
Хранение и версионирование скриншотов
Визуальное тестирование компонентов
Компонентное тестирование
Component Testing в Playwright
Настройка окружения для компонентных тестов
Монтирование компонентов
Изоляция компонентов
Тестирование React компонентов
Тестирование Vue компонентов
Тестирование Svelte компонентов
Props и events в компонентных тестах
Мокирование зависимостей
Интеграция с CI/CD
Настройка CI пайплайнов для Playwright
GitHub Actions интеграция
GitLab CI конфигурация
Jenkins и Playwright
Docker контейнеры для тестов
Шардинг в CI окружении
Артефакты и отчеты в CI
Оптимизация времени выполнения в CI
Обработка flaky тестов в CI
Docker и контейнеризация
Официальные Docker образы Playwright
Создание кастомного Docker образа
Запуск тестов в контейнере
Volumes и сохранение артефактов
Docker Compose для сложных сценариев
Оптимизация размера образов
Продвинутые техники работы с контекстами
Множественные контексты в одном браузере
Изоляция состояния между контекстами
Переиспользование контекстов
Контексты с различными настройками
Работа с правами доступа на уровне контекста
Работа с WebSocket и real-time коммуникацией
Прослушивание WebSocket соединений
Перехват WebSocket сообщений
Мокирование WebSocket
Тестирование real-time приложений
Server-Sent Events
Работа с Service Workers и PWA
Доступ к Service Workers
Тестирование offline режима
Cache API и тестирование кеширования
Push notifications в тестах
Расширенная работа с сетью
Настройка proxy
Client certificates
Кастомные DNS
HTTP/2 и HTTP/3
Работа с HAR для расширенных сценариев
Безопасность и тестирование уязвимостей
XSS тестирование с Playwright
CSRF проверки
Content Security Policy
Тестирование SSL/TLS
Безопасное хранение credentials
TypeScript и типизация
Настройка TypeScript для Playwright проектов
Типы в Playwright API
Создание типизированных Page Objects
Generic типы для переиспользуемых компонентов
Строгая типизация локаторов
TSConfig оптимизация
Продвинутые паттерны и архитектура
Fluent Page Object Pattern
Component Object Pattern
Service Layer для бизнес-логики
Test Data Builders
Factory паттерн для тестовых объектов
Strategy паттерн для мультибраузерности
Принципы DRY и SOLID в автоматизации
Управление тестовыми данными
Генерация тестовых данных
Faker и другие библиотеки
Fixtures для данных
Работа с базами данных
Подготовка и очистка данных
Независимость тестов от данных
Data-driven тестирование
Работа с внешними API и моками
Интеграция с REST API
GraphQL запросы в тестах
Mock Server Pattern
Использование MSW или JSON Server
Contract Testing основы
Производительность и оптимизация
Профилирование тестов
Идентификация узких мест
Оптимизация селекторов
Кеширование и переиспользование
Ленивая инициализация
Минимизация ожиданий
Батчинг операций
Flaky тесты и стабильность
Причины нестабильности тестов
Стратегии борьбы с flaky тестами
Ретраи и их настройка
Мониторинг стабильности
Статистика прохождения тестов
Изоляция нестабильных тестов
Кроссплатформенное тестирование
Особенности тестирования на разных ОС
Windows специфика
macOS особенности
Linux окружение
Пути к файлам и path resolution
Различия в поведении браузеров по платформам
Локализация и интернационализация
Тестирование мультиязычных приложений
Переключение локалей
RTL языки и их особенности
Форматы дат, времени и чисел
Работа с unicode и различными кодировками
Мобильное тестирование
Эмуляция мобильных браузеров
Touch события и жесты
Viewport конфигурации для мобильных
Тестирование responsive дизайна
Ограничения эмуляции
Расширенная диагностика и логирование
Структурированное логирование
Интеграция с logging библиотеками
Трассировка выполнения
Performance metrics
Сбор метрик браузера
Custom reporters для расширенной аналитики
Миграция с других инструментов
Миграция с Selenium WebDriver
Переход с Puppeteer
Миграция с Cypress
Сравнение API и паттернов
Автоматизация миграции
Типичные проблемы и их решения
Расширение Playwright
Создание кастомных fixtures
Разработка плагинов
Кастомные матчеры
Расширение локаторов
Интеграция с другими библиотеками
Лучшие практики и рекомендации
Принципы написания поддерживаемых тестов
Именование тестов и переменных
Структура проекта
Code review для автотестов
Документирование тестов
Версионирование и обновление зависимостей
Управление техническим долгом
Мониторинг и поддержка тестов
Continuous testing стратегии
Мониторинг прохождения тестов
Алертинг при падении
Анализ тенденций
Метрики качества тестов
Поддержка и развитие test suite
Troubleshooting и решение проблем
Частые ошибки и их решения
Таймауты и как их избежать
Проблемы с селекторами
Проблемы производительности
Debugging зависших тестов
Работа с памятью и утечками
Конфликты зависимостей
Playwright API справочник
Browser API
BrowserContext API
Page API
Locator API
Frame API
ElementHandle API
APIRequestContext API
Route и Request API
Response API
Консольные утилиты