114 votes

Comment trouver un élément en faisant correspondre le texte exact de l'élément dans Capybara

J'ai les deux éléments suivants en HTML

<a href="http://stackoverflow.com/berlin" >Berlin</a>
<a href="http://stackoverflow.com/berlin" >Berlin Germany </a>

J'essaie de trouver l'élément en utilisant la méthode Capybara suivante

find("a", :text => "berlin")

L'exemple ci-dessus renverra deux éléments car les deux contiennent le texte berlin.

Existe-t-il un moyen de faire correspondre un texte exact dans Capybara ?

0 votes

Capybara ou nokogiri ? Pourquoi est-ce étiqueté les deux ?

145voto

pje Points 4475

Utilisez un regexp au lieu d'une chaîne de caractères pour la valeur de l'option :text clé :

find("a", :text => /\ABerlin\z/)

Consultez la section " Options Hash " du site Web de la Commission européenne. Method: Capybara::Node::Finders#all documentation .

PS : les correspondances de texte sont sensibles à la casse. Votre exemple de code soulève en fait une erreur :

find("a", :text => "berlin")
# => Capybara::ElementNotFound:
#    Unable to find css "a" with text "berlin"

13 votes

C'est terrible que ce soit la meilleure réponse. :cry :

0 votes

Pourquoi avons-nous \A y \z entre Berlin ?

1 votes

Comment puis-je ajouter un caractère de remplacement dans l'expression rationnelle ?

61voto

Gabriel Pumple Points 703

En fonction de la version de la gemme que vous utilisez

find('a', text: 'Berlin', exact: true)

peut être déprécié. Dans ce cas, vous devrez utiliser

find('a', text: 'Berlin', match: :prefer_exact)

15voto

CamiloV Points 36

Vous pouvez également le faire :

find('a', text: 'Berlin', exact_text: true)

Cela trouvera pour CSS.

Et en utilisant seulement exact: true au lieu de exact_text vous montrera un message qui exact est uniquement valable pour XPATH.

4 votes

Ou même plus, vous pouvez utiliser find("a", exact_text: "berlin")

9voto

Matt Points 9560

Existe-t-il un moyen de faire correspondre un texte exact dans Capybara ?

Oui. Utilisez le exact option :

find( 'a', text: 'Berlin', exact: true )

7voto

John W Points 21

Il suffit d'utiliser L'option exacte de Capybara :

Capybara.exact = true

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X