Come trovare un elemento facendo corrispondere il testo esatto dell'elemento in Capybara


102

Ho seguenti due elementi in HTML

<a href="/berlin" >Berlin</a>
<a href="/berlin" >Berlin Germany </a>

Sto cercando di trovare l'elemento utilizzando il seguente metodo Capybara

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

Sopra restituirà due elementi perché entrambi contengono il testo berlino.

C'è un modo per abbinare il testo esatto in Capybara?


Capibara o nokogiri? Perché questo è contrassegnato con entrambi?
pguardiario

Risposte:



139

Usa una regexp invece di una stringa per il valore della :textchiave:

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

Controlla la sezione "Opzioni Hash" della Method: Capybara::Node::Finders#all documentazione .

PS: le corrispondenze di testo fanno distinzione tra maiuscole e minuscole. Il tuo codice di esempio in realtà genera un errore:

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

13
È terribile che questa sia la risposta migliore. : cry:
BM5k

perché abbiamo \ A e \ z tra Berlino?
Karan Verma

1
come posso aggiungere un segnaposto nella regex
FluffyBeing

Questo avrebbe potuto essere gestito scrivendoclick_link(link_text, :text => link_text)
Ricorda perché hai iniziato il

52

A seconda della versione della gemma che stai utilizzando

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

potrebbe essere deprecato. In tal caso dovresti usare

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

4

La mia preferenza è usare have_selectorcon texte exact_text: true:

expect(body).to have_selector 'a', text: 'Berlin', exact_text: true

4

Puoi farlo anche tu:

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

Questo troverà per CSS.

E usando solo exact: trueinvece di exact_textti mostrerà un messaggio che l' exactopzione è valida solo per XPATH.


2
o anche di più, puoi usarefind("a", exact_text: "berlin")
Kukunin

0

Per utilizzare click_link in capybara è necessario aggiungere un'altra proprietà nel metodo che lo utilizza.

click_link(link_name, :text => link_name)

Qui il link_name è il valore di testo di un collegamento. Utilizzando la parola chiave : text stiamo specificando che vogliamo fare clic su un collegamento avente il valore di testo che corrisponde esattamente al nostro requisito.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.