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小白)
提前致谢
尼尔
- 你能粘贴完整的错误吗?
尽管 have_css? 可以解决问题,但您的测试应该告诉您它们是如何失败的,而不是仅仅说某些条件应该为真而它是假的。考虑到这一点,下面的第一个例子比第二个更好:
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” |
- 同意@andersonvom:测试失败时会更好。
我认为你可以这样做:
1
|
page.should have_css(“table#mytable tr”, :count=>3)
|
由于某种原因,”has_css” 对我不起作用,但是 “all(selector)” 真的很好用
1
|
all(“table#movies tr”).count
|
- 这些评论是2年前的……但是是的!它们对我的 SaaS 硬件非常有帮助))))
- Spooky – 我在 2 年前写了这个问题,现在我正在上 Berkley SaaS 课程。互联网是一个很小的地方 – 无论是那个还是整个互联网都在课程中:)
我最终选择了这个:
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,它将返回一个包含所有匹配节点的数组。
来源:https://www.codenong.com/2986250/