Clipboard сервис

Clipboard сервис в WebdriverIO используется для работы с буфером обмена браузера или операционной системы в процессе автоматизированного тестирования. Он позволяет получать, копировать и вставлять текстовые данные, что особенно полезно при проверке функциональности форм, копирования ссылок, кнопок «Скопировать» и других интерактивных элементов веб-приложений.


Установка и подключение

Для использования Clipboard сервиса требуется установка соответствующего пакета WebdriverIO:

npm install @wdio/clipboard-service --save-dev

После установки сервис подключается в конфигурационном файле wdio.conf.js через секцию services:

exports.config = {
    services: ['clipboard'],
    // остальные настройки
};

Подключение сервиса автоматически расширяет глобальный объект browser методами для работы с буфером обмена.


Основные методы Clipboard сервиса

Clipboard сервис предоставляет три ключевых метода:

  1. browser.getClipboard() Получает текущее содержимое буфера обмена. Возвращает строку.

    const text = await browser.getClipboard();
    console.log(text); // выводит текст из буфера обмена
  2. browser.setClipboard(text) Устанавливает заданный текст в буфер обмена.

    await browser.setClipboard('Пример текста');
    const copiedText = await browser.getClipboard();
    console.log(copiedText); // 'Пример текста'
  3. browser.clearClipboard() Очищает буфер обмена, удаляя текущее содержимое.

    await browser.clearClipboard();
    const empty = await browser.getClipboard();
    console.log(empty); // ''

Эти методы полностью асинхронные и поддерживают синтаксис async/await.


Применение в тестах

Clipboard сервис широко используется при автоматизации таких сценариев:

  • Проверка кнопок «Скопировать в буфер обмена».
  • Валидация корректности скопированного текста.
  • Передача данных между разными элементами формы без прямого взаимодействия с полем ввода.

Пример теста копирования текста:

describe('Clipboard functionality', () => {
    it('should copy text to clipboard', async () => {
        await browser.url('https://example.com');

        const copyButton = await $('#copy-button');
        await copyButton.click();

        const clipboardText = await browser.getClipboard();
        expect(clipboardText).toEqual('Текст для копирования');
    });
});

Пример вставки текста из буфера обмена в поле ввода:

describe('Paste from clipboard', () => {
    it('should paste text into input', async () => {
        await browser.setClipboard('Текст для вставки');

        const input = await $('#input-field');
        await input.click();
        await browser.keys(['Control', 'v']); // для Windows
        // Для MacOS можно использовать ['Meta', 'v']

        const value = await input.getValue();
        expect(value).toBe('Текст для вставки');
    });
});

Особенности и ограничения

  • Clipboard сервис работает только с текстовыми данными. Форматирование, изображения или сложные объекты не поддерживаются.
  • В некоторых браузерах или окружениях доступ к системному буферу обмена может быть ограничен политиками безопасности, поэтому тесты могут потребовать дополнительных разрешений.
  • Для корректной работы вставки через сочетания клавиш (Ctrl+V или Cmd+V) важно учитывать платформу и раскладку клавиатуры.

Рекомендации по использованию

  • Всегда очищать буфер обмена перед тестом для предотвращения конфликта с предыдущими данными (browser.clearClipboard()).
  • Использовать Clipboard сервис для проверки визуально непредставимых действий, таких как копирование динамически генерируемого текста.
  • Комбинировать с другими сервисами WebdriverIO, например, WaitFor или Expect WebdriverIO, для синхронизации действий с интерфейсом и проверки состояния элементов.

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