Работа с приватным режимом

Protractor — это инструмент для энд-ту-энд тестирования Angular и других веб-приложений на основе браузера. Одной из важных задач при автоматизированном тестировании является управление сессиями браузера, в частности запуск тестов в приватном (инкогнито) режиме, что позволяет изолировать тестируемую среду от данных предыдущих сессий, кэша и куки.


Настройка браузера для приватного режима

Protractor использует WebDriver, который позволяет передавать опции запуска браузера. Для Google Chrome приватный режим активируется с помощью аргумента --incognito. Настройка в файле конфигурации protractor.conf.js выглядит следующим образом:

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

Ключевые моменты:

  • --incognito — включает приватный режим.
  • --disable-extensions — предотвращает влияние расширений браузера на тесты.
  • chromeOptions — объект для передачи всех специфичных для Chrome настроек.

Для Firefox используется аналогичный подход, но с профилем Firefox:

const firefox = require('selenium-webdriver/firefox');

exports.config = {
  capabilities: {
    browserName: 'firefox',
    'moz:firefoxOptions': {
      args: ['-private']
    }
  }
};

Аргумент -private включает приватный режим Firefox.


Влияние приватного режима на тестирование

Приватный режим изменяет несколько ключевых аспектов браузера:

  1. Изоляция кук и сессий Все куки, локальное хранилище и сессии не сохраняются после закрытия окна браузера. Это позволяет проверять сценарии аутентификации без зависимости от предыдущих тестов.

  2. Кэш и данные сайтов Кэш браузера отключён, поэтому страницы загружаются как при первом посещении. Это особенно важно для тестирования динамических изменений на сайте.

  3. Расширения и плагины В большинстве случаев приватный режим отключает сторонние расширения. Это уменьшает вероятность влияния постороннего кода на результат тестов.


Примеры использования в Protractor

  1. Тест аутентификации
describe('Login flow in incognito mode', function() {
  it('should login with valid credentials', async function() {
    await browser.get('https://example.com/login');
    await element(by.id('username')).sendKeys('testuser');
    await element(by.id('password')).sendKeys('password');
    await element(by.id('loginButton')).click();

    const welcomeText = await element(by.css('.welcome')).getText();
    expect(welcomeText).toContain('Welcome, testuser');
  });
});

При запуске этого теста в приватном режиме можно быть уверенным, что никакие куки от предыдущих сессий не повлияют на результат.

  1. Тест очистки данных

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


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

  • Изоляция окружения: каждый тест в приватном режиме автоматически изолирован, поэтому можно безопасно параллельно запускать несколько сессий.
  • Логирование: для отладки важно использовать консольные сообщения, так как приватный режим отключает сохранение истории.
  • Проблемы с производительностью: запуск нескольких окон инкогнито одновременно может потреблять больше ресурсов, чем обычный режим, поэтому планировать параллельные тесты нужно с учётом доступной оперативной памяти.

Настройка глобального или локального приватного режима

Protractor позволяет задавать режим запуска глобально для всего проекта через capabilities или локально для отдельных тестов с использованием browser.restart():

browser.restart().then(function() {
  browser.waitForAngularEnabled(false);
  browser.driver.getCapabilities().then(function(caps) {
    console.log('New incognito session started:', caps.get('browserName'));
  });
});

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


Особенности интеграции с CI/CD

  • В Jenkins или GitHub Actions приватный режим гарантирует, что артефакты предыдущих сборок (куки, кэш) не повлияют на тесты.
  • В Docker-контейнерах можно комбинировать приватный режим с отдельным профилем пользователя для полной изоляции.
  • В cloud-решениях (например, BrowserStack или Sauce Labs) приватный режим помогает избежать конфликта данных между параллельными тестовыми машинами.

Приватный режим в Protractor обеспечивает надёжную и воспроизводимую среду для тестирования веб-приложений. Управление аргументами браузера, грамотное использование изоляции сессий и кэша позволяет создавать стабильные энд-ту-энд тесты, минимизируя влияние внешних факторов на результат.