How to assert on number of html table rows in ruby using capybara + cucumber
我正在尝试使用 Cucumber capybara 在 Ruby 中进行 BDD Web 开发,但我被困在应该是一件容易的事情上 - 只是检查表中的行数。我试图达到的目的是这样的:
1 2 | page.should have_xpath("//table[@id='myTable']") find("//table[@id='myTable']/tr").length.should == 3 |
但这不起作用(缺少方法长度),我找不到针对表长度断言的方法。
任何想法任何人(请对我放轻松,我是ruby小白)
提前致谢
尼尔
尽管
1 2 3 4 5 | # 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 | page.should have_css("table#mytable tr", :count=>3) |
由于某种原因,"has_css" 对我不起作用,但是 "all(selector)" 真的很好用
1 | all("table#movies tr").count |
我最终选择了这个:
1 2 3 4 5 | Then /^I should see"(.*)" once$/ do |text| within_table('myTable') do should have_xpath("//tr", :text => text, :count => 1) end end |
看起来非常优雅。
我知道其他答案有效,但这似乎读得很好。
有什么意见吗?
这样可以了解html表格的行数。
1 | area = find_by_id('#areaID').all('tr').size |
假设表的开头有列。这样可以达到实际的数字。
1 | area = area-1 |
#find 方法只返回一个元素(如果有多个匹配项,我认为它只返回第一个元素)所以你不会得到#length 方法,因为#find 的结果是一个节点而不是一个数组。
要向自己证明这一点,请尝试
1 | puts find("//table[@id='myTable']/tr").class |
你想要的是#all,它将返回一个包含所有匹配节点的数组。