Настройка WebDriver и сервера

Protractor — это фреймворк для энд-ту-энд тестирования Angular и AngularJS приложений, построенный поверх WebDriverJS. Для его корректной работы требуется правильная настройка WebDriver и локального сервера Selenium.

Установка Protractor через npm:

npm install -g protractor

Эта команда устанавливает две ключевые утилиты: protractor и webdriver-manager. webdriver-manager используется для управления Selenium Server и драйверами браузеров.


WebDriver и Selenium Server

Protractor взаимодействует с браузером через Selenium WebDriver. Для работы необходим Selenium Server и соответствующие драйверы для браузеров (ChromeDriver, GeckoDriver для Firefox и т.д.).

Обновление WebDriver и Selenium Server:

webdriver-manager update

Эта команда скачивает последние версии Selenium Server и драйверов браузеров.

Запуск Selenium Server:

webdriver-manager start

После запуска сервер будет доступен по адресу http://localhost:4444/wd/hub. Protractor может подключаться к этому серверу либо работать напрямую с браузерными драйверами (ChromeDriver, FirefoxDriver).


Конфигурация Protractor

Файл конфигурации (protractor.conf.js) определяет, как будут запускаться тесты. Основные параметры:

exports.config = {
  // Адрес Selenium Server или 'directConnect: true' для прямого подключения к драйверам
  seleniumAddress: 'http://localhost:4444/wd/hub',
  // directConnect позволяет запускать тесты без отдельного Selenium Server
  directConnect: true,

  // Файлы тестов
  specs: ['tests/*.spec.js'],

  // Используемые браузеры
  capabilities: {
    browserName: 'chrome'
  },

  // Фреймворк для тестов (Jasmine, Mocha, Cucumber)
  framework: 'jasmine',

  // Настройки Jasmine
  jasmineNodeOpts: {
    defaultTimeoutInterval: 30000
  },

  // Опции для работы с Angular приложениями
  onPrepare: function() {
    browser.ignoreSynchronization = false;
  }
};

Прямое подключение vs Selenium Server:

  • directConnect: true упрощает запуск, напрямую используя ChromeDriver или GeckoDriver.
  • seleniumAddress позволяет подключаться к удаленному Selenium Server, что удобно для распределенного тестирования или CI/CD.

Настройка браузеров

Для работы Protractor необходим установленный браузер и соответствующий драйвер.

Chrome:

  • Драйвер: ChromeDriver (устанавливается командой webdriver-manager update).
  • Дополнительные опции через capabilities:
capabilities: {
  browserName: 'chrome',
  chromeOptions: {
    args: ['--headless', '--disable-gpu', '--window-size=1920,1080']
  }
}

Firefox:

capabilities: {
  browserName: 'firefox',
  'moz:firefoxOptions': {
    args: ['-headless']
  }
}

Опции headless позволяют запускать тесты без открытия графического интерфейса браузера, что ускоряет выполнение в CI/CD средах.


Управление ожиданиями и синхронизацией

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

  • browser.wait — ожидание определенного условия:
let EC = protractor.ExpectedConditions;
let button = element(by.id('submit'));
browser.wait(EC.elementToBeClickable(button), 5000);
  • browser.sleep(1000) — временная пауза (не рекомендуется для регулярного использования, только при необходимости).

  • browser.ignoreSynchronization = true — отключение автоматической синхронизации с Angular, если тестируемое приложение не Angular.


CI/CD и параллельное выполнение

Protractor поддерживает параллельный запуск тестов:

multiCapabilities: [
  { browserName: 'chrome' },
  { browserName: 'firefox' }
]
  • Параллельное выполнение ускоряет тестирование.
  • В сочетании с Selenium Grid можно распределять тесты на несколько машин и браузеров.

Диагностика и отладка

  • Логи WebDriver можно включить через seleniumArgs в конфигурации.
  • В случае ошибок важно проверять версии браузера и драйвера — несовпадение часто вызывает сбои.
  • Для локальной отладки можно использовать directConnect: true и запускать браузер в режиме без headless, чтобы видеть действия теста.

Основные рекомендации по настройке

  • Всегда обновлять webdriver-manager перед запуском тестов.
  • Для Angular приложений использовать ignoreSynchronization = false.
  • Для приложений без Angular отключать синхронизацию.
  • Для CI/CD использовать headless режим и multiCapabilities для ускорения тестирования.
  • Контролировать соответствие версий браузера и драйвера.

Эти шаги создают стабильную базу для запуска Protractor-тестов и обеспечивают корректное взаимодействие с браузером и Selenium Server.