Создание плагинов

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

Что такое плагин для WebdriverIO?

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

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

Структура плагина

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

  1. Основной файл плагина: Это файл, в котором описана логика плагина.
  2. package.json: Стандартный файл для описания метаданных плагина (например, имени, версии, зависимостей).
  3. Директория с тестами (опционально): Если плагин предполагает наличие тестов, они должны быть размещены в отдельной директории.
Пример структуры плагина:
my-webdriverio-plugin/
├── src/
│   └── index.js        # Основной файл плагина
├── package.json        # Описание плагина
└── test/
    └── pluginTest.js   # Тесты для плагина (если нужны)

Создание простого плагина

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

1. Создание index.js

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

module.exports = function (wdioConfig) {
  // Добавление новой команды в WebdriverIO
  browser.addCommand('myCustomCommand', function () {
    console.log('Custom command executed');
  });
};

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

2. Создание package.json

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

{
  "name": "my-webdriverio-plugin",
  "version": "1.0.0",
  "main": "src/index.js",
  "dependencies": {
    "webdriverio": "^7.0.0"
  }
}
3. Регистрация плагина в проекте

Для использования плагина необходимо зарегистрировать его в конфигурации WebdriverIO. Это можно сделать с помощью свойства plugins в файле конфигурации wdio.conf.js.

exports.config = {
  plugins: {
    'my-webdriverio-plugin': {}
  }
};

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

4. Использование команды в тестах

Теперь, когда плагин зарегистрирован, можно использовать новую команду в тестах.

describe('Custom Command Test', () => {
  it('should execute custom command', () => {
    browser.url('https://example.com');
    browser.myCustomCommand();  // Вызов команды, добавленной плагином
  });
});

Разширение существующих команд

Плагин может не только добавлять новые команды, но и изменять поведение уже существующих команд. Для этого можно использовать методы addCommand или overridable.

Пример переопределения существующей команды

Допустим, необходимо изменить поведение команды getText, добавив логирование каждого вызова:

module.exports = function (wdioConfig) {
  // Переопределение команды getText
  browser.overwriteCommand('getText', function (originalGetText, selector) {
    console.log(`Fetching text from: ${selector}`);
    return originalGetText(selector);
  });
};

В этом примере мы переопределяем команду getText таким образом, чтобы перед её выполнением выводилось сообщение в консоль.

Работа с конфигурацией плагина

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

Пример плагина с конфигурацией
module.exports = function (wdioConfig, options) {
  const enableLogging = options.enableLogging || false;

  if (enableLogging) {
    console.log('Logging is enabled');
  }

  browser.addCommand('myCustomCommand', function () {
    if (enableLogging) {
      console.log('Custom command executed');
    }
  });
};

При регистрации плагина в конфигурации WebdriverIO можно передавать параметры:

exports.config = {
  plugins: {
    'my-webdriverio-plugin': {
      enableLogging: true
    }
  }
};

Тестирование плагинов

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

Пример теста для плагина:

describe('Plugin Command Test', () => {
  it('should log message when custom command is executed', () => {
    browser.url('https://example.com');
    browser.myCustomCommand(); // Проверка работы команды
    // Здесь можно добавить утверждения для проверки логов или других действий
  });
});

Распространение плагинов

После разработки плагина его можно опубликовать в npm-репозитории для общего использования. Для этого необходимо:

  1. Внести изменения в package.json, указав авторские данные и описание.
  2. Опубликовать плагин с помощью команды npm publish.
  3. Убедиться, что плагин доступен в npm и может быть установлен через команду npm install.

Советы по разработке плагинов

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

Заключение

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