2010-06-06 14 views
36

Je suis en train d'essayer de développement BDD web en Ruby en utilisant concombre + capybara et je suis bloqué à ce qui devrait être une tâche facile - juste pour vérifier le nombre de lignes dans une table. L'intention de ce que je suis en train de réaliser quelque chose le long des lignes de:Comment faire valoir sur le nombre de lignes de tableau html dans ruby ​​en utilisant capybara + concombre

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

Mais cela ne fonctionne pas (manque longueur de méthode) et je ne peux pas trouver un moyen de faire valoir contre la longueur de la table.

Toutes les idées qui que ce soit (s'il vous plaît être facile sur moi bien que je suis un nooby rubis)

Merci à l'avance

Neil

+0

pouvez-vous coller l'erreur complète? –

Répondre

3

Je suis allé avec ce à la fin:

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

qui semblait convenablement élégant.

Je me rends compte que les autres réponses fonctionnent mais cela semble bien lire.

Un commentaire?

19

Je pense que vous pouvez le faire:

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

La méthode #find ne renvoie qu'un seul élément (je pense qu'il renvoie juste le premier s'il y a plusieurs correspondances) donc vous n'obtenez pas une méthode #length car le résultat de #find est un Node pas un Array.

Pour prouver à vous-même, essayez

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

Qu'est-ce que vous voulez est #all, qui vous renvoie un tableau de tous les nœuds correspondants.

12

Pour une raison quelconque « has_css » ne fonctionne pas pour moi, mais « tout (sélecteur) » fonctionne vraiment wel

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

Cours Berkley SaaS? –

+4

Ces commentaires sont d'il y a 2 ans .. mais Ye! Ils sont vraiment utiles pour mon SaaS HW)))) – Vadikus

+0

Spooky - J'ai écrit cette question il y a 2 ans et maintenant je fais le cours Berkley SaaS. L'Internet est un petit endroit - ou tout l'Internet est sur le cours :) – Neil

55

Même si have_css? fera l'affaire, vos tests devraient vous dire comment ils ont échoué, plutôt que de simplement dire que certaines conditions étaient supposées être vraies et c'était faux. Avec cela à l'esprit, le premier exemple ci-dessous lit beaucoup mieux que la seconde:

# 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

D'accord avec @andersonvom: beaucoup plus agréable quand le test échoue. – Mike

+0

Look élégant! Je vous remercie. –

0

De cette façon, vous pouvez apprendre le nombre de lignes dans le tableau html. Supposons qu'il existe des colonnes au début de la table. Vous pouvez atteindre le nombre réel de cette manière.

area = area-1