Установка Protractor

Protractor — e2e-фреймворк для тестирования веб-приложений на JavaScript, изначально созданный для Angular. Он построен поверх Selenium WebDriver, использует Jasmine, Mocha или Cucumber как тестовые раннеры и тесно интегрирован с механизмами асинхронности Angular. Несмотря на прекращение активного развития, Protractor продолжает использоваться в существующих проектах и учебных курсах, поэтому корректная установка и понимание инфраструктуры остаются важными.


Системные требования

Node.js и npm

Protractor устанавливается как npm-пакет и требует установленного Node.js.

  • Рекомендуемая версия Node.js: LTS
  • npm устанавливается вместе с Node.js

Проверка установки:

node -v
npm -v

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

На этапе установки важно учитывать, какие браузеры будут использоваться в тестах:

  • Google Chrome (ChromeDriver)
  • Mozilla Firefox (GeckoDriver)
  • Microsoft Edge (EdgeDriver)

Установка Protractor

Глобальная установка (устаревающий, но встречающийся вариант)

npm install -g protractor

Плюс:

  • команда protractor доступна глобально

Минусы:

  • проблемы версий
  • не рекомендуется для современных проектов

Локальная установка в проект (рекомендуемый подход)

npm install --save-dev protractor

Преимущества:

  • контроль версии в package.json
  • воспроизводимость окружения
  • отсутствие конфликтов между проектами

После установки бинарь доступен через:

npx protractor --version

Установка и настройка WebDriver

webdriver-manager (классический способ)

Protractor исторически использует webdriver-manager для загрузки и запуска Selenium Server и драйверов браузеров.

Установка:

npm install --save-dev webdriver-manager

Загрузка драйверов:

npx webdriver-manager update

Запуск Selenium Server:

npx webdriver-manager start

По умолчанию будут загружены:

  • Selenium Server
  • ChromeDriver
  • GeckoDriver

Современная альтернатива: прямое использование браузерных драйверов

Во многих проектах Selenium Server не используется напрямую. Вместо этого:

  • Chrome запускается через встроенный ChromeDriver
  • Selenium Grid не требуется

Пример установки ChromeDriver:

npm install --save-dev chromedriver

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


Проверка корректности установки

Команда:

npx protractor --version

Ожидаемый вывод:

  • версия Protractor
  • версия WebDriver
  • версия Node.js

При отсутствии ошибок окружение установлено корректно.


Инициализация базовой конфигурации

Минимальный конфигурационный файл protractor.conf.js:

exports.config = {
  framework: 'jasmine',
  seleniumAddress: 'http://localhost:4444/wd/hub',
  specs: ['specs/**/*.spec.js'],
  capabilities: {
    browserName: 'chrome'
  }
};

Ключевые параметры:

  • framework — тестовый раннер
  • seleniumAddress — адрес Selenium Server
  • specs — путь к тестам
  • capabilities — параметры браузера

Установка тестового фреймворка

Jasmine (по умолчанию)

npm install --save-dev jasmine

Protractor автоматически подключает Jasmine без дополнительной настройки.

Mocha

npm install --save-dev mocha chai

Изменение конфигурации:

framework: 'mocha',
mochaOpts: {
  reporter: 'spec',
  timeout: 30000
}

Поддержка TypeScript (опционально)

Для проектов на TypeScript:

npm install --save-dev typescript ts-node @types/node @types/jasmine

Настройка в protractor.conf.js:

require('ts-node').register({
  project: 'tsconfig.json'
});

Спецификации:

specs: ['specs/**/*.spec.ts']

Установка для CI-окружений

Особенности:

  • запуск браузера в headless-режиме
  • отсутствие GUI
  • фиксированные версии драйверов

Пример конфигурации Chrome:

capabilities: {
  browserName: 'chrome',
  chromeOptions: {
    args: ['--headless', '--disable-gpu', '--window-size=1920,1080']
  }
}

Частые проблемы при установке

Ошибка версии Node.js

Protractor может не работать с слишком новыми версиями Node.js. Использование nvm помогает управлять версиями.

Несовпадение версий Chrome и ChromeDriver

Версия ChromeDriver должна соответствовать версии браузера. Решение:

npx webdriver-manager update --versions.chrome <version>

Порт 4444 занят

Изменение порта:

npx webdriver-manager start --port 5555

И соответствующее обновление seleniumAddress.


Структура проекта после установки

Типичная структура:

project/
├── node_modules/
├── specs/
│   └── example.spec.js
├── protractor.conf.js
├── package.json
└── package-lock.json

Такая структура обеспечивает изоляцию тестов, конфигурации и зависимостей.


Статус и поддержка

Protractor официально объявлен устаревшим, однако:

  • продолжает использоваться в Angular-проектах
  • поддерживает Selenium WebDriver
  • остаётся актуальным для сопровождения легаси-систем

Установка и корректная конфигурация являются основой стабильного e2e-тестирования в существующих проектах.