L'élément est là, et le clic ne fait rien
Le sélecteur trouve le bouton, le clic annonce un succès, et rien ne bouge. Trois niveaux, dans l'ordre où les essayer.
Le symptôme. Le sélecteur trouve un élément réel et visible. Vous cliquez,
vous obtenez succes: true, et la page ne bouge pas. Ou bien vous obtenez un
délai dépassé sur un élément dont --a11y montre qu’il est là.
Pourquoi un élément réel peut être refusé
Playwright refuse de cliquer sur ce qu’une personne ne pourrait pas cliquer. Avant d’agir, il vérifie que l’élément est visible, stable, et qu’aucun autre ne le recouvre. Cette vérification vous évite de cliquer sur un voile de chargement en croyant avoir atteint le bouton derrière.
Elle refuse aussi des éléments qu’une personne peut cliquer : un
interrupteur dessiné en CSS, un bouton dans un <dialog> ouvert par
showModal(), un élément sous une couche décorative. Tous réels, tous
utilisables, tous refusés.
Trois niveaux, dans cet ordre
1. Le clic simple. Commencez toujours par là. S’il fonctionne, le reste ne compte pas.
{"type": "cliquer", "selecteur": "#confirm"}
2. force: true. Saute les vérifications de Playwright et clique quand
même : la bonne réponse pour un élément bien présent qui échoue aux
vérifications.
{"type": "cliquer", "selecteur": "#confirm", "force": true}
3. repli_js: true. Dinoer fait d’abord le clic natif (avec force s’il
est indiqué) ; c’est seulement si Playwright lève une erreur qu’il clique sur
l’élément en JavaScript (el.click()), comme vous le feriez à la main dans
une action evaluer.
{"type": "cliquer", "selecteur": "#dialog-confirm button[type=submit]",
"force": true, "repli_js": true}
Indiquer l’option ne transforme pas chaque clic en clic JavaScript : le repli ne s’exécute qu’après un véritable échec.
Savoir quel niveau a fait le travail
La réponse l’indique, seulement quand le repli s’est réellement exécuté :
"boussole": {"repli_js_utilise": true}
Vous savez ainsi si votre cible a vraiment besoin du niveau 3 avant de recopier l’option sur toutes les actions du scénario.
Une incompatibilité, signalée d’emblée
repli_js exécute du JavaScript, que –no-evaluer
interdit pour toute l’exécution. Un appel qui combine les deux est refusé avec
arguments_incompatibles (code de sortie 2) avant le démarrage du
navigateur.
Le cas qui se ressemble et n’est pas le même
Si le clic échoue sur un élément situé dans une boîte de dialogue ouverte
lors d’un appel précédent, aucun niveau ne vous aidera. La boîte a disparu :
reprendre une session recharge la page, et une boîte ouverte par
showModal() ne survit pas à un rechargement.
C’est un autre problème, avec une autre solution. La session ne survit pas entre deux appels →
En bref
- Essayez le clic simple, puis
force: true, puisrepli_js: true, dans cet ordre. repli_jsa besoin d’un véritable échec pour s’exécuter ; ce n’est pas un clic JavaScript à la demande.- Lisez
repli_js_utilisepour savoir ce dont votre cible a réellement besoin. - Un clic qui échoue sur un élément issu d’un appel précédent est un problème de session, pas de clic.