Protractor — это инструмент для энд-ту-энд тестирования Angular и AngularJS приложений. Центральной частью работы с Protractor является конфигурационный файл, который задаёт параметры запуска тестов, браузеры, пути к спецификациям и множество других опций. Одной из ключевых возможностей является использование профилей конфигурации, позволяющих создавать разные сценарии запуска тестов без необходимости менять основной конфигурационный файл.
Конфигурационный файл Protractor обычно пишется на JavaScript и
экспортируется через exports.config. Простейший пример:
exports.config = {
framework: 'jasmine',
seleniumAddress: 'http://localhost:4444/wd/hub',
specs: ['specs/**/*.spec.js'],
capabilities: {
browserName: 'chrome'
}
};
Здесь задаются:
framework — тестовый фреймворк (Jasmine, Mocha,
Cucumber);seleniumAddress — адрес сервера Selenium;specs — путь к тестовым файлам;capabilities — характеристики браузера, в котором будут
запускаться тесты.Для разных целей (локальная разработка, CI/CD, тестирование в разных браузерах) менять эти значения вручную неудобно. Для этого применяются профили конфигурации.
Профиль конфигурации — это отдельный объект конфигурации или файл, который наследует общие параметры и переопределяет только необходимые. Простейший способ реализации — создание нескольких конфигурационных файлов и выбор нужного при запуске:
protractor conf/local.conf.js
protractor conf/ci.conf.js
local.conf.js может содержать:
exports.config = {
baseUrl: 'http://localhost:4200',
capabilities: {
browserName: 'chrome'
},
specs: ['specs/unit/**/*.spec.js']
};
А ci.conf.js:
exports.config = {
baseUrl: 'http://ci-server:4200',
capabilities: {
browserName: 'firefox'
},
specs: ['specs/e2e/**/*.spec.js']
};
Такой подход упрощает поддержку разных сред и задач тестирования.
Для более удобного управления можно использовать один
конфигурационный файл с объектом profiles и логикой выбора
профиля через переменную окружения:
const profiles = {
local: {
baseUrl: 'http://localhost:4200',
capabilities: { browserName: 'chrome' },
specs: ['specs/unit/**/*.spec.js']
},
ci: {
baseUrl: 'http://ci-server:4200',
capabilities: { browserName: 'firefox' },
specs: ['specs/e2e/**/*.spec.js']
}
};
const profileName = process.env.TEST_PROFILE || 'local';
exports.config = {
framework: 'jasmine',
seleniumAddress: 'http://localhost:4444/wd/hub',
...profiles[profileName]
};
Запуск с профилем ci:
TEST_PROFILE=ci protractor conf/profiles.conf.js
Этот подход позволяет централизованно хранить конфигурацию и минимизировать дублирование.
Capabilities — важная часть конфигурации, отвечающая за браузер и его свойства. При использовании профилей можно менять:
browserName (chrome, firefox, safari);chromeOptions (например, запуск в headless режиме,
установка аргументов командной строки);firefoxOptions (профили Firefox, отключение
уведомлений, headless режим).Пример для Chrome в headless:
capabilities: {
browserName: 'chrome',
chromeOptions: {
args: ['--headless', '--disable-gpu', '--window-size=1920,1080']
}
}
Для CI-сред профили с headless запуском часто используют для ускорения тестов и экономии ресурсов.
Профили конфигурации особенно полезны при автоматизации через CI/CD. В разных этапах конвейера можно использовать разные профили:
Переключение между профилями в CI выполняется через переменные окружения или аргументы командной строки, что позволяет полностью автоматизировать процесс без изменений исходного кода.
Protractor позволяет конфигурировать тесты динамически, используя
функции и условия внутри exports.config. Например, можно
выбирать браузер на основе переменной окружения:
exports.config = {
framework: 'jasmine',
seleniumAddress: 'http://localhost:4444/wd/hub',
specs: ['specs/**/*.spec.js'],
capabilities: (() => {
const browser = process.env.BROWSER || 'chrome';
if (browser === 'firefox') {
return { browserName: 'firefox' };
}
return {
browserName: 'chrome',
chromeOptions: { args: ['--headless'] }
};
})()
};
Такой подход сочетает гибкость и компактность, позволяя полностью отказаться от множества отдельных конфигурационных файлов.
Профили конфигурации делают Protractor более управляемым инструментом, позволяя легко переключаться между разными средами, оптимизировать время тестирования и централизованно управлять настройками.