Tests de régression visuelle Playwright
Ce chapitre présente les fonctionnalités de test de régression visuelle de Playwright, qui détectent les changements inattendus de l'interface utilisateur grâce à la comparaison de captures d'écran.
Qu'est-ce que le test de régression visuelle
Le test de régression visuelle compare la capture d'écran actuelle avecla capture d'écran de référence (Golden File)pour détecter les changements d'interface utilisateur sur la page par différences de pixels.
Lorsqu'une modification CSS affecte de manière inattendue la mise en page d'autres pages, le test de régression visuelle peut détecter directement ce problème.
expect(page).toHaveScreenshot() Comparaison de capture d'écran de page
Exemple
await page.goto('https://www.example.com/');
// Première exécution : enregistrer la capture d'écran de référence
// Exécutions suivantes : comparer avec la capture d'écran de référence
await expect(page).toHaveScreenshot('example-homepage.png');
});
Lors de la première exécution, Playwright signalera une erreur et générera une capture d'écran de référence :
Error: A snapshot doesn't exist at example-homepage-chromium-darwin.png, writing actual.
Lors de la deuxième exécution, il la comparera automatiquement à la capture d'écran de référence.
Options complètes de toHaveScreenshot
Exemple
fullPage: true, // Capture d'écran pleine page
maxDiffPixelRatio: 0.01, // Autoriser 1% de différence de pixels
maxDiffPixels: 100, // Autoriser jusqu'à 100 différences de pixels
threshold: 0.2, // Seuil de différence de pixels (0~1)
animations: 'disabled', // Désactiver les animations (recommandé)
mask: [ // Ignorer des zones spécifiques
page.getByText('Current Time'),
],
});
expect(locator).toHaveScreenshot() Comparaison de capture d'écran d'élément
Exemple
await page.goto('https://www.example.com/');
// Comparer uniquement la capture d'écran de la barre de navigation
const navbar = page.getByRole('navigation');
await expect(navbar).toHaveScreenshot('navbar.png');
});
Gestion des fichiers de référence
Générer un fichier de référence
Lors de la première exécution d'une assertion de capture d'écran, Playwright génère automatiquement un fichier de référence et l'enregistre dans le-snapshotsrépertoire à côté du fichier de test :
tests/
├── example.spec.ts
└── example.spec.ts-snapshots/
└── example-homepage-chromium-darwin.png
Le nom du fichier contient le nom du navigateur et le système d'exploitation, ce qui garantit que les références de base pour différentes plateformes sont gérées indépendamment.
Mettre à jour le fichier de référence
Lorsque l'interface utilisateur subit des modifications de conception attendues, vous devez mettre à jour la capture d'écran de référence :
# 更新所有截图基准 npx playwright test --update-snapshots # 只更新特定文件 npx playwright test tests/example.spec.ts --update-snapshots
Explication des options de comparaison visuelle
| Option | Type | Description |
|---|---|---|
maxDiffPixelRatio | nombre | Ratio de différence de pixels autorisé (0~1), par défaut 0 |
maxDiffPixels | nombre | Nombre autorisé de différences de pixels, par défaut 0 |
threshold | nombre | Tolérance de différence par pixel (0~1), par défaut 0.2 |
animations | string | Indique s'il faut désactiver les animations :'disabled' | 'allow' |
mask | Locator[] | Zones ignorées (non prises en compte lors de la comparaison des différences) |
Considérations relatives à l'environnement CI
Les résultats de rendu du navigateur sont affectés par des facteurs tels que le système d'exploitation, la version du navigateur, le matériel, l'état d'alimentation et le mode headless. Pour garantir la cohérence, générez les fichiers de référence et exécutez les tests dans le même environnement. Il est recommandé d'utiliser un conteneur Docker ou la même plateforme que la CI pour éliminer les différences.
Tests visuels dans Docker
# 使用 Playwright Docker 镜像确保渲染一致性 docker run --rm -v $(pwd):/work -w /work \ mcr.microsoft.com/playwright:v1.52.0-jammy \ npx playwright test --update-snapshots
Bonnes pratiques pour les tests visuels
- Générer les fichiers de référence et exécuter les comparaisons sur la même plateforme
- Utiliser
animations: 'disabled'pour éliminer l'incertitude liée aux animations - Utiliser
maskpour ignorer le contenu dynamique (comme les horodatages, les emplacements publicitaires) - Prioriser les tests de régression visuelle pour les pages critiques (page d'accueil, connexion, paiement)
- Commiter les Golden Files dans le système de contrôle de version
- Utiliser des versions fixes de navigateurs et de systèmes d'exploitation dans CI