2016-04-06 6 views
0

Ich versuche, auf einen Link mit Capyabara/Selenium klicken.Capybara/Selen - Gibt es eine Möglichkeit, auf einen Link zu klicken, der isoliert wurde, aber keinen eindeutigen Bezeichner oder Inhalt hat?

Es ist ein Pin-Link auf einer Bing Karte, example can be found here.

Ich kann mit dem all(…).each durch die 161 Links iterieren:

within(".map") do 
    all("a.dealer-pin").each do |link| 
    click_link(link) 
    end 
end 

Aber die click_link(link) wirft einen Fehler:

Capybara::ElementNotFound: 
Unable to find link 
#<Capybara::Node::Element tag="a" 
path="/html/body/form/article/div/div/section/div[2]/div/div[2]/div/div[2]/div[2]/div[3]/div/a[1]"> 

Diese Links haben weder eine eindeutige Kennung noch ein Inhalt (Bild-Tag) das ist einzigartig oder hat eine eindeutige Kennung.

Antwort

0

Wie der Fehler andeutet, kann jedes DOM-Element durch seinen XPath referenziert werden, der ähnlich, aber spezifischer ist als Standard-CSS-Selektoren. Sie können den Pfad im Chrome-Inspektor anzeigen, indem Sie mit der rechten Maustaste auf den jeweiligen Knoten klicken.

Seien Sie vorsichtig, etwas zu testen, das zu spezifisch ist. Es wird wahrscheinlich fragil sein und oft einen Test machen, der schwer zu warten ist.

Relevante Capybara doc: http://www.rubydoc.info/github/jnicklas/capybara/master/Capybara/Node/Finders

+0

Wenn ich xpath für das 'a'-Tag kopieren:' // * [@ id = "null"] '. Für das 'img' darin bekomme ich:' // * [@ id = "null"]/img'. – Sebabouche

0

Da Sie bereits das Verbindungselement haben Sie gerade click auf nennen müssen - click_link Links durch ihre ID, Titel findet, oder Textinhalte (auch alt-Attribut eines verschachtelten img) - aber Sie haben sie bereits mit einer normalen CSS-Abfrage gefunden

within(".map") do 
    all("a.dealer-pin").each do |link| 
    link.click 
    end 
end