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 и
beforeTestWebdriverIO позволяет выполнять динамические изменения перед запуском сессии или конкретного теста через хуки:
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 — восстановление исходных параметров после
теста.С помощью переменных окружения и динамических условий можно полностью адаптировать тестовый прогон под разные среды:
# запуск тестов в продакшене на 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 мощным инструментом для автоматизированного тестирования, обеспечивая адаптивность тестов, независимость от среды и гибкость при масштабировании проектов.