Protractor — инструмент для автоматизированного тестирования веб-приложений на основе Angular и AngularJS, но он также поддерживает тестирование обычных веб-приложений. Одной из ключевых задач является проверка корректной работы приложения в разных браузерах и на различных платформах. Кросс-браузерное тестирование позволяет выявить несовместимости, ошибки рендеринга и функциональные сбои, которые могут возникать в разных средах.
Protractor использует файл конфигурации
protractor.conf.js, где задаются основные параметры
тестирования. Для кросс-браузерного тестирования необходимо определить
массив браузеров в параметре multiCapabilities:
exports.config = {
framework: 'jasmine',
seleniumAddress: 'http://localhost:4444/wd/hub',
specs: ['tests/**/*.spec.js'],
multiCapabilities: [
{ browserName: 'chrome' },
{ browserName: 'firefox' },
{ browserName: 'edge' }
]
};
Особенности multiCapabilities:
Если требуется запуск тестов последовательно, используется параметр
capabilities с циклической подстановкой.
Protractor построен поверх Selenium WebDriver, что обеспечивает доступ к нативным функциям браузеров:
Пример настройки специфических опций для Chrome:
multiCapabilities: [
{
browserName: 'chrome',
chromeOptions: {
args: ['--disable-infobars', '--window-size=1920,1080']
}
}
]
Для Firefox используется moz:firefoxOptions, где можно
задавать профиль, отключать уведомления и задавать размеры окна.
Разные браузеры могут по-разному обрабатывать CSS и HTML, поэтому важно учитывать:
id) или атрибуты data-test,
так как классы и пути XPath могут вести себя непредсказуемо в разных
браузерах.getLocation(), getSize() и
isDisplayed() позволяют убедиться, что элементы видимы и
корректно размещены.Пример:
element(by.css('.submit-button')).click();
expect(element(by.id('result')).getText()).toEqual('Success');
Кросс-браузерные тесты особенно чувствительны к таймингам загрузки страниц и реакций элементов. Для стабильности необходимо использовать explicit waits:
let EC = protractor.ExpectedConditions;
let submitButton = element(by.css('.submit-button'));
browser.wait(EC.elementToBeClickable(submitButton), 5000);
submitButton.click();
Преимущества:
Для ускорения кросс-браузерного тестирования используется
shardTestFiles:
multiCapabilities: [
{
browserName: 'chrome',
shardTestFiles: true,
maxInstances: 2
},
{
browserName: 'firefox',
shardTestFiles: true,
maxInstances: 2
}
]
Для тестирования на разных версиях браузеров и операционных системах удобно использовать облачные платформы:
Пример настройки для BrowserStack:
multiCapabilities: [{
'browserName': 'Chrome',
'browser_version': 'latest',
'os': 'Windows',
'os_version': '10',
'resolution': '1920x1080',
'browserstack.user': 'USERNAME',
'browserstack.key': 'ACCESS_KEY'
}]
browser.manage().logs().get('browser') помогает выявлять
ошибки JS, специфичные для браузера.browser.takeScreenshot()
позволяет фиксировать визуальные отличия.console.time() и
console.timeEnd().id и data-test для
стабильности.ExpectedConditions)
для интерактивных элементов.Кросс-браузерное тестирование в Protractor обеспечивает глубокую
проверку функциональности и интерфейса веб-приложений. Комплексная
настройка multiCapabilities, использование ожиданий и
интеграция с облачными сервисами создают основу для надежной
автоматизации и стабильного качества продукта.