How to assert on number of html table rows in ruby using capybara + cucumber

By : Neil

I am trying to get to grips with BDD web development in Ruby using cucumber + capybara and I am stuck at what should be an easy task - just to check the number of rows in a table. The intention of what I'm trying to achieve is something along the lines of:

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

But this doesn't work (missing method length) and I can't find a way to assert against the table length.

Any ideas anyone (please be easy on me tho' I'm a ruby nooby)

Thanks in advance


By : Neil


The method #find only returns one element (I think it just returns the first one if there are several matches) so you don't get a #length method because the result of #find is a Node not an Array.

To prove this to yourself, try

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

What you want is #all, which will return you an Array of all the matching nodes.

By : mattwynne

I went with this in the end:

Then /^I should see "(.*)" once$/ do |text|
    within_table('myTable') do
      should have_xpath("//tr", :text =
By : Neil

This video can help you solving your question :)
By: admin