2010-06-06 7 views
36

Estoy tratando de familiarizarme con el desarrollo web 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 a lo largo de las líneas de:Cómo afirmar el número de filas de la tabla html en ruby ​​usando capybara + pepino

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 hacer valer en contra de la longitud de la tabla.

Cualquier ideas de cualquier persona (por favor sea fácil en mí aunque' Soy un nooby rubí)

Gracias de antemano

Neil

+0

¿Puedes pegar el error completo? –

Respuesta

3

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 adecuada elegante.

Me doy cuenta de que las otras respuestas funcionan pero esto parece leer bien.

¿Algún comentario?

19

Creo que se puede hacer esto:

page.should have_css("table#mytable tr", :count=>3) 
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 probar esto a sí mismo, trate

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

Lo que queremos es #all, que le devolverá una matriz de todos los nodos coincidentes.

12

Por alguna razón "has_css" no funciona para mí, sin embargo, "todos (Selector)" funciona muy wel

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

Berkley SaaS curso? –

+4

Esos comentarios son de hace 2 años ... ¡pero ustedes! Son realmente útiles para mi SaaS HW)))) – Vadikus

+0

Spooky - Escribí esta pregunta hace 2 años y ahora estoy haciendo el curso Berkley SaaS. Internet es un lugar pequeño, o eso o todo el Internet está en el curso :) – Neil

55

Aunque have_css? hará el truco, las pruebas deben decirle cómo fracasaron, 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 abajo lee mucho mejor que la segunda:

# 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

De acuerdo con @andersonvom: mucho mejor cuando la prueba falla – Mike

+0

¡Parece elegante! Gracias. –

0

De esta manera se puede conocer 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 alcanzar el número real de esta manera.

area = area-1 
Cuestiones relacionadas