web-dev-qa-db-fra.com

Cliquez sur un texte de correspondance exacte dans Cypress

Dans Cypress, la commande .contains Produit tous les éléments correspondants, donc pour cliquer dans un élément de liste déroulante avec un texte dessus, .contains Fonctionne très bien. Mais je suis confronté au problème que je dois cliquer dans un élément de la liste déroulante dont le texte est `` Étiquette de navigation '': le problème survient car il existe une autre option, dans la même liste déroulante, appelée `` Nouvelle étiquette de navigation '', et il est pressé à la place, comme cela apparaît en premier.

Existe-t-il un moyen de cliquer dans un élément qui correspond exactement au texte que vous souhaitez?

Given('I click on the {string} drop down option', option => {
  cy.get(`[data-test="dropdown"]`)
    .find('.item')
    .contains(option)
    .click();
});

Je résous partiellement le problème en utilisant une .last(), mais je trouve cette solution assez vague alors que j'essaie de garder mes étapes aussi réutilisables que possible, et ce n'est qu'un correctif pour le faire fonctionner dans ce problème spécifique.

Notez qu'il n'est pas possible d'avoir un test de données pour chaque élément spécifique dans la liste déroulante, car les éléments sont rendus directement à partir de sémantique-ui.

6
Baronvonbirra

Vous pouvez utiliser l'extrait de code ci-dessous pour cliquer sur un élément dont le texte est exact. Cela fonctionnera comme un charme, faites-moi savoir si vous rencontrez un problème.

Vous devez gérer comme ci-dessous dans cyprès qui est équivalent à getText () dans le webdriver Selenium.

clickElementWithEaxctTextMatch(eleText) {
  cy.get(".className").each(ele => {
    if (ele.text() === eleText) {
      ele.click();
    }
  });
}
2
Srinu Kodi