Загрузка через drag and drop

Загрузка файлов с помощью метода drag and drop — одна из популярных техник для взаимодействия пользователя с веб-приложением. В автоматизированных тестах важно уметь эмулировать такую операцию для проверки функциональности на фронтенде. Playwright предоставляет все необходимые инструменты для симуляции действий пользователя, включая перетаскивание файлов на страницы. Рассмотрим, как реализовать тестирование загрузки файлов через drag and drop в Playwright.

Основные этапы тестирования drag and drop

  1. Создание тестового веб-приложения: Чтобы тестировать функциональность загрузки через drag and drop, потребуется веб-страница с соответствующей реализацией. В большинстве случаев на странице имеется область, в которую нужно перетащить файлы (например, область с текстом “Перетащите сюда файл”).

  2. Определение элемента для перетаскивания: Важно точно определить область, в которую необходимо загрузить файл. Это может быть элемент с явным идентификатором или классом, на который необходимо симулировать перетаскивание файла.

  3. Эмуляция перетаскивания с помощью Playwright: В Playwright доступна возможность эмулировать действия пользователя, включая drag and drop, с помощью API, таких как page.dragAndDrop(). Это позволяет задать исходную точку для перетаскивания и конечную точку, куда нужно «перетащить» файл.

  4. Проверка результата: После выполнения drag and drop тестов необходимо удостовериться, что файл действительно был загружен. Важными аспектами здесь могут быть появление соответствующего сообщения, изменения в интерфейсе, либо успешная загрузка данных на сервер.

Эмуляция загрузки через drag and drop с Playwright

Рассмотрим пример теста с использованием Playwright, который имитирует перетаскивание файла в специальную область на веб-странице.

const { test, expect } = require('@playwright/test');

test('Тест загрузки файла через drag and drop', async ({ page }) => {
  // Открытие страницы с формой для загрузки файла
  await page.goto('https://example.com/upload');

  // Определяем область для перетаскивания файла
  const dropArea = await page.locator('#drop-area');

  // Путь к файлу, который нужно "перетащить"
  const filePath = 'path/to/file.txt';

  // Эмуляция перетаскивания файла
  await dropArea.setInputFiles(filePath);

  // Проверка, что файл успешно загружен
  await expect(dropArea).toHaveText('Файл загружен');
});

В этом примере используется метод setInputFiles() для имитации перетаскивания. Однако стоит отметить, что Playwright не поддерживает прямую эмуляцию перетаскивания с мышью. Вместо этого можно использовать setInputFiles(), чтобы передать файл в элемент ввода файла (например, <input type="file">), что в большинстве случаев является достаточно для проверки функциональности загрузки файлов.

Альтернативный способ с эмуляцией drag and drop

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

const { test, expect } = require('@playwright/test');

test('Тест с эмуляцией drag and drop', async ({ page }) => {
  await page.goto('https://example.com/upload');

  // Определяем области для начала и конца перетаскивания
  const dragElement = await page.locator('#file-to-drag');
  const dropArea = await page.locator('#drop-area');

  // Получаем позиции для эмуляции drag and drop
  const dragBox = await dragElement.boundingBox();
  const dropBox = await dropArea.boundingBox();

  // Эмуляция перетаскивания
  await page.mouse.move(dragBox.x + dragBox.width / 2, dragBox.y + dragBox.height / 2);
  await page.mouse.down();
  await page.mouse.move(dropBox.x + dropBox.width / 2, dropBox.y + dropBox.height / 2);
  await page.mouse.up();

  // Проверка, что файл загружен
  await expect(dropArea).toHaveText('Файл загружен');
});

В этом примере происходит эмуляция движения мыши от исходной позиции до целевой, с использованием методов mouse.move(), mouse.down(), и mouse.up(). Этот подход позволяет точнее контролировать процесс перетаскивания, и особенно полезен, когда взаимодействие с веб-страницей не ограничивается только элементами формы.

Тестирование с несколькими файлами

Playwright поддерживает загрузку нескольких файлов одновременно. Это важно, если приложение поддерживает drag and drop для нескольких файлов. Для этого можно использовать массив путей к файлам и передавать его в метод setInputFiles().

test('Тест загрузки нескольких файлов', async ({ page }) => {
  await page.goto('https://example.com/upload');

  const dropArea = await page.locator('#drop-area');
  const files = [
    'path/to/file1.txt',
    'path/to/file2.txt',
    'path/to/file3.txt'
  ];

  // Загрузка нескольких файлов
  await dropArea.setInputFiles(files);

  // Проверка, что все файлы были загружены
  await expect(dropArea).toHaveText('Все файлы загружены');
});

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

Важные моменты при тестировании

  1. Проверка корректности загруженных данных: После выполнения теста на загрузку файла, необходимо удостовериться, что данные были правильно загружены. В некоторых случаях это может потребовать проверки на сервере или через API-запросы.

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

  3. Многофункциональные элементы: В реальных приложениях область для загрузки может быть интегрирована с другими элементами, такими как формы или кнопки для отправки данных. Важно тестировать их функциональность в сочетании с загрузкой файлов.

  4. Поддержка разных типов файлов: Не все веб-приложения одинаково обрабатывают различные типы файлов. Тесты должны охватывать различные сценарии: загрузка изображений, текстовых документов, видео и других форматов.

Заключение

Тестирование функциональности drag and drop в Playwright предоставляет мощный инструмент для проверки загрузки файлов в веб-приложениях. С помощью простых методов, таких как setInputFiles(), а также более сложных подходов с эмуляцией событий мыши, можно обеспечить полное покрытие для тестирования таких сценариев. Важно помнить о разнообразии возможных ситуаций, включая работу с несколькими файлами, валидацию ошибок и взаимодействие с другими компонентами интерфейса.