javascript42
Главная
Все учебники
Блог
Учебник Protractor
Введение в автоматизацию тестирования
История и эволюция Protractor
Место Protractor в экосистеме тестирования JavaScript
Сравнение с Selenium WebDriver и другими фреймворками
Основные преимущества и ограничения
Когда использовать Protractor, когда искать альтернативы
Основы и установка
Требования к системе
Установка Node.js и npm
Установка Protractor
Загрузка и настройка WebDriver
Проверка корректности установки
Структура директорий проекта
Архитектура и концепции
Как работает WebDriver
End-to-End тестирование: основные принципы
Асинхронное выполнение в Protractor
Модель ожидания и синхронизация
Элементы, локаторы и взаимодействие с DOM
Различие между браузером и фреймворком
Конфигурация Protractor
Структура файла protractor.conf.js
Параметры браузера и возможности
Настройка WebDriver и сервера
Множественные браузеры в одном запуске
Параметры таймаутов
Логирование и вывод результатов
Переменные окружения и параметризация
Профили конфигурации
Локаторы и стратегии поиска элементов
by.id()
by.name()
by.className()
by.tagName()
by.css()
by.xpath()
by.model() — специфичный для Angular
by.binding() — специфичный для Angular
by.repeater() — специфичный для Angular
by.buttonText()
by.partialButtonText()
by.linkText()
by.partialLinkText()
by.exactRepeater() — специфичный для Angular
Комбинирование локаторов
Best practices выбора локаторов
Проблемы с хрупкими локаторами
Работа с элементами
Поиск одного элемента
Поиск множества элементов
Навигация по элементам
Методы взаимодействия: click()
Методы взаимодействия: sendKeys()
Методы взаимодействия: clear()
Методы взаимодействия: submit()
Получение текста элемента
Получение атрибутов элемента
Проверка видимости элемента
Проверка присутствия элемента в DOM
Получение CSS свойств
Размеры и позиция элемента
Методы mouseMove и hover
Double-click и context меню
Drag and drop операции
Работа с браузером
Методы браузера browser.get()
Навигация: back(), forward(), refresh()
Управление окном: maximizeWindow(), resizeWindow()
Получение текущего URL
Выполнение JavaScript в контексте браузера
Работа с cookies
Работа с localStorage и sessionStorage
Управление логами браузера
Получение информации о браузере
Создание скриншотов
Переключение между окнами и табами
Управление алёртами и диалогами
Явные и неявные ожидания
Проблема синхронизации
Implicit waits: неявные ожидания
Explicit waits: явные ожидания
ExpectedConditions: стандартные условия ожидания
Кастомные условия ожидания
Timeout и обработка ошибок при ожидании
Best practices для ожидания элементов
Ожидание изменения текста элемента
Ожидание исчезновения элемента
Ожидание URL изменения
Ожидание JavaScript выполнения
Ожидание Angular готовности
Работа с Angular приложениями
Что такое Angular и как Protractor его видит
Концепция Angular-специфичных локаторов
Синхронизация с Angular: автоматическое ожидание
Отключение Angular синхронизации
Работа с Angular биндингами
Работа с Angular моделями
Работа с Angular повторителями
Работа с ng-repeat структурами
Работа с Angular сервисами и инжектором
Доступ к Angular scope
Работа с Promise в Angular приложениях
Тестирование прямых Angular компонентов
Обработка асинхронности
Callbacks и Promise
async/await в тестах
Цепочки Promise
Control flow: управление потоком выполнения
Обработка ошибок в асинхронном коде
Timeout и reject обработка
Дебаунс и дросселирование в тестах
Структура и организация тестов
Page Object Model паттерн
Создание Page Object классов
Инкапсуляция селекторов
Методы Page Objects
Наследование Page Objects
Базовые классы для переиспользования кода
Организация файловой структуры
Разделение на суиты и спеки
Конвенции именования файлов и методов
Каркас и организация тестового кода
Структура test spec файла
describe() блоки
it() тестовые случаи
beforeEach() и afterEach() хуки
before() и after() глобальные хуки
beforeAll() и afterAll()
Организация вложенных describe блоков
Игнорирование тестов: xit() и xdescribe()
Фокусировка на тестах: fit() и fdescribe()
Assertions и проверки
Использование встроенных Jasmine ассертов
expect() синтаксис
Проверка на истинность/ложность
Сравнение значений: toBe() и toEqual()
Проверка типов данных
Проверка содержимого массивов
Проверка на наличие свойств объекта
Проверка текста элементов
Проверка видимости элементов
Проверка атрибутов
Проверка CSS классов
Кастомные матчеры
Использование Chai как альтернативы
Использование других assertion библиотек
Работа с формами
Заполнение текстовых полей
Выбор опций из dropdown
Работа с чекбоксами
Работа с радио кнопками
Отправка форм
Валидация ошибок формы
Очистка полей
Работа с файловыми загрузками
Работа с датапикерами и календарями
Работа с мультиселектами
Обработка фокуса и blur событий
Работа с таблицами и списками
Получение всех строк таблицы
Поиск конкретной строки
Итерация по элементам таблицы
Работа с пагинацией
Фильтрация данных таблицы
Сортировка таблиц
Работа с раскрывающимися строками
Работа с вложенными таблицами
Работа с динамически загружаемыми данными
Проверка последовательности строк
Работа с JavaScript и выполнение кода
Выполнение JS в контексте браузера
Работа с возвращаемыми значениями
Доступ к глобальным переменным
Модификация DOM через JavaScript
Вызов функций приложения
Работа с jQuery если используется
Обход ограничений WebDriver через JS
Производительность и оптимизация JS выполнения
Работа с окнами и фреймами
Переключение между окнами
Получение списка всех окон
Работа с popup окнами
Закрытие окон
Работа с фреймами
Работа с iframe
Возврат в главное содержимое
Работа с вложенными фреймами
Обработка диалогов и алёртов
Работа с alert()
Принятие алёртов
Отклонение алёртов
Получение текста из алёрта
Работа с confirm диалогами
Работа с prompt диалогами
Ввод текста в prompt
Обработка неожиданных диалогов
Работа с навигацией и URL
Переход по URL
История браузера
Переход назад и вперёд
Проверка загрузки страницы
Работа с якорями и фрагментами URL
Проверка параметров запроса
Тестирование перенаправлений
Обработка ошибок и исключений
Типы ошибок в Protractor
TimeoutError обработка
ElementNotFound обработка
Stale Element обработка
Обработка исключений в тестах
Try-catch блоки
Глобальная обработка ошибок
Логирование ошибок
Скриншоты при ошибках
Восстановление после ошибок
Логирование и отладка
Использование console.log в тестах
Встроенное логирование Protractor
Конфигурация уровня логирования
Логирование взаимодействий с браузером
Логирование локаторов
Логирование исключений
Использование debugger
Пошаговое выполнение тестов
Вывод информации о браузере
Анализ логов WebDriver
Скриншоты и видео
Создание скриншотов вручную
Создание скриншотов при ошибках
Сохранение скриншотов с временными метками
Сравнение скриншотов
Запись видео тестов
Настройка видео параметров
Использование скриншотов в отчётах
Page Object Model продвинутые техники
Множественное наследование
Композиция Page Objects
Фабрики Page Objects
Синглтоны для общих компонентов
Переиспользование компонентов
Page Object для модальных окон
Page Object для меню и навигации
Page Object для карусели и слайдеров
Управление состоянием в Page Objects
Тестирование с помощью Page Objects
Работа с данными и параметризация
Внешние источники данных
CSV файлы для тестирования
JSON файлы для тестирования
Подключение базы данных
Использование fixtures
Параметризованные тесты
Data-driven тестирование
Комбинаторное тестирование
Работа со специальными элементами
Работа с select элементами
Работа с автокомплитом
Работа с date pickers
Работа с слайдерами
Работа с графиками и SVG
Работа с медиа элементами
Работа с кастомными компонентами
Работа с веб-компонентами
Производительность и оптимизация
Профилирование тестов
Определение узких мест
Оптимизация локаторов
Уменьшение количества ожиданий
Параллельное выполнение тестов
Кэширование Page Objects
Переиспользование браузерной сессии
Минимизация DOM запросов
Работа с различными браузерами
Кросс-браузерное тестирование
Особенности Chrome
Особенности Firefox
Особенности Safari
Особенности Internet Explorer / Edge
Запуск на разных браузерах
Условное тестирование по браузеру
Обработка различий между браузерами
Работа с мобильными приложениями
Appium интеграция
Тестирование мобильных версий сайтов
Эмуляция мобильных устройств
Тестирование на реальных мобильных девайсах
Сенсорные жесты: tap, swipe, pinch
Ориентация экрана
Вибрация и уведомления
Работа с мобильными клавиатурами
Интеграция с фреймворками CI/CD
Запуск Protractor в CI окружении
Jenkins интеграция
GitLab CI интеграция
GitHub Actions интеграция
Azure DevOps интеграция
Docker контейнеры для тестов
Управление артефактами тестов
Публикация результатов
Отчётность и результаты
Встроенные отчёты Protractor
Jasmine отчётность
HTML отчёты
Создание кастомных отчётов
Интеграция с третьесторонними инструментами
Allure отчёты
Cucumber отчёты
Анализ результатов тестов
Behavior-Driven Development с Protractor
Gherkin синтаксис
Cucumber.js интеграция
Написание feature файлов
Step definitions
Связь шагов с тестами
Параметризация в Gherkin
Таблицы данных в scenarios
Hooks и обработка сценариев
Тегирование сценариев
Расширенные техники тестирования
Monkey testing
Фаззинг
Property-based testing
Snapshot testing
Visual testing
API тестирование вместе с UI тестами
Работа с real-time данными
Тестирование WebSockets
Тестирование Service Workers
Работа с безопасностью и приватностью
Тестирование HTTPS
Работа с сертификатами
Тестирование двухфакторной аутентификации
Тестирование кэша браузера
Работа с приватным режимом
Тестирование CORS
Обработка конфиденциальных данных в тестах
Cookie и session безопасность
Отладка сложных сценариев
Идентификация flaky тестов
Понимание race conditions
Синхронизационные проблемы
Проблемы с локаторами
Проблемы с ожиданиями
Обработка динамического содержимого
Отладка JavaScript ошибок приложения
Лучшие практики
Написание поддерживаемых тестов
Избегание common pitfalls
Принципы DRY
Правильное использование waits
Надёжные локаторы
Чистый код в тестах
Документирование тестов
Версионирование тестов
Миграция и обновление
Миграция с Protractor на другие фреймворки
Обновление версии Protractor
Breaking changes в новых версиях
Совместимость с новыми версиями Angular
Обновление депендентов
Рефакторинг старых тестов
Стратегия постепенного обновления