Protractor является инструментом для автоматизированного тестирования Angular и AngularJS приложений, но его возможности не ограничиваются только этими фреймворками. При работе с браузерами семейства Microsoft, такими как Internet Explorer (IE) и Edge, появляются специфические нюансы, связанные с их архитектурой, поддержкой стандартов и поведением WebDriver.
Для работы с IE используется IEDriverServer, а для Edge — EdgeDriver. Оба драйвера требуют отдельной конфигурации, которая учитывает особенности браузеров.
IEDriverServer:
EdgeDriver:
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 повышает
стабильность.enablePersistentHover в настройках IEDriver.IE и Edge имеют ограничения в работе с CSS-селекторами и XPath:
:nth-child,
:first-of-type) могут работать нестабильно.Пример надежного локатора:
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 или сложных
фильтров может значительно замедлить тесты.ignoreProtectedModeSettings — для IE, отключает
проверку зон безопасности.ignoreZoomSetting — для IE, игнорирует
масштабирование.requireWindowFocus — активирует фокус окна при
взаимодействии с элементами в IE.enablePersistentHover — обеспечивает корректную работу
hover-эффектов.args: ['--start-maximized'] — для Edge, открывает окно
в максимальном размере.Эти особенности необходимо учитывать при проектировании и написании тестов, чтобы обеспечить их стабильность и корректное выполнение в средах Microsoft. Неправильная настройка драйверов или игнорирование специфики браузеров часто приводит к нестабильности тестов и ложным падениям.