Структура файла protractor.conf.js

Файл protractor.conf.js является основным конфигурационным файлом для работы Protractor — фреймворка для end-to-end тестирования Angular и не-Angular приложений на JavaScript. Он управляет поведением тестов, настройками браузера, путями к тестовым файлам и интеграцией с различными инструментами. Рассмотрим подробно его ключевые элементы.


1. Экспорт конфигурации

В основе файла лежит объект конфигурации, который экспортируется с помощью exports.config:

exports.config = {
    // параметры конфигурации
};

Внутри этого объекта указываются все настройки тестового окружения: пути к тестам, браузеры, таймауты, фреймворк для тестов и др.


2. Определение тестов и путей к ним

Ключевые свойства:

  • specs — массив файлов или паттернов, указывающий на тестовые спецификации:
specs: [
    './tests/**/*.spec.js'
],
  • exclude — массив файлов, которые необходимо исключить из выполнения:
exclude: [
    './tests/old_tests/**/*.spec.js'
],

Использование шаблонов (globs) позволяет удобно структурировать проект и запускать отдельные группы тестов.


3. Настройки браузера (capabilities)

Секция capabilities определяет браузер, в котором будут выполняться тесты, и его параметры:

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

Основные моменты:

  • browserName — название браузера (chrome, firefox, edge).
  • chromeOptions / moz:firefoxOptions — дополнительные параметры запуска браузера.
  • maxInstances — максимальное количество параллельных сессий браузера.
  • Для тестирования нескольких браузеров используется массив multiCapabilities.

4. Фреймворк тестирования

Protractor поддерживает различные фреймворки, но наиболее часто используется Jasmine. Настройка производится через framework:

framework: 'jasmine',
jasmineNodeOpts: {
    showColors: true,
    defaultTimeoutInterval: 30000,
    print: function() {}
},

Подробности:

  • showColors — отображение цветного вывода в консоли.
  • defaultTimeoutInterval — таймаут ожидания выполнения теста в миллисекундах.
  • print — функция для кастомного логирования результатов тестов.

Для Mocha или Cucumber используется аналогичная настройка через framework: 'mocha' или framework: 'custom' с указанием адаптера.


5. Базовый URL и синхронизация Angular

  • baseUrl задает адрес, на котором запускаются тестируемые страницы:
baseUrl: 'http://localhost:4200/',
  • onPrepare — функция, выполняемая перед запуском тестов, часто используется для глобальных настроек:
onPrepare: function() {
    browser.waitForAngularEnabled(true);
    browser.manage().window().maximize();
},

Основные возможности onPrepare:

  • Отключение/включение синхронизации с Angular (waitForAngularEnabled).
  • Инициализация глобальных библиотек (chai, expect, protractor-helper).
  • Настройка размеров окна браузера и скриншотов при падении теста.

6. Таймауты и ожидания

Protractor использует несколько типов таймаутов:

allScriptsTimeout: 11000,
getPageTimeout: 10000,
  • allScriptsTimeout — время ожидания выполнения любого скрипта в браузере.
  • getPageTimeout — время ожидания загрузки страницы через browser.get().

Эти значения важны для стабильности тестов, особенно при работе с динамическим контентом.


7. Логирование и отчеты

Protractor позволяет подключать различные репортеры. Наиболее распространенный способ через onPrepare:

onPrepare: function() {
    var jasmineReporters = require('jasmine-reporters');
    jasmine.getEnv().addReporter(new jasmineReporters.JUnitXmlReporter({
        savePath: 'testresults',
        consolidateAll: false
    }));
},

Задачи репортера:

  • Формирование отчета в XML или HTML.
  • Возможность интеграции с CI/CD (Jenkins, GitLab CI).

8. Параметры и глобальные переменные

params — объект для передачи глобальных переменных в тесты:

params: {
    login: {
        username: 'admin',
        password: '1234'
    },
    apiUrl: 'http://localhost:3000/api'
},

Использование: browser.params.login.username. Удобно для хранения данных авторизации или настроек окружения.


9. Дополнительные возможности

  • seleniumAddress — адрес работающего Selenium Server:
seleniumAddress: 'http://localhost:4444/wd/hub',
  • directConnect — использование прямого соединения с браузером без Selenium Server:
directConnect: true,
  • exclude — файлы для исключения из выполнения.

  • plugins — подключение плагинов для Protractor:

plugins: [{
    package: 'protractor-console-plugin',
    logLevels: ['SEVERE']
}],

10. Примеры комплексной конфигурации

exports.config = {
    directConnect: true,
    baseUrl: 'http://localhost:4200/',
    specs: ['./tests/**/*.spec.js'],
    capabilities: {
        browserName: 'chrome',
        chromeOptions: {
            args: ['--headless', '--disable-gpu', '--window-size=1920,1080']
        }
    },
    framework: 'jasmine',
    jasmineNodeOpts: {
        defaultTimeoutInterval: 30000,
        showColors: true
    },
    onPrepare: function() {
        browser.waitForAngularEnabled(true);
        browser.manage().window().maximize();
    },
    allScriptsTimeout: 11000,
    getPageTimeout: 10000,
    params: {
        login: {
            username: 'admin',
            password: '1234'
        }
    }
};

Этот пример демонстрирует стандартную настройку для Angular приложения с Jasmine, Chrome в headless режиме и глобальными параметрами.


Файл protractor.conf.js является гибкой точкой настройки тестового окружения. Правильная структура и использование ключевых опций позволяют создавать стабильные, масштабируемые и легко поддерживаемые end-to-end тесты на Protractor.