2010-06-06 6 views
36

Ich versuche, mit BDD Web-Entwicklung in Ruby mit Gurke + Capybara in den Griff zu bekommen und ich bin fest, was sollte eine einfache Aufgabe - nur um zu überprüfen die Anzahl der Zeilen in einer Tabelle. Die Absicht, was ich versuche zu erreichen ist etwas entlang der Linien von:Wie auf der Anzahl der HTML-Tabellen Zeilen in Ruby mit Capybara + Gurke

page.should have_xpath("//table[@id='myTable']") 
find("//table[@id='myTable']/tr").length.should == 3 

Aber das funktioniert nicht (fehlende Methode Länge) und ich kann nicht einen Weg zu behaupten, gegen die Tischlänge finden.

Alle Ideen jemand (bitte einfach auf mich tho‘Ich bin ein Rubin nooby)

Vielen Dank im Voraus

Neil

+0

können Sie den vollständigen Fehler einfügen? –

Antwort

3

ging ich mit diesem am Ende:

Then /^I should see "(.*)" once$/ do |text| 
    within_table('myTable') do 
     should have_xpath("//tr", :text => text, :count => 1) 
    end 
end 

die in geeigneter Weise elegant zu sein schien.

Ich weiß, dass die anderen Antworten funktionieren, aber das scheint gut zu lesen.

Irgendwelche Kommentare?

19

Ich glaube, Sie können dies tun:

page.should have_css("table#mytable tr", :count=>3) 
1

Die Methode #find gibt nur ein Element zurück (ich denke, es gibt nur das erste zurück, wenn mehrere Übereinstimmungen vorhanden sind), so dass Sie keine #length-Methode erhalten, weil das Ergebnis von #find ein Node und kein Array ist.

Um dies zu beweisen Sie sich, versuchen

puts find("//table[@id='myTable']/tr").class 

Was Sie wollen #all ist, mit dem Sie ein Array aller passenden Knoten zurückkehren wird.

12

Aus irgendeinem Grund „has_css“ für mich nicht funktioniert, aber „alle (Wähler)“ funktioniert wirklich wel

all("table#movies tr").count 
+23

Berkley SaaS Kurs? –

+4

Diese Kommentare sind vor 2 Jahren .. aber Ye! Sie sind wirklich hilfreich für meine SaaS HW)))) – Vadikus

+0

Spooky - Ich schrieb diese Frage vor 2 Jahren und jetzt mache ich den Berkley SaaS Kurs. Das Internet ist ein kleiner Ort - entweder das oder das ganze Internet ist auf dem Kurs :) – Neil

55

Obwohl have_css? den Trick, Ihre Tests sollten Sie sagen, wie sie es versäumt, anstatt nur zu sagen, dass irgendeine Bedingung wahr sein sollte und es falsch war. Vor diesem Hintergrund liest das erste Beispiel unten viel besser als die zweiten:

# IF FAILED => "expected 10, got 7" 
page.all('table#myTable tr').count.should == 10 

# IF FAILED => "expected true, got false" 
page.should have_css("table#myTable tr", :count=>10) 
+1

Stimmen Sie mit @andersonvom: viel schöner, wenn Der Test schlägt fehl. – Mike

+0

Sieht elegant aus! Vielen Dank. –

0

Auf diese Weise können Sie die Anzahl der Zeilen in der HTML-Tabelle lernen.

area = find_by_id('#areaID').all('tr').size 

Angenommen, am Anfang der Tabelle befinden sich Spalten. Auf diese Weise können Sie die tatsächliche Nummer erreichen.

area = area-1 
Verwandte Themen