Запуск тестов на конкретных браузерах

WebdriverIO предоставляет гибкие возможности для конфигурации и запуска тестов на различных браузерах. Управление браузерами происходит через capabilities, а также через интеграцию с драйверами браузеров, такими как ChromeDriver, GeckoDriver и EdgeDriver.

Определение capabilities

Capabilities — это объект, который описывает, как должен быть запущен браузер для тестирования. Основные параметры:

exports.config = {
    capabilities: [{
        browserName: 'chrome', // Указываем браузер: 'firefox', 'edge', 'safari'
        'goog:chromeOptions': {
            args: ['--headless', '--disable-gpu', '--window-size=1280,800']
        }
    }],
    logLevel: 'info',
};
  • browserName — имя браузера. В WebdriverIO поддерживаются: chrome, firefox, edge, safari.
  • args в блоке опций позволяют запускать браузер в headless режиме, управлять размером окна, отключать GPU и т.д.
  • Для Firefox используется 'moz:firefoxOptions', для Edge — 'ms:edgeOptions'.

Запуск тестов в нескольких браузерах

WebdriverIO поддерживает запуск параллельных сессий с разными браузерами. Для этого в конфигурации достаточно добавить несколько объектов в массив capabilities:

capabilities: [
    {
        browserName: 'chrome',
        'goog:chromeOptions': { args: ['--window-size=1280,800'] }
    },
    {
        browserName: 'firefox',
        'moz:firefoxOptions': { args: ['-headless'] }
    }
]

Каждый объект создаёт отдельную сессию. Тесты будут выполняться параллельно на указанных браузерах при использовании фреймворка, поддерживающего параллельное выполнение, например Mocha с параметром maxInstances.

Использование переменных окружения

Для гибкого управления браузером часто применяются переменные окружения. Это позволяет запускать тесты на разных браузерах без изменения конфигурации:

const browserName = process.env.BROWSER || 'chrome';

exports.config = {
    capabilities: [{
        browserName: browserName,
        'goog:chromeOptions': { args: ['--headless'] }
    }]
};

Запуск с указанием браузера:

BROWSER=firefox npx wdio run wdio.conf.js

Это особенно удобно для CI/CD систем, где нужно запускать один и тот же тест на разных браузерах.

Настройка размера окна и режима

Размер окна и режим запуска браузера влияет на корректность тестирования, особенно для адаптивного дизайна:

'goog:chromeOptions': {
    args: ['--headless', '--window-size=1920,1080']
}
  • --headless — запуск без GUI, ускоряет тесты и экономит ресурсы.
  • --window-size — задаёт точное разрешение для тестов, что важно для проверки адаптивности интерфейса.

Для Firefox используется аналогичная настройка:

'moz:firefoxOptions': {
    args: ['-headless', '--width=1920', '--height=1080']
}

Учет особенностей браузеров

Каждый браузер имеет свои особенности и ограничения:

  • Chrome — хорошо поддерживает headless, быстрый запуск и стабильные DevTools. Поддерживает расширенные параметры через goog:chromeOptions.
  • Firefox — иногда требует дополнительных аргументов для корректного headless запуска. Опции передаются через moz:firefoxOptions.
  • Edge — базируется на Chromium, поэтому Chrome-опции работают, но с префиксом ms:edgeOptions.
  • Safari — ограничена macOS и не поддерживает headless режим.

Интеграция с Selenium Grid

Для запуска тестов на конкретных браузерах в распределенной среде используется Selenium Grid. WebdriverIO подключается через hostname, port и path:

exports.config = {
    hostname: 'localhost',
    port: 4444,
    path: '/wd/hub',
    capabilities: [{
        browserName: 'chrome',
        'goog:chromeOptions': { args: ['--headless'] }
    }]
};

Можно задавать разные capabilities для разных узлов Grid, чтобы тесты выполнялись на конкретных браузерах и операционных системах.

Параллельный запуск и maxInstances

Для ускорения тестирования WebdriverIO позволяет запускать несколько экземпляров браузера одновременно:

capabilities: [{
    browserName: 'chrome',
    maxInstances: 3,
    'goog:chromeOptions': { args: ['--headless'] }
}]
  • maxInstances — максимальное количество параллельных сессий для одного типа браузера.
  • При комбинировании разных браузеров каждая capability может иметь собственное ограничение по maxInstances.

Выбор браузера в runtime

WebdriverIO поддерживает динамическую смену браузера через сервисы или hooks. Например, можно использовать hook beforeSession:

beforeSession: function (config, capabilities, specs) {
    const browserType = process.env.BROWSER || 'chrome';
    capabilities.browserName = browserType;
}

Такой подход позволяет полностью управлять браузером во время выполнения тестов без изменения конфигурационных файлов.

Рекомендации по стабильности

  • Всегда задавать явный размер окна, особенно при headless запуске.
  • Проверять совместимость опций для разных браузеров.
  • Использовать отдельные профили для Chrome/Firefox, чтобы не конфликтовать с пользовательскими настройками.
  • Для CI/CD лучше использовать headless режим, чтобы тесты проходили быстрее и без визуального интерфейса.

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