40 votes

Comment affirmer le nombre de lignes de table html en ruby avec capybara + concombre

Je suis en train d'essayer de se familiariser avec la BDD de développement web en Ruby à l'aide de concombre + capybara et je suis coincé à ce qui devrait être une tâche facile - il suffit de vérifier le nombre de lignes dans une table. L'intention de ce que je suis en train de réaliser est quelque chose le long des lignes de:

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

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

Toutes les idées de quelqu'un (s'il vous plaît être facile pour moi tho' je suis un rubis nooby)

Merci d'avance

Neil

61voto

andersonvom Points 2905

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.

 # When this fails, the message will be: expected 10, got 7
page.all('table#myTable tr').count.should == 10
# Instead of: expected true, got false
page.should have_css("table#myTable tr", :count=>10)
 

20voto

AlistairH Points 1500

Je pense que tu peux faire ça:

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

13voto

Anton Points 341

Pour une raison quelconque, "has_css" ne fonctionne pas pour moi, cependant "tout (sélecteur)" fonctionne vraiment bien

 all("table#movies tr").count
 

3voto

Neil Points 224

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?

1voto

mattwynne Points 1457

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X