我正在尝试使用黄瓜+水豚来处理Ruby中的BDD Web开发,我坚持应该是一个简单的任务 - 只是为了检查表中的行数。我想要达到的目的是:
page.should have_xpath("//table[@id='myTable']")
find("//table[@id='myTable']/tr").length.should == 3
但这不起作用(缺少方法长度),我找不到断言表长度的方法。
任何人都有任何想法(请对我这么轻松'我是一个红宝石小说)
提前致谢
尼尔
答案 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