2010-06-06 8 views
36

Próbuję opanować rozwój sieci BDD w Ruby używając ogórka i kapibary i utknąłem w czymś, co powinno być łatwym zadaniem - wystarczy sprawdzić liczba wierszy w tabeli. Intencją co próbuję osiągnąć coś wzdłuż linii:Jak twierdzić na temat liczby wierszy tabeli html w ruby ​​przy użyciu kapibara + ogórek

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

Ale to nie działa (brak długość metoda) i nie mogę znaleźć sposób, aby dochodzić od długości stołu.

ktoś jakieś pomysły (proszę być łatwo mnie tho”Jestem Nooby rubinowy)

góry dzięki

Neil

+0

Czy możesz wkleić cały błąd? –

Odpowiedz

3

Poszedłem z tym w końcu:

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

co wydawało odpowiednio elegancki.

Zdaję sobie sprawę, że inne odpowiedzi działają, ale wydaje się, że to dobrze.

Masz jakieś uwagi?

19

myślę, że można to zrobić:

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

Metoda #find zwraca tylko jeden element (myślę, że po prostu zwraca pierwszą, jeśli istnieje kilka dopasowań), więc nie otrzymasz metody # length, ponieważ wynik #find jest węzłem, a nie tablicą.

Aby udowodnić to do siebie, spróbuj

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

Co chcesz jest #all, co spowoduje powrót tablicę wszystkich węzłów dopasowania.

12

Z jakiegoś powodu „has_css” nie działa dla mnie, ale „wszystko (selektor)” działa bardzo wel

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

Kurs Berkley SaaS? –

+4

Te komentarze pochodzą sprzed 2 lat .. ale Ye! Są naprawdę pomocni dla mojego SaaS HW)))) – Vadikus

+0

Spooky - Napisałem to pytanie 2 lata temu i teraz robię kurs Berkley SaaS. Internet to małe miejsce - albo to, albo cały internet jest na trasie :) – Neil

55

Nawet have_css? rade, twoje testy powinny powiedzieć, jak nie udało, zamiast twierdzić, że jakiś warunek miał być prawdziwy i był fałszywy. Mając to na uwadze, pierwszy przykład poniżej brzmi znacznie lepiej niż drugi:

# 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

Zgadzam się z @andersonvom: o wiele ładniej, gdy test kończy się niepowodzeniem. – Mike

+0

Wygląda elegancko! Dziękuję Ci. –

0

W ten sposób można dowiedzieć się liczbę wierszy w tabeli html.

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

Załóżmy, że istnieją kolumny na początku table.You może osiągnąć liczbę rzeczywistą w ten sposób.

area = area-1