2016-03-25 5 views
0

Ich versuche, wenn zu überprüfen, ein div ein Kind mit bestimmten Klasse in Capybara hat, das folgende Stück Code: expect(find("#admin-row-1 .glyphicon-ban-circle")).to_not be_emptyCapybara: Überprüfen Sie Kinder eines div mit Klasse

Nach debug, ich die folgende Ausgabe

(byebug) find("#admin-row-1 .glyphicon-ban-circle") 
#<Capybara::Node::Element tag="a" path="/html/body/main/div[2]/div/div/div/table/tbody/tr[3]/td[3]/a[2]"> 

Aber dennoch, den Fehler folgende Erwartung bekommen

Failure/Error: expect(find("#admin-row-1 .glyphicon-ban-circle")).to_not be_empty 
     expected #<Capybara::Node::Element tag="a" path="/html/body/main/div[2]/div/div/div/table/tbody/tr[3]/td[3]/a[2]"> to respond to `empty?` 

Antwort

1

find return s ein Element oder eine Ausnahme auslöst, ist es nichts zurückliefert tha zu empty? reagiert, könnten Sie all stattdessen verwenden, die ein Array wie Objekt zurückgibt, aber eine bessere Lösung ist es, die have_css Matcher von Capybara

expect(page).to have_css('#admin-row-1 .glyphicon-ban-circle') 
+0

Es zu nutzen funktioniert genauso wie 'expect (page) .to have_selector ('# admin-row-1 .glyphicon-ban-circle')'? Was ist der Unterschied zwischen 'have_css' und' have_selector'? – vipin8169

+0

Der erste Parameter von Have_selectors ist der Typ des Capybara-Selektors (der Selektor in have_selector bezieht sich auf den Capybara-Selektor, nicht notwendigerweise auf CSS) und, wenn nicht angegeben, standardmäßig auf Capybara.default_selector, standardmäßig: css. have_css (...) ruft have_selector (: css, ...) auf, also ist es dasselbe, aber es macht deutlich, dass du css verwendest im Gegensatz zu: xpath,: field,: select, etc. –

Verwandte Themen