如何使用水豚Cucumber 断言 ruby?? 中的 html 表行数

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"
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,它将返回一个包含所有匹配节点的数组。