J'essaie de comprendre le développement Web BDD en Ruby en utilisant concombre + capybara et je suis coincé dans une tâche qui devrait être facile - il suffit de vérifier le nombre de lignes dans un tableau. L’objectif de ce que j’essaie d’atteindre est quelque chose qui va dans le sens de:
page.should have_xpath("//table[@id='myTable']")
find("//table[@id='myTable']/tr").length.should == 3
Mais cela ne fonctionne pas (longueur de méthode manquante) et je ne peux pas trouver un moyen d'affirmer contre la longueur de la table.
N'importe quelle idée (soyez tranquille avec moi même si je suis un Ruby nooby)
Merci d'avance
Neil
Je suis allé avec ceci à 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 se lire.
Des commentaires?
Même si have_css?
fera l'affaire, vos tests devraient vous dire comment ils ont échoué, plutôt que de simplement dire qu'une condition était supposée être vraie et qu'elle était fausse. Dans cet esprit, le premier exemple ci-dessous se lit bien mieux que le second:
# 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)
Je pense que tu peux faire ça:
page.should have_css("table#mytable tr", :count=>3)
Pour une raison quelconque, "has_css" ne fonctionne pas pour moi, cependant "tout (sélecteur)" fonctionne vraiment bien
all("table#movies tr").count
La méthode #find ne renvoie qu'un élément (je pense qu'elle ne renvoie que le premier s'il y a plusieurs correspondances), de sorte que vous n'obtenez pas de méthode #length car le résultat de #find est un nœud, pas un tableau.
Pour vous le prouver, essayez
puts find("//table[@id='myTable']/tr").class
Ce que vous voulez, c'est #all, ce qui vous retournera un tableau de tous les noeuds correspondants.
De cette façon, vous pouvez apprendre le nombre de lignes dans le tableau html.
area = find_by_id('#areaID').all('tr').size
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