В Protractor поддержка тестирования в нескольких браузерах одновременно реализуется через конфигурацию multiCapabilities и встроенные возможности параллельного запуска. Это позволяет ускорять выполнение тестов и проверять кросс-браузерную совместимость без необходимости отдельного запуска для каждого браузера.
В стандартной конфигурации Protractor используется параметр
capabilities, который описывает один браузер. Для запуска
тестов в нескольких браузерах одновременно применяется
multiCapabilities. Пример:
exports.config = {
framework: 'jasmine',
seleniumAddress: 'http://localhost:4444/wd/hub',
multiCapabilities: [
{
browserName: 'chrome',
chromeOptions: {
args: ['--window-size=1920,1080']
}
},
{
browserName: 'firefox',
'moz:firefoxOptions': {
args: ['-width=1920', '-height=1080']
}
}
],
specs: ['specs/*.spec.js'],
maxSessions: 2
};
Ключевые моменты:
multiCapabilities описывает
отдельный браузер.maxSessions определяет максимальное количество
параллельных сессий Selenium. Если значение меньше числа браузеров,
Protractor будет запускать тесты последовательно.chromeOptions и moz:firefoxOptions.По умолчанию Protractor распределяет тесты между браузерами
автоматически. Для управления последовательностью можно использовать
свойства shardTestFiles и maxInstances:
multiCapabilities: [
{
browserName: 'chrome',
shardTestFiles: true,
maxInstances: 2
},
{
browserName: 'firefox',
shardTestFiles: true,
maxInstances: 2
}
]
shardTestFiles: true разбивает тесты на отдельные
сессии, позволяя запускать их параллельно.maxInstances ограничивает число параллельных сессий для
конкретного браузера.Это особенно полезно при большом наборе тестов, когда требуется равномерная нагрузка на несколько браузеров.
Protractor поддерживает несколько фреймворков тестирования. В случае параллельного запуска важно учитывать синхронизацию результатов и отчетность:
multiCapabilities необходимо
следить за уникальными именами тестов и корректной генерацией отчетов,
чтобы избежать перезаписи.Protractor использует WebDriverJS, работающий на промисах. При множественных браузерах важно:
async/await внутри тестов, чтобы
избежать гонок данных при параллельном выполнении.beforeAll для
настройки общего состояния — оно должно быть локализовано под конкретный
браузер.Пример асинхронного теста для multiCapabilities:
describe('Тестирование в нескольких браузерах', () => {
it('должен открыть главную страницу', async () => {
await browser.get('https://example.com');
const title = await browser.getTitle();
expect(title).toContain('Example');
});
});
Для реального кросс-браузерного тестирования часто используется Selenium Grid. В этом случае:
seleniumAddress указывает на хаб Grid.multiCapabilities может содержать
platform и version для точного выбора узла
Grid.Пример настройки для Grid:
multiCapabilities: [
{
browserName: 'chrome',
version: '112',
platform: 'WINDOWS'
},
{
browserName: 'firefox',
version: '110',
platform: 'LINUX'
}
]
Параллельные браузеры усложняют логирование, поэтому рекомендуется:
chromeOptions.debuggerAddress или
loggingPrefs.shardTestFiles: true для ускорения выполнения.maxSessions должна соответствовать ресурсам
хоста или Grid.Эта конфигурация позволяет создавать гибкие, масштабируемые и параллельные тестовые наборы, обеспечивая быструю проверку функциональности на нескольких браузерах одновременно.