Особенности Internet Explorer / Edge

Protractor является инструментом для автоматизированного тестирования Angular и AngularJS приложений, но его возможности не ограничиваются только этими фреймворками. При работе с браузерами семейства Microsoft, такими как Internet Explorer (IE) и Edge, появляются специфические нюансы, связанные с их архитектурой, поддержкой стандартов и поведением WebDriver.


Настройка WebDriver для IE и Edge

Для работы с IE используется IEDriverServer, а для Edge — EdgeDriver. Оба драйвера требуют отдельной конфигурации, которая учитывает особенности браузеров.

IEDriverServer:

  • Поддерживает только Windows.
  • Требует точного соответствия версии драйвера и версии браузера.
  • Для корректной работы необходимо настроить Protected Mode для всех зон безопасности одинаково (включено или отключено).
  • Учитывает настройки масштабирования дисплея; значение должно быть 100%.

EdgeDriver:

  • Совместим с Chromium-версией Edge.
  • Для работы с устаревшими версиями Edge (EdgeHTML) используется отдельный драйвер.
  • Необходимость указания пути к драйверу в конфигурации Protractor через edgeOptions.binary или переменные окружения.

Пример конфигурации для IE:

exports.config = {
  capabilities: {
    browserName: 'internet explorer',
    platform: 'ANY',
    version: '11',
    'se:ieOptions': {
      ignoreProtectedModeSettings: true,
      ignoreZoomSetting: true,
      enablePersistentHover: true,
      requireWindowFocus: true
    }
  },
  specs: ['specs/*.spec.js']
};

Пример конфигурации для Edge:

exports.config = {
  capabilities: {
    browserName: 'MicrosoftEdge',
    'ms:edgeOptions': {
      args: ['--start-maximized']
    }
  },
  specs: ['specs/*.spec.js']
};

Особенности синхронизации

Protractor изначально ориентирован на Angular-приложения и использует зонды Angular для автоматической синхронизации с приложением. В IE и старых версиях Edge поведение зон может быть нестабильным, поэтому рекомендуется:

  • Использовать browser.waitForAngularEnabled(false) для отключения автоматической синхронизации, если тестируемый сайт не Angular или возникают ошибки синхронизации.
  • Применять явные ожидания через ExpectedConditions для элементов:
const EC = protractor.ExpectedConditions;
const button = element(by.id('submitBtn'));
browser.wait(EC.elementToBeClickable(button), 5000);
button.click();

Поддержка событий и взаимодействий

IE и Edge обрабатывают события браузера иначе, чем Chrome или Firefox. Некоторые особенности:

  • Клики могут не срабатывать на невидимых элементах или при перекрытии другими элементами. Применение browser.actions().mouseMove(element).click().perform() решает проблему.
  • Отправка клавиш (sendKeys) иногда требует явного фокуса на элементе. Использование element.click() перед sendKeys повышает стабильность.
  • Hover-эффекты в IE требуют включения опции enablePersistentHover в настройках IEDriver.

Проблемы с локаторами

IE и Edge имеют ограничения в работе с CSS-селекторами и XPath:

  • Сложные CSS-селекторы с псевдоклассами (:nth-child, :first-of-type) могут работать нестабильно.
  • XPath-локаторы чувствительны к регистру и к пространствам имен.
  • Рекомендуется использовать ID и классы для элементов или простые XPath-выражения.

Пример надежного локатора:

element(by.css('#loginForm input[name="username"]'))

Работа с диалоговыми окнами

IE и Edge обрабатывают диалоговые окна (alert, confirm, prompt) иначе:

  • Методы browser.switchTo().alert() работают, но могут бросать UnhandledAlertError, если окно появляется слишком быстро.
  • Рекомендуется оборачивать вызов в ожидание:
const alertDialog = browser.switchTo().alert();
browser.wait(() => alertDialog.isPresent(), 5000);
alertDialog.accept();

Производительность и стабильность

IE особенно чувствителен к нагрузке DOM и асинхронным операциям:

  • Применение большого количества element.all или сложных фильтров может значительно замедлить тесты.
  • Рекомендуется использовать отдельные блоки ожидания и минимизировать цепочки локаторов.
  • Edge на Chromium работает быстрее и стабильнее, но старый EdgeHTML может иметь проблемы с рендерингом динамических элементов.

Полезные опции Protractor для Microsoft-браузеров

  • ignoreProtectedModeSettings — для IE, отключает проверку зон безопасности.
  • ignoreZoomSetting — для IE, игнорирует масштабирование.
  • requireWindowFocus — активирует фокус окна при взаимодействии с элементами в IE.
  • enablePersistentHover — обеспечивает корректную работу hover-эффектов.
  • args: ['--start-maximized'] — для Edge, открывает окно в максимальном размере.

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