Передача параметров в скрипт

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


Конфигурационные параметры

Конфигурационный файл wdio.conf.js является центральным местом для задания параметров тестовой среды. В секции capabilities или в глобальных свойствах можно задать значения, которые будут использоваться во всех тестах:

exports.config = {
    baseUrl: 'https://example.com',
    maxInstances: 5,
    capabilities: [{
        browserName: 'chrome',
        'goog:chromeOptions': {
            args: ['--headless', '--disable-gpu']
        }
    }],
    params: {
        login: {
            username: 'testuser',
            password: 'securepass'
        }
    }
};

Ключевой момент — использование объекта params. Он позволяет централизованно хранить данные для тестов, которые можно динамически считывать через browser.config.params:

const username = browser.config.params.login.username;
const password = browser.config.params.login.password;

Это особенно полезно для передачи учетных данных, URL, токенов или других конфигурационных значений.


Передача параметров через командную строку

WebdriverIO поддерживает передачу параметров при запуске через CLI. С помощью флага --suite, --spec, а также пользовательских параметров можно управлять поведением тестов без изменения кода.

Пример запуска с передачей переменной окружения:

npx wdio run wdio.conf.js --baseUrl=https://staging.example.com

В конфигурации это значение можно прочитать через process.argv или через browser.options:

const baseUrl = browser.options.baseUrl || 'https://default.example.com';

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


Переменные окружения

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

export LOGIN_USER=testuser
export LOGIN_PASS=securepass
npx wdio run wdio.conf.js

В тесте можно получить доступ к этим переменным через process.env:

const username = process.env.LOGIN_USER;
const password = process.env.LOGIN_PASS;

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


Динамическая передача параметров внутри тестов

WebdriverIO поддерживает передачу параметров прямо в тестовые функции. Например, с использованием Mocha можно реализовать динамическое создание тестов через forEach или map:

const users = [
    { username: 'user1', password: 'pass1' },
    { username: 'user2', password: 'pass2' }
];

users.forEach(({ username, password }) => {
    it(`Логин для ${username}`, async () => {
        await browser.url('/login');
        await $('#username').setValue(username);
        await $('#password').setValue(password);
        await $('#loginButton').click();
        const successMessage = await $('#success').getText();
        expect(successMessage).toContain('Welcome');
    });
});

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


Передача параметров в сервисы и хуки

Сервисы WebdriverIO и хуки (before, after, beforeTest, afterTest) также могут использовать параметры из конфигурации или переменных окружения.

beforeTest: async (test) => {
    const env = process.env.TEST_ENV || 'staging';
    console.log(`Тест выполняется в окружении: ${env}`);
}

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


Использование параметров с TypeScript

При работе с TypeScript параметры удобно типизировать. Например, для объекта params:

interface LoginParams {
    username: string;
    password: string;
}

const loginParams: LoginParams = browser.config.params.login;

Типизация повышает читаемость кода и предотвращает ошибки при использовании параметров.


Практические рекомендации

  • Централизация параметров: хранить все основные параметры в wdio.conf.js или через переменные окружения.
  • Разделение секретов: не хранить пароли и токены в коде, использовать .env файлы или секретные хранилища CI/CD.
  • Динамическая генерация тестов: использовать массивы и циклы для запуска одного сценария с разными параметрами.
  • Использование хуков: управлять настройкой тестовой среды до и после выполнения тестов, используя параметры.

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