Структура проекта по умолчанию

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

Конфигурация является ядром проекта. Основные разделы:

  1. specs – массив с путями к тестовым файлам:

    specs: [
        './test/specs/**/*.js'
    ],

    Использование ** позволяет включить все файлы и подпапки в папке specs.

  2. exclude – файлы и директории, которые не должны выполняться.

  3. capabilities – описание браузеров, на которых будут запускаться тесты:

    capabilities: [{
        maxInstances: 5,
        browserName: 'chrome',
        acceptInsecureCerts: true
    }],
  4. logLevel – уровень логирования (trace, debug, info, warn, error, silent).

  5. framework – выбор фреймворка (mocha, jasmine, cucumber).

  6. reporters – подключение отчётности, например:

    reporters: ['spec', ['allure', { outputDir: 'allure-results' }]],
  7. services – сервисы для запуска браузеров и интеграции с CI/CD:

    services: ['selenium-standalone'],
  8. Hooks – функции, выполняемые на разных этапах тестового процесса:

    • before – перед запуском тестов.
    • afterTest – после каждого теста, полезно для логирования ошибок или скриншотов.
    • onComplete – после завершения всех тестов.

Паттерн Page Object

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

Принципы организации:

  • Маленькие и атомарные тесты – один тест проверяет одну функциональность.
  • Повторное использование Page Objects – минимизация дублирования кода.
  • Использование фикстур и данных – для подготовки состояния приложения перед тестом.

Поддержка масштабирования

Для крупных проектов рекомендуется расширять структуру:

/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 позволяет получать наглядные интерактивные отчёты с историей выполнения тестов, скриншотами и степами.


Работа с сервисами

Популярные сервисы:

  • selenium-standalone – локальный Selenium Server.
  • chromedriver / geckodriver – прямой запуск браузеров без Selenium.
  • browserstack / sauce – облачные платформы для кросс-браузерного тестирования.
  • devtools – интеграция через Chrome DevTools Protocol для быстрого запуска тестов.

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


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