Playwright Dateioperationen

Obwohl Playwright hauptsächlich für die Browser-Automatisierung verwendet wird, zeichnet es sich durchDatei-Upload und -Downloadaus und ist leistungsfähig genug, um gängige Szenarien für Dateiinteraktionen im Frontend zu bewältigen.


Datei-Upload

In Webformularen erfolgt der Datei-Upload normalerweise über<input type="file">. Playwright bietet dedizierte APIs, um dies zu handhaben:

Methode 1: setInputFiles()

await page.setInputFiles('input[type="file"]', 'tests/fixtures/avatar.png');
  • Parameterbeschreibung:

    • Selektor: wie man das Datei-Input-Element lokalisiert.
    • Dateipfad: relativer/absoluter Pfad, unterstützt eine einzelne Datei oder ein Array aus mehreren Dateien.
  • Wenn Sie[], werden die ausgewählten Dateien gelöscht.

Methode 2: Direkt über Locator

const upload = page.locator('input[type=file]');
await upload.setInputFiles(['tests/fixtures/1.png', 'tests/fixtures/2.png']);

Methode 3: Drag-and-Drop-Upload simulieren (von einigen Anwendungen unterstützt)

const fileChooserPromise = page.waitForEvent('filechooser');
await page.click('button#upload'); // 触发选择文件
const fileChooser = await fileChooserPromise;
await fileChooser.setFiles('tests/fixtures/test.pdf');

Dateidownload

Playwright kann Browser-Download-Ereignisse erfassen und den Speicherpfad der Datei abrufen.

Grundlegende Verwendung: auf Downloads lauschen

Beispiel

const [download] = await Promise.all([
  page.waitForEvent('download'),          // warten, bis der Download startet
  page.click('a#downloadButton'),         // Download auslösen
]);

// Datei im angegebenen Pfad speichern
await download.saveAs('downloads/report.pdf');

// Standard-Speicherpfad abrufen (temporäres Systemverzeichnis)
const path = await download.path();
console.log('Download-Pfad:', path);

// Download-Informationen abrufen
console.log(await download.url());        // Download-URL
console.log(await download.suggestedFilename()); // vorgeschlagener Dateiname

Screenshots und Bildschirmaufzeichnungsdateien

Playwright selbst erzeugt auch Dateien (Screenshots, Videos, Traces usw.):

await page.screenshot({ path: 'screenshots/home.png', fullPage: true });
await page.video()?.saveAs('videos/test.mp4');  // 在配置中开启 video 记录才可用

Vollständiges Beispiel für Dateioperationen

Beispiel

import { test, expect } from '@playwright/test';

test('Beispiel für Datei-Upload und Download', async ({ page }) => {
  // Datei hochladen
  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');

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

Dateioperationen-API

API Zweck Parameter/Beschreibung
page.setInputFiles(selector, files) Datei hochladen filesKann ein Pfad-String, ein Array oderFilePayload
locator.setInputFiles(files) Datei hochladen (Locator-Methode)
page.waitForEvent('filechooser') Auf Dateiauswahldialog warten Gibt zurückFileChooser
fileChooser.setFiles(files) Die ausgewählten Dateien festlegen
page.waitForEvent('download') Auf Download-Ereignis lauschen Gibt zurückDownload
download.saveAs(path) Heruntergeladene Datei speichern Benutzerdefinierter Speicherort
download.path() Systemstandard-Speicherpfad abrufen
download.url() URL der Download-Anfrage abrufen
download.suggestedFilename() Vorgeschlagenen Dateinamen abrufen
page.screenshot({ path }) Seiten-Screenshot
locator.screenshot({ path }) Element-Screenshot
page.video()?.saveAs(path) Aufgezeichnetes Video speichern Erfordert Aktivierung von Video in der Konfiguration
Weitere Erweiterungen