Динамическое изменение параметров

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

Конфигурационный файл wdio.conf.js

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

Пример динамического изменения baseUrl в зависимости от среды:

exports.config = {
    runner: 'local',
    specs: ['./test/specs/**/*.js'],
    baseUrl: process.env.TEST_ENV === 'staging' 
        ? 'https://staging.example.com' 
        : 'https://prod.example.com',
    capabilities: [{
        maxInstances: 1,
        browserName: 'chrome',
        'goog:chromeOptions': {
            args: process.env.HEADLESS === 'true' ? ['--headless', '--disable-gpu'] : []
        }
    }],
    framework: 'mocha',
    mochaOpts: {
        timeout: 60000
    }
};

Ключевой момент: использование переменных окружения позволяет менять параметры без редактирования конфигурации, обеспечивая гибкость при запуске в разных CI/CD пайплайнах.

Динамическая смена браузера и возможностей

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

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

exports.config = {
    capabilities: [{
        maxInstances: 1,
        browserName: browserType,
        'goog:chromeOptions': {
            args: browserType === 'chrome-headless' ? ['--headless', '--disable-gpu'] : []
        }
    }]
};

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

Изменение параметров во время выполнения теста

WebdriverIO предоставляет API для динамического изменения настроек прямо в тесте, например, таймаутов ожидания элементов или размера окна браузера:

describe('Динамические настройки браузера', () => {
    it('изменяет таймаут и размер окна', async () => {
        await browser.setTimeout({ 'implicit': 10000, 'pageLoad': 20000 });
        await browser.setWindowSize(1280, 720);

        await browser.url('/');
        const elem = await $('#dynamic-element');
        await elem.waitForDisplayed();
    });
});

Особенности:

  • setTimeout позволяет менять implicit, pageLoad и script таймауты.
  • setWindowSize и setWindowRect дают полный контроль над размерами окна.
  • Эти изменения применяются только в рамках текущей сессии браузера, не затрагивая глобальную конфигурацию.

Использование условий для динамического поведения тестов

В сложных сценариях тест может изменять свои действия в зависимости от условий, таких как наличие элемента, текущее состояние страницы или конфигурация браузера:

const isMobile = await browser.isMobile;

if (isMobile) {
    await browser.setOrientation('landscape');
} else {
    await browser.setWindowSize(1920, 1080);
}

Преимущества: тесты становятся адаптивными и могут корректно выполняться на разных устройствах без дублирования кода.

Переопределение конфигурации с помощью before и beforeTest

WebdriverIO позволяет выполнять динамические изменения перед запуском сессии или конкретного теста через хуки:

exports.config = {
    before: async (capabilities, specs) => {
        if (process.env.DEBUG === 'true') {
            await browser.setTimeout({ implicit: 30000 });
        }
    },
    beforeTest: async (test, context) => {
        console.log(`Запуск теста: ${test.title}`);
    }
};

Применение хуков:

  • before — изменение параметров до запуска любых тестов.
  • beforeTest — корректировка настроек под конкретный тест.
  • afterTest — восстановление исходных параметров после теста.

Интеграция с CI/CD для динамической конфигурации

С помощью переменных окружения и динамических условий можно полностью адаптировать тестовый прогон под разные среды:

# запуск тестов в продакшене на headless Chrome
TEST_ENV=prod HEADLESS=true BROWSER=chrome npx wdio run wdio.conf.js

# запуск тестов в staging на обычном Chrome
TEST_ENV=staging HEADLESS=false BROWSER=chrome npx wdio run wdio.conf.js

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

Советы по поддержке динамической конфигурации

  • Использовать один основной файл конфигурации, а вариации задавать через переменные окружения или функции.
  • Для часто меняющихся настроек применять хуки (before, beforeTest) вместо ручного редактирования.
  • Всегда проверять совместимость изменяемых параметров с браузером и версией WebdriverIO.
  • Логировать динамически изменяемые параметры для упрощения отладки.

Динамическое управление параметрами делает WebdriverIO мощным инструментом для автоматизированного тестирования, обеспечивая адаптивность тестов, независимость от среды и гибкость при масштабировании проектов.