如何使用capybara + cucumber在ruby中断言html表行的数量

时间:2010-06-06 22:49:47

标签: ruby cucumber capybara

我正在尝试使用黄瓜+水豚来处理Ruby中的BDD Web开发,我坚持应该是一个简单的任务 - 只是为了检查表中的行数。我想要达到的目的是:

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

但这不起作用(缺少方法长度),我找不到断言表长度的方法。

任何人都有任何想法(请对我这么轻松'我是一个红宝石小说)

提前致谢

尼尔

6 个答案:

答案 0 :(得分:56)

即使have_css?能够解决问题,你的测试也应该告诉你它们是如何失败的,而不仅仅是说某些条件应该是真的而且它是假的。考虑到这一点,下面的第一个例子比第二个例子好得多:

# 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 :(得分:19)

我认为你可以这样做:

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

答案 2 :(得分:13)

出于某种原因,“has_css”对我不起作用,但是“all(selector)”真的很有用

all("table#movies tr").count

答案 3 :(得分:3)

最后我接受了这个:

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

看起来很合适。

我意识到其他答案有效,但这看起来很好。

有任何意见吗?

答案 4 :(得分:1)

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

要向自己证明这一点,请尝试

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

你想要的是#all,它会返回一个包含所有匹配节点的数组。

答案 5 :(得分:0)

通过这种方式,您可以了解html表中的行数。

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

假设表格的开头有列。您可以通过这种方式达到实际数字。

area = area-1