rack_test - ruby capybara github
Cómo afirmar el número de filas de la tabla html en ruby usando capibara+pepino (6)
Estoy tratando de familiarizarme con el desarrollo web de BDD en Ruby usando pepino + capibara y estoy atrapado en lo que debería ser una tarea fácil, solo para verificar el número de filas en una tabla. La intención de lo que estoy tratando de lograr es algo así como:
page.should have_xpath("//table[@id=''myTable'']")
find("//table[@id=''myTable'']/tr").length.should == 3
Pero esto no funciona (falta la longitud del método) y no puedo encontrar una manera de afirmar en contra de la longitud de la tabla.
Cualquier idea a alguien (por favor sea amable conmigo aunque soy un nooby de ruby)
Gracias por adelantado
Neil
Aunque have_css?
hará el truco, tus pruebas deberían decirte cómo fallaron, en lugar de solo decir que se suponía que una condición era cierta y que era falsa. Con esto en mente, el primer ejemplo a continuación lee mucho mejor que el segundo:
# 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)
Creo que puedes hacer esto:
page.should have_css("table#mytable tr", :count=>3)
De esta forma, puede aprender la cantidad de líneas en la tabla html.
area = find_by_id(''#areaID'').all(''tr'').size
Supongamos que hay columnas al principio de la tabla. Puede llegar al número real de esta manera.
area = area-1
El método #find solo devuelve un elemento (creo que solo devuelve el primero si hay varias coincidencias) por lo que no obtienes el método #length porque el resultado de #find es un nodo no una matriz.
Para demostrarte esto, prueba
puts find("//table[@id=''myTable'']/tr").class
Lo que quiere es #all, que le devolverá una matriz de todos los nodos coincidentes.
Fui con esto al final:
Then /^I should see "(.*)" once$/ do |text|
within_table(''myTable'') do
should have_xpath("//tr", :text => text, :count => 1)
end
end
que parecía adecuadamente elegante.
Me doy cuenta de que las otras respuestas funcionan, pero esto parece leer bien.
¿Algún comentario?
Por alguna razón, "has_css" no funciona para mí, sin embargo, "all (selector)" funciona realmente bien.
all("table#movies tr").count