2017-05-10 1 views
1

Ich habe eine Seite-interner Link in einer HTML-Seite:Wie kann ich wörtlich href Attribut erhalten

<div class="bar"> 
    <a href="#foo">Go to foo</a> 
</div> 

ich dieses Ankerelement mit Capybara Matcher ausgewählt. Wenn ich versuche, das href Attribut zuzugreifen, wird der Wert auf vollständige URL erweitert:

find(".bar a")[:href] # => "http://path/to/page#foo" 

Wie kann nur den internen Link erhalten, das heißt, den Wert des wörtlich href?

find(".bar a")... # => "#foo" 
+0

kann nicht finden replizieren Sie dies mit Capybara 2.4.3 und rspec 3.5.0. 'finden ('. bar a') [: href] # =>" #foo "' – omnikron

+0

@omnikron Das ist irgendwie überraschend. Ich benutze Capybara 2.12.0 und rspec 3.5.0. – sawa

+0

Ich nehme an, dass Sie keine Art von Pfadhelfer verwenden, um das Anker-Tag zu generieren ...? Es lohnt sich, in diesem Fall die HTML-Datei zu überprüfen. Sonst bin ich ratlos. – omnikron

Antwort

2

Capybara gibt die Eigenschaft href (als Gegensatz zu dem Attribut) in der Lage ist JS-Treiber, die normalisiert ist. Um den Zugriff auf den Attributwert erhalten Sie evaluate_script

link = find(".bar a") 
evaluate_script("arguments[0].getAttribute('href')", link) 

Wenn auf der anderen Seite verwenden müssen, nur Sie den Link, um zu überprüfen hat, dass bestimmte HREF-Attribut können Sie tun, dass mit dem: Verbindungsauswähler

expect(page).to have_link('Go to foo', href: '#foo') 

oder den Link durch das Attribut href

link = find(:link, href: '#foo') 

etc ...

Verwandte Themen