So finden Sie ein Element, indem Sie den genauen Text des Elements in Capybara abgleichen


102

Ich habe folgende zwei Elemente in HTML

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

Ich versuche, das Element mithilfe der folgenden Capybara-Methode zu finden

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

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

Gibt es eine Möglichkeit, exakten Text in Capybara abzugleichen?


Capybara oder Nokogiri? Warum ist das beides markiert?
pguardiario

Antworten:



139

Verwenden Sie für den Wert des :textSchlüssels einen regulären Ausdruck anstelle einer Zeichenfolge :

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

Lesen Sie den Abschnitt 'Options Hash' in der Method: Capybara::Node::Finders#all Dokumentation .

PS: Bei Textübereinstimmungen wird zwischen Groß- und Kleinschreibung unterschieden. Ihr Beispielcode löst tatsächlich einen Fehler aus:

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

13
Es ist schrecklich, dass dies die beste Antwort ist. : cry:
BM5k

Warum haben wir \ A und \ z zwischen Berlin?
Karan Verma

1
Wie kann ich einen Platzhalter in den
regulären Ausdruck einfügen

Dies hätte schriftlich erledigt werden könnenclick_link(link_text, :text => link_text)
Denken Sie daran, warum Sie

52

Abhängig davon, welche Version des Edelsteins Sie verwenden

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

kann veraltet sein. In diesem Fall müssten Sie verwenden

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

4

Ich bevorzuge die Verwendung have_selectormit textund exact_text: true:

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

4

Sie können dies auch tun:

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

Das wird für CSS finden.

Wenn Sie nur exact: trueanstelle von verwenden, exact_textwird eine Meldung angezeigt, dass diese exactOption nur für XPATH gültig ist.


2
oder noch mehr können Sie verwendenfind("a", exact_text: "berlin")
Kukunin

0

Um click_link in capybara zu verwenden, müssen Sie der Methode, die es verwendet, eine weitere Eigenschaft hinzufügen.

click_link(link_name, :text => link_name)

Hier ist der Linkname der Textwert eines Links. Mit dem Schlüsselwort : text geben wir an, dass wir auf einen Link mit dem Textwert klicken möchten, der genau unserer Anforderung entspricht.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.