Cypress a lancé une fonctionnalité bêta appelée tap qui permet aux agents de codage pilotés par l'IA de se connecter à une session de test Cypress en direct, de récupérer des instantanés (snapshots) du DOM et les journaux de commandes, et d'utiliser ces informations visuelles pour diagnostiquer les échecs. L'outil fonctionne uniquement avec Cypress 15.21.0 ou une version ultérieure, un navigateur basé sur Chromium et l'interface utilisateur « cypress open » ; il ne fonctionne pas en mode headless.

Pourquoi les agents d'IA ont besoin de plus qu'un code de sortie

La plupart des assistants de codage IA traitent une exécution Cypress comme n'importe quel autre outil en ligne de commande : ils lancent npx cypress run, lisent le statut de sortie du processus et décident si le test a réussi. Un code de sortie indique à l'agent que quelque chose s'est mal passé, mais il ne donne aucun indice pour savoir si un sélecteur a été mal saisi, si une page n'a pas réussi à se charger ou si une superposition (overlay) a bloqué un bouton. Les humains, en revanche, ouvrent l'interface utilisateur de Cypress, observent le navigateur, inspectent l'arbre DOM et lisent le journal des commandes avant de formuler une hypothèse.

Ce fossé rend le débogage automatisé fragile. Un message « Element not found » peut provenir de dizaines de causes profondes et, sans preuve visuelle, une IA peut continuer à essayer la même correction, tournant ainsi en boucle indéfiniment.

Comment tap comble ce fossé

Tap crée une interface basée sur le terminal pour une instance Cypress en cours d'exécution. Une fois que le développeur lance Cypress en mode "open" :

npx cypress open --e2e --browser=chrome

l'agent peut émettre une série de commandes avec sortie JSON depuis un shell séparé :

  • npx cypress tap specs --json – liste les fichiers spec disponibles.
  • npx cypress tap run <spec> --json – lance l'exécution d'une seule spec.
  • npx cypress tap status --json – renvoie le statut de l'exécution en cours, y compris les horodatages.

Comme la charge utile (payload) du statut contient un horodatage startedAt, l'agent peut vérifier qu'il consulte des résultats récents plutôt qu'une exécution obsolète terminée plus tôt. Se fier uniquement au code de sortie brut ne suffit plus.

Lorsqu'un test échoue, l'agent peut approfondir :

  • npx cypress tap reporter --json – récupère le rapport de test global.
  • npx cypress tap command --test-id <ID> --command-id <ID> --json – extrait la commande exacte qui a généré une erreur, accompagnée d'un instantané du DOM de l'application, de l'arbre ARIA et de tous les attributs d'élément pertinents à ce moment-là.

Armée de cet instantané, l'IA peut raisonner sur la raison pour laquelle le sélecteur a échoué, si la page était encore en cours de chargement ou si une fenêtre modale masquait la cible. Elle peut ensuite proposer une modification de code, l'appliquer et relancer la même spec pour vérifier la correction.

Une politique de sécurité pour les agents autonomes

Pour éviter que la boucle ne tourne indéfiniment, l'équipe Cypress suggère un flux de travail discipliné :

  1. Exécuter un seul fichier spec spécifique.
  2. Interroger tap status avec une échéance stricte, en ignorant tout résultat dont le startedAt est plus ancien que le dernier interrogage.
  3. Inspecter uniquement le test en échec et la commande fautive.
  4. Autoriser une seule modification de code avant l'exécution suivante.
  5. Relancer la spec.
  6. Si le résultat change, s'arrêter et signaler un humain pour révision.

L'agent devrait également générer une explication en langage naturel de ce qu'il a observé et de la raison pour laquelle la correction proposée devrait fonctionner. Réussir le test ne suffit pas ; l'IA doit démontrer qu'elle a compris les preuves visuelles.

Qui peut en bénéficier

Les développeurs qui s'appuient déjà sur des assistants IA pour la génération de code peuvent désormais offrir à ces assistants une surface de débogage plus riche. Le bénéfice attendu est une réduction du temps passé à traquer les tests instables (flaky tests), en particulier dans les grandes suites de tests de bout en bout (end-to-end) où la reproduction manuelle d'un échec peut prendre plusieurs minutes. Les équipes qui adoptent tap pourraient voir un délai de traitement plus court pour les pull requests touchant aux composants d'interface utilisateur, et un besoin moindre de sessions de débogage itératives.

Risques et limitations

Tap est encore en version bêta, ce qui signifie qu'il peut contenir des bugs, changer sa syntaxe de commande ou abandonner le support de certaines configurations sans préavis. Sa dépendance à l'interface utilisateur "open" exclut les pipelines CI en mode headless, les équipes devront donc prévoir une stratégie distincte pour les builds automatisés. Comme la fonctionnalité diffuse des données DOM en direct, il y a une légère surcharge de performance qui pourrait ralentir les specs volumineuses. Enfin, la politique de sécurité suppose que l'IA peut respecter les échéances et s'arrêter après une seule modification ; un agent mal conçu pourrait toujours entrer dans une boucle infinie ou appliquer une correction incorrecte.

À surveiller ensuite

  • Cycles de feedback bêta – Cypress affinera probablement le schéma JSON et ajoutera des commandes plus granulaires en fonction des retours des premiers utilisateurs.
  • Intégration avec la CI – Attendez-vous à des scripts communautaires qui font le pont entre l'exigence du mode ouvert de tap et les exécuteurs headless, peut-être en lançant un affichage virtuel.
  • Outils pour agents IA – Les éditeurs développant des assistants de codage pourraient commencer à inclure le support de tap en tant que module de débogage par défaut, rendant la fonctionnalité plus visible dans les extensions d'IDE les plus répandues.

Si vous expérimentez la maintenance de tests pilotée par l'IA, essayez tap sur un seul test instable et voyez si le contexte visuel raccourcit le cycle de débogage. L'outil ne remplacera pas le jugement humain, mais il offre à votre agent de codage une paire d'yeux qui lui faisait défaut jusqu'à présent.