2016-06-02 3 views
1

Ich muss alle Links auf der Seite finden, wo die href mit ../items/ beginnt. Zum Beispiel:Finden Sie alle Links, die eine href haben, die mit einem bestimmten Text beginnt

<a href="../items/some-link">Some link title</a> 
<a href="../other-link">Other link title</a> 
<a href="../items/some-link-2">Some link title 2</a> 

habe ich versucht, die folgende Regexp, aber es funktioniert nicht:

review_links = page.find_link('a')[:href] == '%r{^../items/\w+}' 

Was mache ich falsch?

+0

sein, was Struktur tut 'page.find_link ('a') [: href]' zurück? Testen, dass etwas * einem regulären Ausdruck entspricht, ist nicht das, was Sie wollen. Offensichtlich wird dein Link kein regulärer Ausdruck sein. Sie möchten testen, ob es * passt *. – tadman

Antwort

1

Sie können einen CSS-Selektor verwenden, um alle Links zu finden, haben ein href Attribut mit einem Text beginnen:

review_links = page.all('a[href^="../items/"]') 
p review_links.map(&:text) 
#=> ["Some link title", "Some link title 2"] 

Beachten Sie, dass die href^= bedeutet ein href Attribut ab.

3

Der :link Selektor akzeptiert eine :href Option, die eine Regex akzeptiert. Also, wenn Sie für ein einzelnes Ergebnis suchen, könnte Sie tun

page.find_link(nil, href: /regex to match against/) 

in Capybara 2.7 die anfängliche nil Sie ist erforderlich, um anzuzeigen, werden die normalen Locator nicht verwenden, die übergeben werden würde find_link (Link-Text, usw.) , in Capybara 2.8, wenn es veröffentlicht wird, wird es nicht notwendig sein. Hinweis: Die Regex wird mit dem Knoten ['href'] abgeglichen, der in den meisten Treibern die Eigenschaft href (im Gegensatz zu attribute) ist und daher normalisiert wird, um die vollständige URL zu sein, auf die der Link verweist - obwohl das Attribut in der Dokument kann nur auf/abc/def gesetzt werden. Wenn Sie tatsächlich für mehr als ein Ergebnis suchen, dann können Sie

page.all(:link, nil, href: /regex to match against/) 

tun, wenn stattdessen die Überprüfung Sie nur, dass eine bestimmte Anzahl von passenden Links (3) existieren würde es

expect(page).to have_link(nil, href: /regex to match/, count: 3) 
Verwandte Themen