Ich weiß, dass Sie in Capybara so etwas tun können:
page.should have_css("ol li", :count => 2)
Unter der Annahme, dass die Seite beispielsweise nur ein übereinstimmendes Element enthält, ist der Fehler jedoch nicht sehr beschreibend:
1) initial page load shows greetings
Failure/Error: page.should have_css("ol li", :count => 2)
expected css "ol li" to return something
Anstelle dieser eher undurchsichtigen Fehlermeldung gibt es eine Möglichkeit, die Behauptung so zu schreiben, dass die Fehlerausgabe etwa "Beim Abgleichen von" ol li ", erwartet: 2, gefunden: 1" lautet. Natürlich könnte ich selbst eine benutzerdefinierte Logik für ein solches Verhalten erstellen - ich frage, gibt es eine Möglichkeit, dies "out of the box" zu tun?
Für das, was es wert ist, benutze ich Selenium-Treiber und RSpec.
page.should have_css("ol li", :count => 2)
was nicht bereits implementiert worden wäre.Antworten:
Das gefällt mir viel besser.
https://github.com/jnicklas/capybara/blob/415e2db70d3b19b46a4d3d0fe62f50400f9d2b61/spec/rspec/matchers_spec.rb
quelle
have_css
:expect(page).to have_css('input', count: 12)
Nun, da es anscheinend keine sofort einsatzbereite Unterstützung gibt, habe ich diesen benutzerdefinierten Matcher geschrieben:
Jetzt können Sie Dinge tun wie:
und erhalten Ausgabe wie:
Es macht den Trick für jetzt, ich werde versuchen, diesen Teil von Capybara zu machen.
quelle
Ich denke, das Folgende ist einfacher, liefert eine ziemlich klare Ausgabe und macht einen benutzerdefinierten Matcher überflüssig.
Dies wird dann bei einem Fehler ausgedruckt:
quelle
Bearbeiten: Wie von @ThomasWalpole hervorgehoben,
all
deaktiviert die Verwendung von Capybaras Warten / Wiederholen, sodass die obige Antwort von @pandaPower viel besser ist.Wie wäre es damit?
quelle
within
, es ruft.count
die Ergebnisse aufall
, die das Warten / Wiederholen deaktivieren. Durch Aufrufencount
der Ergebnisseall
(für die ein leeres "Array" eine gültige Rückgabe ist) konvertieren Sie in eine Ganzzahl und vergleichen sie. Wenn dieser Vergleich fehlschlägt, schlägt die Erwartung fehl. Wenn Sie stattdessen die Zähloption an einen der Matcher von Capybara übergeben, wartet capybara / versucht erneut, den angegebenen Selektor zu finden, bis die Zähloption übereinstimmt (oder Capybara.default_max_wait_time abläuft).Die derzeitige (02.09.2013) von Capybara empfohlene Best Practice lautet wie folgt ( Quelle ):
page.assert_selector('p#foo', :count => 4)
quelle
Die Antwort von @pandaPower ist sehr gut, aber die Syntax war für mich etwas anders:
quelle