Deux correspondances demandent une décision produit.
Limitez le contrôle répété au bon enregistrement avant de faire passer le clic.

Édition traduite. Les identifiants techniques restent sous leur forme originale.

Une page a deux boutons Apply : mises à jour hebdomadaires et avis de sécurité. Un test généré reçoit une erreur de sélection stricte. first() permet le clic, mais l'ordre du document choisit désormais le réglage modifié. Le test doit identifier l'enregistrement voulu.
Le guide des locators impose une cible unique aux opérations sur un élément. Plusieurs correspondances rendent le clic ambigu. count() accepte plusieurs éléments : compter deux et échouer au clic est cohérent.
Examiner les correspondances
Lisez boutons, titres et enregistrements ensemble. Un libellé répété dans des cartes distinctes peut être normal ; un doublon accidentel dans une carte peut être un défaut. Vérifiez l'exigence avant de modifier le sélecteur.
Notre exemple inventé contient deux régions nommées, chacune avec Apply et un statut local. Aucun serveur, compte réel ou réglage persistant. Il vérifie la région touchée et son voisin inchangé.
const weekly = page.getByRole('region', { name: 'Weekly updates' });
const apply = weekly.getByRole('button', { name: 'Apply', exact: true });
await expect(apply).toHaveCount(1);
await apply.click();
await expect(weekly.getByRole('status')).toHaveText('Applied');Le code nécessite le runner Playwright et expect importé. La fixture fournit le nom et le gestionnaire du bouton. Le statut prouve un effet d'interface local, pas une sauvegarde ni une livraison.
Justifier la région
Choisissez le parent selon l'enregistrement voulu. Le nom accessible fonctionne ici. Ailleurs, utilisez une ligne filtrée par une identité stable ou un identifiant de test convenu. Vérifiez encore l'identité après tri ou insertion.
Le texte exact ne distingue pas deux boutons identiques dans la même région. Le comptage révèle une hypothèse d'unicité incorrecte avant l'action. Conservez le comptage global si la structure répétée fait partie de l'exigence.
Le locator est résolu à l'utilisation. La page peut changer entre observations ; compter ne verrouille pas un noeud DOM. Playwright applique encore ses contrôles au clic. Un comptage préalable ne garantit pas une page immuable.
Justifier une position
first(), last() et nth() peuvent choisir une autre cible après modification. Une position convient à une exigence d'ordre, comme le premier résultat classé. Vérifiez ordre et identité. La disparition de l'erreur ne suffit pas.
Le test local constate deux correspondances, intercepte l'erreur stricte et vérifie les statuts inchangés. Il clique ensuite dans Weekly updates et vérifie la sécurité inchangée. C'est une vérification de cette limite, pas de toute erreur de sélection.
Notez composant, identité stable et changement attendu. AnyTest décrit l'exploration d'applications et les tests revus par des humains. Vérifiez les contrôles répétés face au bon enregistrement. Aucun algorithme de sélection AnyTest précis n'est revendiqué.
Questions courantes
Le texte exact distingue-t-il deux libellés identiques ?
Non. Limitez aussi la région ou l'enregistrement.
first() est-il toujours incorrect ?
Non. Il faut un ordre explicitement requis et une identité vérifiée.