При автоматизации веб-приложений с использованием Playwright часто возникает необходимость взаимодействовать с различными типами файлов: текстовыми, изображениями, архивами и другими. Важным аспектом работы является правильное использование API Playwright для загрузки, скачивания, чтения и обработки этих файлов в процессе тестирования. В этой главе рассмотрены основные способы работы с файлами, поддерживаемые Playwright, а также примеры их применения.
Один из самых распространённых случаев работы с файлами — это загрузка файлов в форму через интерфейс браузера. Playwright предоставляет простой механизм для имитации действий пользователя, включая выбор файла с локального диска.
Для загрузки файла используется метод setInputFiles(),
который имитирует выбор файла в поле ввода типа file. Этот
метод может быть использован для взаимодействия с элементами формы,
требующими загрузки файлов.
Пример:
const { test, expect } = require('@playwright/test');
test('загрузка файла', async ({ page }) => {
await page.goto('https://example.com/upload');
// Находим элемент формы для загрузки файла
const fileInput = await page.locator('input[type="file"]');
// Загружаем файл
await fileInput.setInputFiles('path/to/file.txt');
// Проверяем, что файл был выбран
const inputValue = await fileInput.evaluate(input => input.files[0].name);
expect(inputValue).toBe('file.txt');
});
Метод setInputFiles() позволяет загружать один или
несколько файлов. Можно указать пути к файлам локально на диске или
использовать данные в виде строк (например, для загрузки данных с
URL).
Playwright также позволяет проверять процессы скачивания файлов, автоматизируя действия пользователя, такие как нажатие на ссылки для скачивания. Для того чтобы получить доступ к загруженному файлу, необходимо использовать события, связанные с скачиванием.
Чтобы обработать скачивание, необходимо создать специальную обработку
события download на объекте страницы или на конкретном
элементе, инициирующем скачивание. Для получения пути сохранённого файла
используется метод path().
Пример:
const { test, expect } = require('@playwright/test');
test('скачивание файла', async ({ page }) => {
await page.goto('https://example.com/download');
// Слушаем событие скачивания
const [download] = await Promise.all([
page.waitForEvent('download'),
page.click('button#download') // Кликаем на кнопку для скачивания
]);
// Проверяем путь к файлу
const downloadPath = await download.path();
expect(downloadPath).toBeDefined();
// Дополнительно можно проверить, что файл существует
const fs = require('fs');
expect(fs.existsSync(downloadPath)).toBe(true);
});
В этом примере проверяется процесс скачивания файла после клика по кнопке. Важно, что Playwright позволяет отслеживать событие скачивания и получить путь к файлу, который был сохранён.
Playwright сам по себе не предоставляет встроенных методов для работы
с содержимым локальных файлов, но для этого можно использовать
стандартные возможности Node.js. Например, для чтения текстовых файлов
или бинарных данных можно воспользоваться модулями fs или
path.
Для работы с текстовыми файлами можно использовать метод
fs.readFileSync().
Пример:
const fs = require('fs');
test('чтение текстового файла', async () => {
const fileContent = fs.readFileSync('path/to/file.txt', 'utf8');
expect(fileContent).toContain('ожидаемая строка');
});
Этот подход полезен, когда необходимо читать и проверять данные, сохранённые в локальных файлах, в контексте тестирования.
Для работы с изображениями или другими бинарными файлами, можно
использовать методы из Node.js, такие как fs.readFileSync()
для получения данных файла и их проверки. В случае с изображениями
полезно комбинировать это с другими инструментами для работы с
изображениями, например, с библиотеками, которые позволяют сравнивать
изображения или проверять их целостность.
Пример для проверки изображения:
const fs = require('fs');
const { test, expect } = require('@playwright/test');
test('проверка изображения', async ({ page }) => {
await page.goto('https://example.com/image');
// Скачать изображение
const [download] = await Promise.all([
page.waitForEvent('download'),
page.click('button#download-image')
]);
const imagePath = await download.path();
// Прочитаем файл как бинарные данные
const imageBuffer = fs.readFileSync(imagePath);
// Проверяем, что файл является изображением
expect(imageBuffer).toBeInstanceOf(Buffer);
expect(imageBuffer.length).toBeGreaterThan(0); // Размер файла больше нуля
});
В данном примере после скачивания изображения проверяется, что полученный файл представляет собой бинарные данные и имеет ненулевой размер.
Иногда нужно не просто загружать или скачивать файлы, но и отправлять их через формы или API. Playwright поддерживает отправку данных через формы с файлами, а также позволяет работать с API для загрузки и получения файлов.
Для отправки файла через форму можно использовать метод
setInputFiles(), как показано выше. В случае работы с API
полезно использовать метод request.post() для отправки
файлов на сервер.
Пример отправки файла через API:
const { test, expect } = require('@playwright/test');
test('отправка файла через API', async ({ page, request }) => {
const filePath = 'path/to/file.txt';
// Отправка файла через API
const response = await request.post('https://example.com/upload', {
multipart: {
file: {
buffer: fs.readFileSync(filePath),
name: 'file.txt',
mimeType: 'text/plain'
}
}
});
expect(response.ok()).toBe(true);
});
В данном примере файл отправляется на сервер через HTTP-запрос,
используя multipart/form-data. Это полезно, когда
необходимо интегрировать тестирование с API, которое работает с
файлами.
При работе с файлами важно учитывать права доступа и безопасность. Например, на сервере могут быть ограничения на скачивание или загрузку файлов. В таких случаях важно использовать методы Playwright для проверки наличия ошибок при загрузке или скачивании, а также обработку возможных исключений.
Важно также помнить, что Playwright позволяет работать с тестами на разных уровнях безопасности, включая работу с cookies, аутентификацией и авторизацией при взаимодействии с файлами. Например, если при скачивании файла требуется пройти аутентификацию, это можно сделать через API Playwright с использованием сессий и cookies.
Работа с файлами в Playwright — это важный аспект автоматизации тестирования, который требует внимания к деталям, таких как правильная обработка файлов, скачивание, загрузка и их взаимодействие через API. Playwright предлагает широкий спектр возможностей для работы с файлами, которые можно эффективно интегрировать в тесты для обеспечения качества веб-приложений.