Операции с файлами в 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()); // предлагаемое имя файла

Файлы скриншотов и записи экрана

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());
});

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) Сохранить записанное видео Требуется включить видео в конфигурации
Другие расширения