Операции с файлами в Playwright
Хотя Playwright в основном используется для автоматизации браузера, он отлично справляется сзагрузкой и скачиванием файлови достаточно мощный, чтобы обрабатывать типичные сценарии взаимодействия с файлами на фронтенде.
Загрузка файла
В веб-формах загрузка файлов обычно выполняется через<input type="file">. Playwright предоставляет специальные API для работы с этим:
Метод 1: setInputFiles()
await page.setInputFiles('input[type="file"]', 'tests/fixtures/avatar.png');
-
Описание параметра:
- Селектор: как найти элемент ввода файла.
- Путь к файлу: относительный/абсолютный путь, поддерживает один файл или массив из нескольких файлов.
- Если передать
[], это очищает выбранные файлы.
Метод 2: напрямую через Locator
const upload = page.locator('input[type=file]');
await upload.setInputFiles(['tests/fixtures/1.png', 'tests/fixtures/2.png']);
Метод 3: имитация загрузки перетаскиванием (поддерживается некоторыми приложениями)
const fileChooserPromise = page.waitForEvent('filechooser');
await page.click('button#upload'); // 触发选择文件
const fileChooser = await fileChooserPromise;
await fileChooser.setFiles('tests/fixtures/test.pdf');
Скачивание файла
Playwright может перехватывать события скачивания браузера и получать путь сохранения файла.
Базовое использование: прослушивание скачиваний
Пример
const [download] = await Promise.all([
page.waitForEvent('download'), // дождаться начала загрузки
page.click('a#downloadButton'), // инициировать загрузку
]);
// сохранить файл по указанному пути
await download.saveAs('downloads/report.pdf');
// получить путь сохранения по умолчанию (системный временный каталог)
const path = await download.path();
console.log('Путь загрузки:', path);
// получить информацию о загрузке
console.log(await download.url()); // URL-адрес загрузки
console.log(await download.suggestedFilename()); // предлагаемое имя файла
page.waitForEvent('download'), // дождаться начала загрузки
page.click('a#downloadButton'), // инициировать загрузку
]);
// сохранить файл по указанному пути
await download.saveAs('downloads/report.pdf');
// получить путь сохранения по умолчанию (системный временный каталог)
const path = await download.path();
console.log('Путь загрузки:', path);
// получить информацию о загрузке
console.log(await download.url()); // URL-адрес загрузки
console.log(await download.suggestedFilename()); // предлагаемое имя файла
Файлы скриншотов и записи экрана
Playwright сам также создаёт файлы (скриншоты, видео, трассировки и т. д.):
await page.screenshot({ path: 'screenshots/home.png', fullPage: true });
await page.video()?.saveAs('videos/test.mp4'); // 在配置中开启 video 记录才可用
Полный пример операций с файлами
Пример
import { test, expect } from '@playwright/test';
test('Пример загрузки и скачивания файла', async ({ page }) => {
// загрузить файл
await page.goto('https://the-internet.herokuapp.com/upload');
const uploadInput = page.locator('input[type=file]');
await uploadInput.setInputFiles('tests/fixtures/avatar.png');
await page.click('#file-submit');
await expect(page.locator('#uploaded-files')).toHaveText('avatar.png');
// скачать файл
await page.goto('https://the-internet.herokuapp.com/download');
const [download] = await Promise.all([
page.waitForEvent('download'),
page.click('a[href="some-file.txt"]'),
]);
await download.saveAs('downloads/some-file.txt');
console.log('Download complete:', await download.suggestedFilename());
});
test('Пример загрузки и скачивания файла', async ({ page }) => {
// загрузить файл
await page.goto('https://the-internet.herokuapp.com/upload');
const uploadInput = page.locator('input[type=file]');
await uploadInput.setInputFiles('tests/fixtures/avatar.png');
await page.click('#file-submit');
await expect(page.locator('#uploaded-files')).toHaveText('avatar.png');
// скачать файл
await page.goto('https://the-internet.herokuapp.com/download');
const [download] = await Promise.all([
page.waitForEvent('download'),
page.click('a[href="some-file.txt"]'),
]);
await download.saveAs('downloads/some-file.txt');
console.log('Download complete:', await download.suggestedFilename());
});
API файловых операций
| API | Назначение | Параметры/Описание |
|---|---|---|
page.setInputFiles(selector, files) |
Загрузить файл | filesМожет быть строкой пути, массивом илиFilePayload |
locator.setInputFiles(files) |
Загрузить файл (метод Locator) | |
page.waitForEvent('filechooser') |
Ожидать диалоговое окно выбора файла | ВозвращаетFileChooser |
fileChooser.setFiles(files) |
Установить выбранные файлы | |
page.waitForEvent('download') |
Прослушивать событие загрузки | ВозвращаетDownload |
download.saveAs(path) |
Сохранить загруженный файл | Пользовательское расположение хранилища |
download.path() |
Получить системный путь хранилища по умолчанию | |
download.url() |
Получить URL запроса на скачивание | |
download.suggestedFilename() |
Получить предлагаемое имя файла | |
page.screenshot({ path }) |
Скриншот страницы | |
locator.screenshot({ path }) |
Скриншот элемента | |
page.video()?.saveAs(path) |
Сохранить записанное видео | Требуется включить видео в конфигурации |