WebdriverIO предоставляет гибкий и стандартизированный подход к организации тестового проекта, что позволяет поддерживать масштабируемость, читаемость и простоту сопровождения. Правильная структура проекта особенно важна для крупных команд и долгосрочных проектов.
При инициализации проекта через npx wdio config
создаётся базовая структура, включающая следующие элементы:
/project-root
│
├─ /test
│ ├─ /specs
│ └─ /pageobjects
│
├─ wdio.conf.js
├─ package.json
└─ node_modules/
Ключевые элементы:
wdio.conf.js – основной
конфигурационный файл WebdriverIO. В нём задаются браузеры, фреймворк
тестирования (Mocha, Jasmine, Cucumber), пути к тестам, репортеры,
сервисы (например, Selenium Standalone, Appium, BrowserStack) и
глобальные настройки.
package.json – файл управления
зависимостями и скриптами проекта. Сюда включаются WebdriverIO, тестовые
фреймворки, репортеры, утилиты и плагины.
/test – корневая папка с
тестами.
/specs – директория для тестовых
сценариев. Обычно каждый файл соответствует отдельному модулю или
функциональной области./pageobjects – реализация паттерна
Page Object. Здесь хранятся классы страниц, которые инкапсулируют
селекторы и методы взаимодействия с элементами.Дополнительно могут быть созданы следующие каталоги:
/services – кастомные сервисы или
расширения WebdriverIO./utils или /helpers –
вспомогательные функции, генераторы данных, логгеры и утилиты для
повторного использования./data – тестовые данные в формате
JSON, CSV или JS.wdio.conf.jsКонфигурация является ядром проекта. Основные разделы:
specs – массив с путями к тестовым
файлам:
specs: [
'./test/specs/**/*.js'
],
Использование ** позволяет включить все файлы и подпапки
в папке specs.
exclude – файлы и директории,
которые не должны выполняться.
capabilities – описание браузеров,
на которых будут запускаться тесты:
capabilities: [{
maxInstances: 5,
browserName: 'chrome',
acceptInsecureCerts: true
}],logLevel – уровень логирования
(trace, debug, info,
warn, error, silent).
framework – выбор фреймворка
(mocha, jasmine,
cucumber).
reporters – подключение отчётности,
например:
reporters: ['spec', ['allure', { outputDir: 'allure-results' }]],services – сервисы для запуска
браузеров и интеграции с CI/CD:
services: ['selenium-standalone'],Hooks – функции, выполняемые на разных этапах тестового процесса:
before – перед запуском тестов.afterTest – после каждого теста, полезно для
логирования ошибок или скриншотов.onComplete – после завершения всех тестов.Page Object помогает структурировать код, отделяя логику работы с элементами интерфейса от тестовых сценариев.
Пример структуры класса страницы:
class LoginPage {
get inputUsername() { return $('#username'); }
get inputPassword() { return $('#password'); }
get btnSubmit() { return $('#submit'); }
async login(username, password) {
await this.inputUsername.setValue(username);
await this.inputPassword.setValue(password);
await this.btnSubmit.click();
}
}
module.exports = new LoginPage();
В тестах это позволяет использовать удобный и читаемый синтаксис:
const LoginPage = require('../pageobjects/LoginPage');
describe('Авторизация', () => {
it('успешный вход', async () => {
await browser.url('/login');
await LoginPage.login('user', 'pass');
});
});
Тестовые сценарии в specs обычно делятся на тематические
файлы:
/specs
├─ login.spec.js
├─ registration.spec.js
└─ dashboard.spec.js
Принципы организации:
Для крупных проектов рекомендуется расширять структуру:
/test
├─ /specs
├─ /pageobjects
├─ /services
├─ /utils
└─ /data
specs или pageobjects могут группироваться по
разделам приложения.wdio.local.conf.js, wdio.staging.conf.js и
wdio.prod.conf.js.WebdriverIO позволяет автоматически сохранять скриншоты при падении тестов:
afterTest: async function(test, context, { error, result, duration, passed, retries }) {
if (!passed) {
await browser.saveScreenshot(`./errorShots/${test.title}.png`);
}
},
Использование Allure Reporter позволяет получать наглядные интерактивные отчёты с историей выполнения тестов, скриншотами и степами.
Популярные сервисы:
Каждый сервис подключается через конфигурацию и может иметь свои опции (например, путь к бинарям, порты, версии браузеров).
Структура по умолчанию в WebdriverIO создаёт основу для поддерживаемого, масштабируемого и чистого тестового проекта. Она стандартизирует работу с тестами, страницами и конфигурацией, позволяя сосредоточиться на написании сценариев, а не на хаотичной организации файлов.