2012-12-14 6 views
79

passend habe ich folgende zwei Elemente in HTMLWie ein Element zu finden, indem genauen Text des Elements in Capybara

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

I unter Verwendung folgende Capybara Verfahren, das Element zu finden versuchen

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

Oben werden zwei Elemente zurückgegeben, da beide Text berlin enthalten.

Gibt es eine Möglichkeit, den genauen Text in Capybara anzupassen?

+0

Capybara oder Nokogiri verwenden? Warum ist das beides markiert? – pguardiario

Antwort

114

einen regulären Ausdruck anstelle einer Zeichenfolge für den Wert des Schlüssels :text Verwendung:

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

Schauen Sie sich die ‚Optionen Hash‘ des Method: Capybara::Node::Finders#alldocumentation.

PS: Bei Textübereinsätzen wird zwischen Groß- und Kleinschreibung unterschieden. Ihr Beispielcode stellt tatsächlich einen Fehler:

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

Es ist schrecklich, dass dies die beste Antwort ist. : weinen: – BM5k

+0

Warum haben wir \ A und \ z zwischen Berlin? –

+0

@KaranVerma: http://StackOverflow.com/a/5979643/1004889 – pje

35

Je nachdem, welche Version des Juwel Sie verwenden

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

veraltet sein können. In diesem Fall müssten Sie

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