Типы ошибок в Protractor

Protractor — специализированный e2e-фреймворк для тестирования Angular-приложений, построенный поверх Selenium WebDriver и Jasmine/Mocha. Его архитектура сочетает асинхронный JavaScript, управление браузером, синхронизацию с Angular и инфраструктуру тест-раннера. В результате ошибки в Protractor могут возникать на разных уровнях: от конфигурации окружения до логики тестов и взаимодействия с DOM. Понимание типов ошибок критично для диагностики нестабильных тестов и корректной поддержки тестового кода.


Ошибки установки и версий

Возникают при несовместимости версий Node.js, Protractor, Selenium Server, WebDriver или браузеров.

Характерные признаки:

  • Ошибки при запуске protractor.conf.js
  • Сообщения о неподдерживаемых версиях
  • Сбои при инициализации драйвера

Типичные причины:

  • Устаревшая версия Protractor при новом Chrome
  • Несовпадение версий webdriver-manager и браузера
  • Использование deprecated-API

Ошибки конфигурационного файла

Связаны с неправильным описанием параметров в protractor.conf.js.

Примеры:

  • Некорректный seleniumAddress
  • Ошибки в capabilities
  • Неверно указанные пути к спекам
  • Отсутствие или конфликт framework (jasmine/mocha)

Проявления:

  • Тесты не запускаются
  • Не поднимается браузер
  • Игнорируются спеки или хуки

Ошибки синхронизации

Timeout-ошибки

Один из самых распространённых типов ошибок.

Сообщения:

  • TimeoutError: Wait timed out after ...
  • Error: Waiting for element to be clickable failed

Причины:

  • Элемент не появился в DOM
  • Неправильное ожидание
  • Асинхронные операции выполняются дольше заданного таймаута

Ключевая особенность: Даже при автоматической синхронизации Protractor с Angular таймауты остаются возможными.


Ошибки Angular-синхронизации

Protractor ожидает завершения $http и $timeout, но не всегда может корректно определить состояние приложения.

Проявления:

  • Тест зависает
  • Ошибка Angular could not be found on the page
  • Непредсказуемые флейки-падения

Типичные причины:

  • Приложение не на Angular
  • Использование hybrid-страниц
  • Асинхронные операции вне зоны Angular

Ошибки работы с элементами

Ошибки поиска элементов

Связаны с использованием element, element.all, by.*.

Примеры ошибок:

  • NoSuchElementError
  • Пустой ElementArrayFinder
  • Неверный локатор

Причины:

  • Изменения в DOM
  • Неправильные CSS/XPath-селекторы
  • Динамически создаваемые элементы

Stale Element Reference Error

Ошибка устаревшей ссылки на элемент.

Суть проблемы: DOM был перерисован, а ссылка на элемент осталась прежней.

Проявления:

  • Ошибка при клике или чтении текста
  • Падение теста после навигации или обновления данных

Element Not Interactable

Элемент найден, но с ним невозможно взаимодействовать.

Причины:

  • Элемент скрыт
  • Перекрыт другим элементом
  • Не активен (disabled)

Асинхронные ошибки JavaScript

Неправильная работа с Promise

Protractor использует WebDriverJS и цепочки promise.

Распространённые проблемы:

  • Отсутствие return в ожиданиях
  • Ошибки в then
  • Неожиданный порядок выполнения

Результат:

  • Тест проходит, но логика не выполняется
  • Ошибка появляется после завершения спека

Async/Await ошибки

При использовании async/await возможны логические и синтаксические ошибки.

Примеры:

  • Отсутствие await
  • Использование await вне async
  • Смешивание старого promise-стиля и async/await

Ошибки тестовой логики

Ошибки ожиданий (Expect)

Связаны с некорректными проверками в Jasmine/Mocha.

Типичные случаи:

  • Проверка до выполнения действия
  • Проверка неверного значения
  • Асинхронный expect без ожидания

Ложноположительные и ложноотрицательные тесты

Ошибка не в падении теста, а в его логике.

Причины:

  • Слишком общие проверки
  • Отсутствие негативных сценариев
  • Проверка не того состояния

Ошибки браузера и WebDriver

Ошибки инициализации браузера

Возникают на этапе старта.

Примеры:

  • Браузер не открывается
  • ChromeDriver падает
  • Selenium Server не отвечает

Ошибки выполнения команд

Связаны с передачей команд WebDriver.

Сообщения:

  • UnknownError
  • SessionNotCreatedError
  • WebDriverError

Причины:

  • Краш браузера
  • Потеря соединения
  • Ошибки в драйвере

Ошибки инфраструктуры тестов

Ошибки репортеров

Связаны с генерацией отчётов.

Проявления:

  • Тесты проходят, но отчёт не создаётся
  • Ошибка при завершении раннера

Ошибки хуков

Ошибки в beforeAll, beforeEach, afterEach, afterAll.

Особенность: Одна ошибка в хуке может «завалить» все тесты.


Ошибки устаревшего Protractor

Deprecated-функциональность

Protractor официально находится в режиме поддержки.

Последствия:

  • Ошибки при обновлении браузеров
  • Непредсказуемое поведение
  • Отсутствие фиксов

Классификация по источнику

Условное разделение ошибок:

  • Конфигурационные
  • Синхронизационные
  • DOM-связанные
  • Асинхронные
  • Логические
  • Инфраструктурные

Такое разделение позволяет быстрее локализовать причину сбоя и отличать реальные дефекты приложения от проблем тестового кода или окружения.