Protractor изначально разрабатывался для тестирования Angular-приложений на основе WebDriverJS, что накладывает определённые требования к браузерам и их драйверам. Несмотря на популярность Chrome в автоматизированном тестировании, Firefox остаётся востребованным, поэтому необходимо учитывать особенности его интеграции с Protractor.
Для работы с Firefox требуется Geckodriver — официальный WebDriver для браузеров семейства Mozilla. Geckodriver выполняет роль промежуточного слоя между Protractor и Firefox, обрабатывая команды WebDriver. Основные моменты:
npm install geckodriver) или
скачан вручную с официального сайта Mozilla.protractor.conf.js необходимо указать путь к драйверу или
полагаться на переменную окружения PATH.Пример конфигурации:
exports.config = {
seleniumAddress: 'http://localhost:4444/wd/hub',
capabilities: {
browserName: 'firefox',
'moz:firefoxOptions': {
args: ['--headless'] // запуск в фоновом режиме
}
},
framework: 'jasmine'
};
Firefox имеет ряд отличий в рендеринге и обработке событий:
browser.wait с корректными ожиданиями помогает избежать
ошибок NoSuchElementError.browser.actions().click(element).perform() вместо простого
element.click(), особенно для скрытых элементов или
элементов с CSS-анимациями.Headless-режим в Firefox отличается от Chrome:
Пример включения headless:
'moz:firefoxOptions': {
args: ['-headless', '--width=1920', '--height=1080']
}
Protractor поддерживает настройку логирования через
capabilities и loggingPrefs. Для Firefox
полезно включать подробное логирование Geckodriver:
capabilities: {
browserName: 'firefox',
loggingPrefs: {
browser: 'ALL',
driver: 'ALL'
}
}
Логи помогают выявлять проблемы с кликами, загрузкой страниц или асинхронными элементами.
Использование кастомных профилей позволяет:
Пример создания профиля:
const firefox = require('selenium-webdriver/firefox');
let profile = new firefox.Profile();
profile.setPreference('dom.webnotifications.enabled', false);
let options = new firefox.Options().setProfile(profile);
capabilities: {
browserName: 'firefox',
'moz:firefoxOptions': options
}
waitForAngularEnabled) могут
проявляться сильнее на Firefox из-за различий в таймингах обработки
событий.browser.wait с корректными условиями
ожидания (ExpectedConditions) для повышения
стабильности.Эти особенности делают работу с Firefox в Protractor отличной от Chrome и требуют внимательного подхода к конфигурации и написанию тестов.