如何使用水豚+黄瓜在ruby中的html表行数断言
我正试图在Ruby中使用cucumber + capybara来处理BDD web开发,而且我陷入了一个简单的任务 – 只是检查表中的行数。 我试图达到的目的是沿着以下方向:
page.should have_xpath("//table[@id='myTable']") find("//table[@id='myTable']/tr").length.should == 3
但是这不起作用(缺less方法长度),我无法find一种方法来对表长度断言。
任何想法任何人(请容易对我来说,我是一个ruby诺贝)
提前致谢
尼尔
即使have_css?
会做的伎俩,你的testing应该告诉你他们是如何失败,而不是仅仅说一些条件应该是真实的,这是错误的。 考虑到这一点,下面的第一个例子比第二个例子要好得多:
# 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)
我认为你可以做到这一点:
page.should have_css("table#mytable tr", :count=>3)
出于某种原因,“has_css”对我不起作用,然而“所有(select器)”工作真的很好
all("table#movies tr").count
我最后去了这个:
Then /^I should see "(.*)" once$/ do |text| within_table('myTable') do should have_xpath("//tr", :text => text, :count => 1) end end
这似乎是适当的优雅。
我意识到其他答案的工作,但这似乎读得很好。
任何意见?
#find方法只返回一个元素(我认为它只是返回第一个如果有几个匹配),所以你没有得到一个#length方法,因为#find的结果是一个节点而不是一个数组。
为了certificate这一点,请尝试
puts find("//table[@id='myTable']/tr").class
你想要的是#all,这将返回一个所有匹配节点的数组。
这样你可以学习html表格中的行数。
area = find_by_id('#areaID').all('tr').size
假设在表格的开始处有列,可以用这种方式达到实际的数字。
area = area-1