Jak znaleźć element, dopasowując dokładny tekst elementu w Kapibara

103

Mam następujące dwa elementy w HTML

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

Próbuję znaleźć element, używając metody Kapibary

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

Powyższe zwróci dwa elementy, ponieważ oba zawierają tekst berlin.

Czy istnieje sposób na dopasowanie dokładnego tekstu w Kapibara?

amjad
źródło
Kapibara czy nokogiri? Dlaczego to jest oznaczone jako oba?
pguardiario

Odpowiedzi:

140

Użyj wyrażenia regularnego zamiast ciągu znaków jako wartości :textklucza:

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

Zapoznaj się z sekcją „Hash opcji” w Method: Capybara::Node::Finders#all dokumentacji .

PS: w dopasowaniach tekstowych rozróżniana jest wielkość liter. Twój przykładowy kod w rzeczywistości powoduje błąd:

find("a", :text => "berlin")
# => Capybara::ElementNotFound:
#    Unable to find css "a" with text "berlin"
pje
źródło
13
To straszne, że to najlepsza odpowiedź. : płacz:
BM5k
dlaczego mamy \ A i \ z między Berlinem?
Karan Verma
1
jak mogę dodać symbol zastępczy w wyrażeniu regularnym
FluffyBeing
Można było to załatwić piszącclick_link(link_text, :text => link_text)
Remember Why You Started
52

W zależności od używanej wersji klejnotu

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

mogą być przestarzałe. W takim przypadku musisz użyć

find('a', text: 'Berlin', match: :prefer_exact)
Gabriel Pumple
źródło
5

Ty też możesz to zrobić:

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

To znajdzie dla CSS.

Użycie tylko exact: truezamiast exact_textspowoduje wyświetlenie wiadomości, że exactopcja jest ważna tylko dla XPATH.

CamiloVA
źródło
3
lub nawet więcej, możesz użyćfind("a", exact_text: "berlin")
Kukunin
4

Preferuję używanie have_selectorwith texti exact_text: true:

expect(body).to have_selector 'a', text: 'Berlin', exact_text: true
Paweł Gościcki
źródło
0

Aby używać click_link w kapibara, musisz dodać jeszcze jedną właściwość w metodzie, która go używa.

click_link(link_name, :text => link_name)

Tutaj nazwa_linku to wartość tekstowa linku. Używając słowa kluczowego : text określamy, że chcemy kliknąć łącze o wartości tekstowej, która dokładnie odpowiada naszym wymaganiom.

Pamiętaj Dlaczego zacząłeś
źródło