Opérations sur les fichiers avec Playwright

Bien que Playwright soit principalement utilisé pour l'automatisation de navigateur, il excelle dansle téléversement et le téléchargement de fichierset est suffisamment puissant pour gérer les scénarios courants d'interaction avec des fichiers côté front-end.


Téléversement de fichier

Dans les formulaires web, le téléversement de fichiers se fait généralement via<input type="file">. Playwright fournit des API dédiées pour gérer cela :

Méthode 1 : setInputFiles()

await page.setInputFiles('input[type="file"]', 'tests/fixtures/avatar.png');
  • Description des paramètres:

    • Sélecteur : comment localiser l'élément de saisie de fichier.
    • Chemin de fichier : chemin relatif/absolu, prend en charge un fichier unique ou un tableau de plusieurs fichiers.
  • Si vous passez[], cela efface les fichiers sélectionnés.

Méthode 2 : directement via Locator

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

Méthode 3 : simuler le téléversement par glisser-déposer (pris en charge par certaines applications)

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

Téléchargement de fichier

Playwright peut capturer les événements de téléchargement du navigateur et obtenir le chemin d'enregistrement du fichier.

Utilisation de base : écouter les téléchargements

Exemple

const [download] = await Promise.all([
  page.waitForEvent('download'),          // attendre le début du téléchargement
  page.click('a#downloadButton'),         // déclencher le téléchargement
]);

// enregistrer le fichier dans le chemin spécifié
await download.saveAs('downloads/report.pdf');

// obtenir le chemin d'enregistrement par défaut (répertoire temporaire du système)
const path = await download.path();
console.log('Chemin de téléchargement :', path);

// obtenir les informations de téléchargement
console.log(await download.url());        // URL de téléchargement
console.log(await download.suggestedFilename()); // nom de fichier suggéré

Fichiers de captures d'écran et d'enregistrement d'écran

Playwright lui-même génère également des fichiers (captures d'écran, vidéos, traces, etc.) :

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

Exemple complet d'opérations sur les fichiers

Exemple

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

test('Exemple de téléversement et de téléchargement de fichiers', async ({ page }) => {
  // téléverser le fichier
  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');

  // télécharger le fichier
  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('Téléchargement terminé :', await download.suggestedFilename());
});

API d'opérations sur les fichiers

API Objectif Paramètres/Description
page.setInputFiles(selector, files) Téléverser un fichier filesPeut être une chaîne de chemin, un tableau ouFilePayload
locator.setInputFiles(files) Téléverser un fichier (méthode Locator)
page.waitForEvent('filechooser') Attendre la boîte de dialogue de sélection de fichier RenvoieFileChooser
fileChooser.setFiles(files) Définir les fichiers sélectionnés
page.waitForEvent('download') Écouter l'événement de téléchargement RenvoieDownload
download.saveAs(path) Enregistrer le fichier téléchargé Emplacement de stockage personnalisé
download.path() Obtenir le chemin de stockage par défaut du système
download.url() Obtenir l'URL de la requête de téléchargement
download.suggestedFilename() Obtenir le nom de fichier suggéré
page.screenshot({ path }) Capture d'écran de page
locator.screenshot({ path }) Capture d'écran d'élément
page.video()?.saveAs(path) Sauvegarder la vidéo enregistrée Nécessite l'activation de la vidéo dans la configuration
Autres extensions