Vérification E2E (Playwright + connexion locale)
Vue d'ensemble
Pilotez le serveur dev Chorus en cours d'exécution dans un vrai navigateur via le MCP Playwright pour vérifier les changements d'interface utilisateur de bout en bout. Boucle principale : connexion avec identifiants locaux → navigation → snapshot pour lire l'état / agir → capture d'écran pour l'humain.
Ceci est une acceptation manuelle, pas la suite Vitest automatisée (pnpm test). Utilisez-la quand un AC dit « l'utilisateur voit X » et seul un vrai navigateur peut le confirmer.
Prérequis
- Serveur dev sain sur le port 8637. Vérifiez toujours en premier :
curl -s -o /dev/null -w "%{http_code}" http://localhost:8637/login # attendu : 200Si ce n'est pas
200(connexion refusée, 500, ou autre), le serveur ne tourne pas ou est cassé — lancez-le avecpnpm dev:localet revérifiez jusqu'à obtenir200avant de piloter le navigateur. (pnpm devmarche aussi, maispnpm dev:localdémarre la pile locale complète.) - Outils MCP Playwright disponibles. Ils sont différés — chargez-les d'abord :
ToolSearch("select:mcp__playwright__browser_navigate,mcp__playwright__browser_snapshot,mcp__playwright__browser_take_screenshot,mcp__playwright__browser_click,mcp__playwright__browser_fill_form")
Étape 1 — Trouver les identifiants
Le dev local utilise le chemin default-auth (simple email + mot de passe sur /login). Lisez-le depuis le fichier .env à la racine du repo :
grep -E "DEFAULT_USER|DEFAULT_PASSWORD" .env
# DEFAULT_USER="admin@chorus.local"
# DEFAULT_PASSWORD="chorus"
DEFAULT_USER se connecte en tant qu'utilisateur d'espace de travail ordinaire (p. ex. admin@chorus.local). Ce n'est PAS la même chose que SUPER_ADMIN_EMAIL (le panneau /login/admin) ou le flux Cognito OIDC décrit dans l'ancien .claude/skills/oidc-login.md — pour la vérification normale de pages vous voulez default-auth.
Étape 2 — Connexion (flux vérifié)
Quand default-auth est activé, /login affiche le formulaire email+mot de passe directement (pas de redirection SSO) :
browser_navigate→http://localhost:8637/loginbrowser_snapshot→ saisissez larefde la boîte Email, la boîte Mot de passe, et le bouton « Sign In ».browser_fill_formavec les deux champs :[{ name: "Email", target: "<email-ref>", type: "textbox", value: "admin@chorus.local" }, { name: "Password", target: "<password-ref>", type: "textbox", value: "chorus" }]browser_clickle bouton « Sign In ».- Succès = l'URL devient
/projects. Le résultat de l'outil affiche laPage URL— confirmez qu'elle a changé. Si elle reste sur/loginavec une banneau d'erreur, les identifiants ou la config default-auth du serveur sont erronés.
Déjà authentifié depuis une session antérieure ? Le navigateur garde la session, donc vous pouvez sauter directement à l'Étape 3. Pour tester la connexion elle-même, déconnectez-vous d'abord : sur n'importe quelle page de tableau de bord cliquez le bouton « Sign out » (bas-gauche de la barre latérale), qui vous renvoie à /login. (Si /login affiche déjà le formulaire email+mot de passe, vous êtes déconnecté — il n'y a pas de bouton « Sign out » à chercher ; procédez simplement avec l'Étape 2.)
Étape 3 — Naviguer & observer
browser_navigatevers la cible, p. ex. un tableau de bord de projet :http://localhost:8637/projects/<project-uuid>/dashboardbrowser_snapshotest l'outil de travail — il retourne un arbre d'accessibilité avec des idsrefstables. Utilisez-le pour lire l'état de la page et pour obtenir laref/targetque vous passez àbrowser_click,browser_fill_form, etc. Préférez-le aux captures d'écran pour agir.- Basculez l'interface utilisateur et resnapshootez pour comparer les états (p. ex. les contrôles segmentés Ideas/Stats et Flat/Lineage du tableau de bord re-rendent chacun l'arbre).
- Si une navigation retourne un arbre quasi vide, la page hydrate encore — appelez
browser_snapshotà nouveau.
Étape 4 — Capture d'écran pour l'humain
Utilisez browser_take_screenshot quand l'humain a besoin de voir le résultat (mise en page visuelle, espacement, couleur).
Préfixez toujours le nom de fichier avec .playwright-mcp/ — ce répertoire est dans gitignore. Un simple filename: "foo.png" sauvegarde à la racine du repo et pollue git status.
browser_take_screenshot({ type: "png", filename: ".playwright-mcp/dashboard-lineage.png" })
Puis Read pour l'afficher en ligne. Le résultat de l'outil screenshot affiche un chemin relatif au repo ; Read en nécessite un absolu, donc lisez-le comme <repo-root>/.playwright-mcp/<name>.png (préfixez le chemin que vous avez passé avec la racine du repo absolu). Pour capturer un seul élément au lieu du viewport, passez sa ref target (depuis un snapshot). Le MCP sauvegarde aussi automatiquement les fichiers snapshot .yml et console .log sous .playwright-mcp/.
Référence rapide
| Besoin | Outil |
|---|---|
| Aller à une URL | browser_navigate |
| Lire l'état de la page / obtenir les refs d'éléments | browser_snapshot |
| Cliquer / taper / remplir | browser_click, browser_type, browser_fill_form |
| Capture visuelle pour l'humain | browser_take_screenshot → .playwright-mcp/<name>.png |
| Vérifier les erreurs console | browser_console_messages |
Erreurs courantes
| Erreur | Correction |
|---|---|
Appeler browser_* avant de charger les schémas |
ToolSearch("select:mcp__playwright__browser_...") d'abord ; les appels directs échouent avec InputValidationError. |
| Screenshot avec nom de fichier simple | Préfixez .playwright-mcp/ ou il atterrit à la racine du repo (non ignoré par git). |
Suivre l'ancien oidc-login.md (Cognito) pour le dev local |
Dev local = default-auth (.env DEFAULT_USER/DEFAULT_PASSWORD) → /api/auth/default-login → /projects. |
| Agir sur des coordonnées d'une capture d'écran | Les captures d'écran ne sont pas exploitables ; obtient les refs depuis browser_snapshot. |
| « Login failed » mais identifiants ont l'air corrects | Confirmez que le serveur dev tourne sur 8637 et que Page URL a vraiment quitté /login. |
find-er une capture d'écran sauvegardée à travers le FS |
Elle est déjà à .playwright-mcp/<name>.png que vous avez passé ; juste Read-la. |