vendredi 25 septembre 2026

À propos

Contact

Tests

Migrer ses tests end-to-end WordPress de Puppeteer vers Playwright

Playwright gagne du terrain sur Puppeteer pour les tests E2E, avec de meilleurs outils de débogage et un support multi-navigateur natif. Retour sur notre migration d'une suite WordPress existante.

Par Clément Hadrot • 16 novembre 2022 • 5 min de lecture • Aucun commentaire
Migrer ses tests end-to-end WordPress de Puppeteer vers Playwright

Notre suite de tests E2E WordPress tournait sous Puppeteer depuis plus d’un an, avec le paquet officiel @wordpress/e2e-test-utils décrit dans un précédent article. Le système fonctionnait, mais deux frustrations revenaient régulièrement : des échecs difficiles à diagnostiquer sans rejouer manuellement le scénario, et l’impossibilité de vérifier facilement le comportement d’un site sur un moteur autre que Chromium. Playwright, développé par Microsoft, répond aux deux problèmes, et l’équipe cœur de WordPress elle-même a commencé à l’adopter pour ses propres tests E2E via le paquet @wordpress/e2e-test-utils-playwright.

Cet article détaille notre migration d’une suite existante, les gains concrets observés, et les points d’attention pour une équipe qui envisage le même chemin.

Pourquoi migrer : les limites rencontrées avec Puppeteer

Puppeteer ne pilote nativement que Chromium (avec un support expérimental de Firefox à cette période). Pour un client dont une part significative du trafic vient de Safari sur mobile, cette limite empêchait de détecter des bugs spécifiques à WebKit avant qu’ils n’atteignent la production. Par ailleurs, le débogage d’un test qui échoue de façon intermittente en CI reposait essentiellement sur des captures d’écran ponctuelles, ce qui laissait beaucoup de zones d’ombre sur ce qui s’était réellement passé entre deux étapes du test.

Ce que Playwright apporte concrètement

Playwright pilote nativement Chromium, Firefox et WebKit avec la même API, ce qui permet d’exécuter la même suite de tests sur les trois moteurs sans code spécifique. Sa fonctionnalité de trace enregistre, pour chaque test, un journal détaillé rejouable visuellement : capture DOM à chaque étape, requêtes réseau, console, et timeline précise des actions effectuées.

npx playwright show-trace trace.zip

Cette commande ouvre une interface qui permet de naviguer étape par étape dans l’exécution d’un test échoué, bien plus rapide à exploiter qu’une capture d’écran isolée pour comprendre ce qui a réellement dérapé.

L'essentiel à retenir : Un mode trace qui rejoue visuellement chaque échec de test ; Le support natif de Firefox et WebKit, pas seulement Chromium ; Une API auto-attente qui élimine une partie des attentes manuelles

Installer Playwright et le paquet WordPress

npm install --save-dev @playwright/test @wordpress/e2e-test-utils-playwright
npx playwright install

La dernière commande télécharge les navigateurs nécessaires (Chromium, Firefox, WebKit), gérés directement par Playwright plutôt que par le système. Le fichier de configuration playwright.config.js remplace le jest.config.js utilisé côté Puppeteer :

module.exports = {
    testDir: './tests/e2e',
    use: {
        baseURL: process.env.WP_BASE_URL || 'http://localhost:8889',
        trace: 'on-first-retry',
    },
    projects: [
        { name: 'chromium', use: { browserName: 'chromium' } },
    ],
};

Réécrire un test existant

Voici le même test décrit dans un précédent article, insertion d’un bloc personnalisé puis vérification du rendu, réécrit avec Playwright et son paquet dédié WordPress :

const { test, expect } = require( '@wordpress/e2e-test-utils-playwright' );

test( 'insère le bloc, publie l\'article et affiche le rendu sur le front', async ( { admin, editor, page } ) => {
    await admin.createNewPost();
    await editor.insertBlock( { name: 'mon-plugin/citation-mise-en-avant' } );

    await page.keyboard.type( 'Un test qui échoue en silence n\'aide personne.' );

    await editor.publishPost();
    const url = await page.evaluate( () => window.location.href );

    await page.goto( url );

    const contenu = page.locator( '.wp-block-mon-plugin-citation-mise-en-avant' );
    await expect( contenu ).toContainText( 'Un test qui échoue en silence' );
} );

La différence la plus marquante à l’usage : les locator de Playwright intègrent une logique d’attente automatique. Plus besoin d’ajouter manuellement des waitForSelector avant chaque interaction, comme c’était souvent nécessaire avec Puppeteer pour fiabiliser un test.

Ce qui a changé dans nos chiffres

Sur notre suite de trente-deux tests E2E migrée intégralement, le temps d’exécution total en CI est passé d’environ dix-huit minutes à un peu moins de onze minutes, principalement grâce à la parallélisation native de Playwright, plus simple à configurer que l’équivalent avec Jest et jest-puppeteer. Le nombre d’échecs intermittents non reproductibles a également nettement diminué, ce que nous attribuons à la fois à l’auto-attente et à la stabilité générale du moteur de test.

IndicateurAvant (Puppeteer)Après (Playwright)
Temps total en CI~18 minutes~11 minutes
Navigateurs testésChromium uniquementChromium, Firefox, WebKit disponibles
Diagnostic d’un échecCaptures d’écran ponctuellesTrace rejouable complète

Sur ce projet, la migration nous a pris environ une semaine, tests inclus. Le gain de temps n’était pas l’objectif initial : ce sont les traces rejouables qui ont justifié la migration à elles seules, en divisant par un facteur important le temps passé à diagnostiquer un échec en CI.

En résumé

Playwright, associé au paquet officiel @wordpress/e2e-test-utils-playwright, apporte un confort de débogage et une couverture multi-navigateur que Puppeteer ne proposait pas nativement sur nos projets. La migration d’une suite existante reste un chantier raisonnable, surtout si les tests s’appuyaient déjà sur les utilitaires officiels WordPress, dont les équivalents Playwright suivent une API très proche. Pour une nouvelle suite E2E démarrée aujourd’hui, Playwright est clairement notre recommandation par défaut.

Partager :

À propos de l'auteur

Clément Hadrot

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi