如何使用水豚+黄瓜在ruby中的html表行数断言

我正试图在Ruby中使用cucumber + capybara来处理BDD web开发,而且我陷入了一个简单的任务 – 只是检查表中的行数。 我试图达到的目的是沿着以下方向:

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

但是这不起作用(缺less方法长度),我无法find一种方法来对表长度断言。

任何想法任何人(请容易对我来说,我是一个ruby诺贝)

提前致谢

尼尔

即使have_css? 会做的伎俩,你的testing应该告诉你他们是如何失败,而不是仅仅说一些条件应该是真实的,这是错误的。 考虑到这一点,下面的第一个例子比第二个例子要好得多:

 # 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) 

我认为你可以做到这一点:

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

出于某种原因,“has_css”对我不起作用,然而“所有(select器)”工作真的很好

 all("table#movies tr").count 

我最后去了这个:

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

这似乎是适当的优雅。

我意识到其他答案的工作,但这似乎读得很好。

任何意见?

#find方法只返回一个元素(我认为它只是返回第一个如果有几个匹配),所以你没有得到一个#length方法,因为#find的结果是一个节点而不是一个数组。

为了certificate这一点,请尝试

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

你想要的是#all,这将返回一个所有匹配节点的数组。

这样你可以学习html表格中的行数。

 area = find_by_id('#areaID').all('tr').size 

假设在表格的开始处有列,可以用这种方式达到实际的数字。

 area = area-1