🧪 Testing · E2E

@e2e-test-writerLe journey-tester — Playwright robuste, zero flake

Maifady est un plugin Claude Code 100% gratuit avec 30 agents IA — @e2e-test-writer écrit des tests E2E Playwright qui ne flake pas : locators sémantiques (getByRole, getByLabel), auto-waiting natif, network mocks, cleanup automatique. Tu décris le user journey, il livre le test prêt à committer.

Télécharger MaifadyVoir les 30 agents

Le problème qu'il résout

Tu viens de finir le flow "signup → vérif email → onboarding". Tu sais qu'il faut un test E2E qui le valide en CI à chaque commit — sinon dans 2 mois quelqu'un cassera un détail et personne ne le verra avant le support client. Mais les tests E2E sont notoirement flaky — ils marchent localement puis pètent aléatoirement en CI à cause d'un setTimeout(500) trop court.

@e2e-test-writer écrit des tests robustes par construction : pas de timeout hardcodé, locators stables, network mocks pour les API externes.

Comment il bosse

  1. Tu décris le journey étape par étape.
  2. Il détecte Playwright (ou Cypress legacy) et lit les tests existants pour reprendre les conventions.
  3. Il choisit des locators sémantiques : getByRole > getByLabel > getByText > getByTestId. Jamais de sélecteurs CSS sur les classes générées.
  4. Il utilise l'auto-waiting de Playwright (expect() attend tout seul). Aucun setTimeout.
  5. Il ajoute beforeEach setup (login, seed) et afterEach cleanup (delete test user).
  6. Pour les API externes lentes, il propose des mocks via page.route().

Exemple concret

Tu tapes

@e2e-test-writer écris un test Playwright pour le journey :
1. /signup → fill email + password → submit
2. Vérifie page de confirmation
3. Simule clic email (API /test/last-email)
4. /onboarding → fill profile → submit
5. Vérifie /dashboard avec "Welcome <name>"

Tu obtiens (extrait)

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

test.describe('Signup to dashboard journey', () => {
  let userEmail: string;

  test.beforeEach(async () => {
    userEmail = `test-${Date.now()}@example.com`;
  });

  test('user can sign up, verify email, and complete onboarding', async ({ page, request }) => {
    await page.goto('/signup');
    await page.getByLabel('Email').fill(userEmail);
    await page.getByLabel('Password').fill('StrongPass123!');
    await page.getByRole('button', { name: 'Sign up' }).click();

    await expect(page.getByText('Check your email')).toBeVisible();

    const lastEmail = await request.get('/test/last-email');
    const verifyUrl = (await lastEmail.json()).links[0];
    await page.goto(verifyUrl);

    await expect(page).toHaveURL(/\/onboarding/);
    await page.getByLabel('Your name').fill('Alice');
    await page.getByRole('button', { name: 'Continue' }).click();

    await expect(page).toHaveURL(/\/dashboard/);
    await expect(page.getByText('Welcome Alice')).toBeVisible();
  });

  test.afterEach(async ({ request }) => {
    await request.delete(`/test/users?email=${userEmail}`);
  });
});

Pourquoi tu vas l'aimer

🎯

Locators sémantiques

getByRole('button', { name: 'Submit' }) survit aux refactors. Pas de #submit-btn-3 qui pète.

⏱️

Zero setTimeout

Auto-waiting natif de Playwright. Les tests attendent automatiquement le bon état.

🧹

Cleanup automatique

afterEach qui delete le test user. Pas de pollution entre tests.

📦

Network mocks

Stripe, SendGrid, Anthropic — mocks via page.route(). Tests rapides, isolés.

Quand l'utiliser

✅ Idéal pour

  • User journeys critiques (signup, paiement, onboarding)
  • Régression sur un flow qui a déjà cassé une fois
  • Sanity check avant chaque release
  • Smoke tests en CI

⚠️ Pas adapté quand

Combine avec ces agents

Questions fréquentes

Pourquoi Playwright et pas Cypress ?

Playwright est le standard de fait pour 2024+ : cross-browser natif, auto-waiting plus fiable, support multi-tab. L'agent supporte aussi Cypress sur les projets legacy.

Que sont les locators sémantiques ?

getByRole('button', { name: 'Sign up' }) au lieu de #signup-btn. Survit aux refactors de classes CSS, fonctionne avec les screen readers, plus stable.

Et pour les emails de test ?

L'agent te demande de préciser ton outil (mailpit, mailcatcher, ou ton propre endpoint /test/last-email). Sans ça, impossible de tester les liens de vérification.

Prêt à blinder tes flows ?

Télécharger Maifady