Protractor — e2e-фреймворк для тестирования веб-приложений на JavaScript, изначально созданный для Angular. Он построен поверх Selenium WebDriver, использует Jasmine, Mocha или Cucumber как тестовые раннеры и тесно интегрирован с механизмами асинхронности Angular. Несмотря на прекращение активного развития, Protractor продолжает использоваться в существующих проектах и учебных курсах, поэтому корректная установка и понимание инфраструктуры остаются важными.
Protractor устанавливается как npm-пакет и требует установленного Node.js.
Проверка установки:
node -v
npm -v
На этапе установки важно учитывать, какие браузеры будут использоваться в тестах:
npm install -g protractor
Плюс:
protractor доступна глобальноМинусы:
npm install --save-dev protractor
Преимущества:
package.jsonПосле установки бинарь доступен через:
npx protractor --version
Protractor исторически использует webdriver-manager для
загрузки и запуска Selenium Server и драйверов браузеров.
Установка:
npm install --save-dev webdriver-manager
Загрузка драйверов:
npx webdriver-manager update
Запуск Selenium Server:
npx webdriver-manager start
По умолчанию будут загружены:
Во многих проектах Selenium Server не используется напрямую. Вместо этого:
Пример установки ChromeDriver:
npm install --save-dev chromedriver
В конфигурации Protractor указывается путь к драйверу или используется автоматическое обнаружение.
Команда:
npx protractor --version
Ожидаемый вывод:
При отсутствии ошибок окружение установлено корректно.
Минимальный конфигурационный файл
protractor.conf.js:
exports.config = {
framework: 'jasmine',
seleniumAddress: 'http://localhost:4444/wd/hub',
specs: ['specs/**/*.spec.js'],
capabilities: {
browserName: 'chrome'
}
};
Ключевые параметры:
npm install --save-dev jasmine
Protractor автоматически подключает Jasmine без дополнительной настройки.
npm install --save-dev mocha chai
Изменение конфигурации:
framework: 'mocha',
mochaOpts: {
reporter: 'spec',
timeout: 30000
}
Для проектов на 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']
Особенности:
Пример конфигурации Chrome:
capabilities: {
browserName: 'chrome',
chromeOptions: {
args: ['--headless', '--disable-gpu', '--window-size=1920,1080']
}
}
Protractor может не работать с слишком новыми версиями Node.js. Использование nvm помогает управлять версиями.
Версия ChromeDriver должна соответствовать версии браузера. Решение:
npx webdriver-manager update --versions.chrome <version>
Изменение порта:
npx webdriver-manager start --port 5555
И соответствующее обновление seleniumAddress.
Типичная структура:
project/
├── node_modules/
├── specs/
│ └── example.spec.js
├── protractor.conf.js
├── package.json
└── package-lock.json
Такая структура обеспечивает изоляцию тестов, конфигурации и зависимостей.
Protractor официально объявлен устаревшим, однако:
Установка и корректная конфигурация являются основой стабильного e2e-тестирования в существующих проектах.