javascript42
Главная
Все учебники
Блог
Учебник WebdriverIO
Введение в автоматизацию веб-тестирования
Что такое WebdriverIO
История развития и место в экосистеме тестирования
WebDriver протокол и его спецификация
Альтернативные инструменты и сравнение
Когда использовать WebdriverIO
Установка и начальная настройка
Требования к окружению
Установка Node.js и npm
Установка WebdriverIO через npm
Структура проекта по умолчанию
Конфигурационный файл wdio.conf.js
Выбор браузеров и драйверов
Установка WebDriver драйверов
Основные концепции
WebDriver сессия и её жизненный цикл
Селекторы и способы поиска элементов
Асинхронность и обещания в WebdriverIO
Таймауты и их управление
Контекст выполнения и области видимости
Работа с браузером
Инициализация браузера и управление окном
Навигация по страницам
Управление куками и хранилищем данных
История браузера и её навигация
Управление сессией браузера
Получение информации о браузере
Мобильные браузеры и эмуляция устройств
Поиск элементов
Локаторы CSS
XPath селекторы
Поиск по тексту и атрибутам
Контекстный поиск элементов
Методы поиска одного и нескольких элементов
Цепочки селекторов
Производительность селекторов и оптимизация
Работа с динамически загружаемыми элементами
Взаимодействие с элементами
Клики и двойные клики
Ввод текста и работа с полями ввода
Выбор опций из выпадающих списков
Работа с чекбоксами и радиокнопками
Загрузка файлов
Отправка форм
Наведение мыши и контекстные меню
Перетягивание элементов
Скролл страницы и элементов
Работа с фокусом элемента
Получение информации об элементах
Получение текста элемента
Получение атрибутов
Получение CSS свойств
Размер и позиция элемента
Проверка видимости элемента
Определение типа элемента
Получение значения input полей
Проверка наличия элемента в DOM
Работа с окнами и фреймами
Переключение между окнами
Работа с фреймами и iframes
Получение списка открытых окон
Закрытие окон
Переключение контекста выполнения
Обработка новых вкладок и окон
Обработка ожиданий
Явные ожидания и waitUntil
Неявные ожидания
Ожидание видимости элемента
Ожидание появления элемента в DOM
Ожидание исчезновения элемента
Ожидание наличия текста в элементе
Ожидание выполнения условий
Timeout и обработка их превышения
JavaScript выполнение
Выполнение JavaScript кода на странице
Передача параметров в скрипт
Получение результатов выполнения
Работа с асинхронным JavaScript
Инъекция jQuery и других библиотек
Получение информации о странице через JavaScript
Работа с алертами и окнами диалога
Обработка alert окон
Работа с confirm диалогами
Обработка prompt окон
Получение текста алерта
Принятие и отклонение алертов
Установка текста в prompt
Управление действиями
Класс Actions и его методы
Нажатие кнопок клавиатуры
Комбинации клавиш
Имитация движений мыши
Паузы между действиями
Цепочки действий
Отпускание клавиш и кнопок мыши
Снимки экрана и видео
Создание скриншотов экрана
Скриншоты отдельных элементов
Управление качеством и форматом скриншотов
Запись видео тестов
Сравнение скриншотов
Хранение и организация артефактов
Работа с логами и отладка
Логирование событий
Браузерные логи
Получение логов драйвера
Уровни логирования
Отладка тестов через DevTools
Используемые инструменты отладки
Обработка и анализ логов
Работа с тестовыми фреймворками
Mocha интеграция
Jasmine интеграция
Cucumber/Gherkin поддержка
Структура тестов с разными фреймворками
Hooks для setup и teardown
Параметризация тестов
Пропуск и изоляция тестов
Page Object Model
Принципы Page Object паттерна
Создание страниц классов
Организация селекторов в классах
Методы для взаимодействия со страницей
Наследование и переиспользование кода
Лучшие практики Page Objects
Управление зависимостями между страницами
Работа с данными в тестах
Использование фиксчур для данных
Экспорт и импорт тестовых данных
Работа с JSON файлами
Параметризованные тесты
Управление тестовыми датасетами
Генерирование тестовых данных
Условное выполнение кода
Запуск тестов на конкретных браузерах
Платформ-зависимые проверки
Опциональные шаги тестирования
Прерывание тестов при определённых условиях
Динамическая генерация тестовых сценариев
Управление конфигурацией
Структура wdio.conf.js
Основные параметры конфигурации
Множественные конфигурации
Переменные окружения в конфигурации
Профили конфигурации
Динамическое изменение параметров
Конфигурация для CI/CD
Запуск тестов
Команды для запуска тестов
Запуск отдельных сценариев
Запуск по тегам
Параллельное выполнение тестов
Управление количеством рабочих процессов
Управление количеством экземпляров браузера
Переиспользование браузерной сессии
Отчёты и результаты
Встроенные репортеры
Spec reporter
JSON reporter
HTML reporter
JUnit reporter
AllureReport интеграция
Кастомные репортеры
Публикация результатов тестов
Сервисы WebdriverIO
Что такое сервисы
BrowserStack сервис
Sauce Labs сервис
TestingBot сервис
LambdaTest сервис
LocalStack сервис
Clipboard сервис
Написание кастомного сервиса
Интеграция с Selenium Grid
Установка и запуск Selenium Grid
Подключение к удалённому Grid серверу
Конфигурирование Grid параметров
Управление браузерами через Grid
Оптимизация использования ресурсов
Работа с удалёнными браузерами
Подключение к облачным сервисам
Параметры облачной конфигурации
Управление сессией на облаке
Работа с браузерными комбинациями
Получение информации о браузере в облаке
Локальные и мобильные тесты
Тестирование на локальных браузерах
Эмуляция мобильных устройств
DevTools Protocol использование
Appium интеграция
Тестирование нативных приложений
Возможности и ограничения мобильного тестирования
Работа с производительностью
Получение метрик производительности
Использование Performance API
Анализ времени загрузки
Проверка времени отклика приложения
Мониторинг использования памяти
Интеграция с инструментами мониторинга
Обработка ошибок и исключений
Типы ошибок в WebdriverIO
Try-catch блоки в тестах
Обработка таймаутов
Обработка ошибок сессии
Обработка ошибок элементов
Graceful деградация тестов
Логирование ошибок
Структурирование больших проектов
Организация файлов и папок
Разделение тестов по модулям
Создание утилит и хелперов
Управление конфигурациями
Переиспользование кода между проектами
Монорепозитории для тестов
Версионирование фреймворка
Параллелизм и оптимизация
Распределение тестов между машинами
Максимизация использования ресурсов
Управление очередью тестов
Балансировка нагрузки
Оптимизация времени выполнения
CI/CD интеграция
Интеграция с Jenkins
GitHub Actions и WebdriverIO
GitLab CI конфигурация
CircleCI и автоматизация
Docker контейнеризация тестов
Управление артефактами в CI
Уведомления о результатах тестов
Лучшие практики
Написание надёжных тестов
Избежание flaky тестов
Управление зависимостями между тестами
Изоляция тестов и данных
Явные ожидания вместо неявных
Избежание hard-coded задержек
Использование правильных селекторов
Тестовая пирамида
Баланс между unit и e2e тестами
Документирование тестов
Отладка и решение проблем
Диагностика проблем с селекторами
Проблемы с таймаутами
Проблемы с элементами вне видимости
Фликеринг тестов и их решение
Проблемы с браузером и сессией
Использование DevTools для отладки
Логирование и трассировка проблем
Восстановление после сбоев
Асинхронное программирование
Promise и их использование
Async/await синтаксис
Управление цепочками операций
Обработка множественных асинхронных операций
Таймауты в асинхронном коде
Отмена операций
Error handling в асинхронном коде
Расширенные селекторы
CSS Selectors продвинутые техники
XPath продвинутые техники
ARIA селекторы и доступность
Shadow DOM селекторы
Работа с сложными структурами
Производительность селекторов
Тестирование безопасности
HTTPS и сертификаты
Работа с самоподписанными сертификатами
Basic authentication
OAuth и современные механизмы авторизации
Проверка безопасности заголовков
CORS и кросс-доменные запросы
Тестирование доступности
WCAG стандарты
Проверка контраста цветов
Навигация с клавиатуры
Работа со скринридерами
Альтернативный текст и изображения
Семантическая разметка HTML
Интеграция инструментов доступности
Работа с API запросами
Интеграция HTTP клиентов
Подготовка данных через API
Проверка API ответов
Mock запросы в тестах
Работа с авторизацией
Обработка сетевых ошибок
Тестирование Progressive Web Apps
Работа с Service Workers
Offline функциональность
Web Manifest проверка
Push notifications тестирование
Caching стратегии
Установка PWA приложений
Работа с Real Device Cloud
CloudBrowser использование
BrowserStack Real Device
Sauce Labs Device Cloud
Тестирование на реальных устройствах
Управление физическими устройствами
Локализация и региональные тесты
Автоматизация кроссбраузерного тестирования
Браузерные комбинации
Версионирование браузеров
Операционные системы и версии
Автоматическое определение поддерживаемых браузеров
Матрица тестирования
Условное исключение браузеров
Интеграция с системами управления багами
Создание тикетов в Jira
Интеграция с GitHub Issues
Отправка информации в систему мониторинга
Автоматическое создание отчётов
Присоединение скриншотов к задачам
Тестирование больших форм
Заполнение многошаговых форм
Валидация формы
Управление состоянием формы
Работа с динамическими полями
Загрузка файлов в формы
CAPTCHA обход и обработка
Работа с графиками и визуализацией
Тестирование Canvas элементов
SVG взаимодействие
D3.js графики
Chart.js и другие библиотеки
Проверка визуальной целостности
Работа с WebSockets
Подключение к WebSocket серверам
Отправка и получение сообщений
Слушание событий
Обработка disconnections
Работа с real-time данными
Тестирование чата и обновлений
Управление памятью и ресурсами
Управление браузерными сессиями
Очистка кеша между тестами
Управление куками
Закрытие неиспользуемых ресурсов
Memory leaks и их предотвращение
Профилирование памяти
Тестирование видео и аудио
Работа с HTML5 Video
HTML5 Audio тестирование
Проверка плейбэков
Управление громкостью и качеством
WebRTC тестирование
Работа с drag and drop
Различные подходы к drag and drop
Нативе драг-дроп
jQuery UI drag-drop
HTML5 Drag and Drop API
Работа с файлами через drag-drop
Визуальное тестирование
Concept базовое визуальное тестирование
Pixel perfect проверки
Регионные снимки экрана
Baseline установка и обновление
Конфигурация чувствительности
Работа с плагинами браузера
Установка расширений
Управление плагинами
Interaction с расширениями
Блокировка рекламы в тестах
VPN и прокси расширения
Интеграция с языками программирования
TypeScript в WebdriverIO
Использование типов и интерфейсов
Конфигурация TypeScript
Debugging TypeScript тестов
Работа с стейтфул сценариями
Сохранение состояния между тестами
Использование глобальных переменных
Синхронизация состояния между браузерами
Трансакционное тестирование
Кастомизация WebdriverIO
Написание кастомных команд
Расширение встроенных методов
Создание плагинов
Модификация протокола
Перехват запросов и ответов
Работа с временем
Управление временем в тестах
Mock временных функций
Работа с таймерами
Тестирование time-based функционала
Управление часовыми поясами
Документирование и комментирование
Стили комментирования кода
JSDoc интеграция
Документирование Page Objects
Описание сложных сценариев
Версионирование документации
Миграция с других инструментов
Миграция с Selenium WebDriver
Миграция с Protractor
Миграция с TestCafe
Миграция с Cypress
Сохранение существующих тестов
Производительность и оптимизация
Профилирование тестов
Выявление узких мест
Кэширование результатов
Оптимизация селекторов
Параллельные выполнения
Использование worker процессов
Работа с реактивными приложениями
React приложения тестирование
Vue.js приложения
Angular приложения
Component states и props
Работа с виртуальным DOM
Задержки в рендеринге
Расширенная обработка ошибок
Custom error классы
Восстановление от ошибок
Retry механизмы
Backoff стратегии
Fallback сценарии
Тестирование мультиязычных приложений
Работа с i18n
Смена языка в тестах
RTL языки
Проверка переводов
Региональная локализация
Работа с базами данных
Подготовка данных в БД
Очистка данных после тестов
Прямые запросы к БД
Seed данные для тестов
Транзакции и откаты
Работа с уведомлениями
Email тестирование
SMS и SMS коды
Push уведомления
In-app уведомления
Webhook обработка
Управление браузерным контекстом
Context switching
Multi-window тестирование
Разные браузеры в одном тесте
Управление profile данными
Сохранение и загрузка state
Тестирование Real User Monitoring
Интеграция с RUM сервисами
Сбор metrics
Performance monitoring
User journey tracking
Error tracking
Работа с обновлениями приложения
Тестирование обновлений
Hot reload тестирование
Service worker обновления
Cache invalidation
Версионирование приложения