web-dev-qa-db-fra.com

Comment affirmer le nombre de lignes de table html dans Ruby en utilisant capybara + concombre

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

37
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?

3
Neil

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)
56
andersonvom

Je pense que tu peux faire ça:

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

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

all("table#movies tr").count
13
Anton

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.

1
mattwynne

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
0
Ferhat