4

我正在尝试使用 cucumber 在我的应用程序中检查 Ruby on Rails 视图的内容。该视图在表格中显示信息。我希望能够仅检查该表的一列的内容。当我使用 web 步骤定义"I should see"时,它会检查整个页面。有什么简单的方法可以做到这一点吗?

例如:column.should have_content("text")

4

2 回答 2

6

Capybara 的内置作用域可能比那些 xpath 更容易维护

within "#id_for_your_tr"
  within('td', :class=> 'class_for_your_column')
    page.should have_content "foo"
  end
end
于 2012-06-12T17:22:06.747 回答
1

使用水豚+黄瓜,说你的步骤是

Then I should see the following (#MYTABLE)
    |  FOO     | 94040     | "friendly"  |
    |  BAR     | 94050     | "competition"|

步骤定义

Then /^I should see the following games:$/ do |expected_table|
  table_results = page.find('#DOM_ID')
end

我为你定义的复杂方法

When /^(.*) in the "([^\"]*)" column of the "([^\"]*)" row$/ do |
action, column_title, row_title|
  col_number = 0
  all(:xpath, "//*[(th|td)/descendant-or-self::*[contains(text(),
'#{column_title}')]]/th").each do |element|
    col_number += 1
    break if element.has_content?(column_title)
  end
  within :xpath, "//*[(th|td)/descendant-or-self::*[contains(text(),
'#{row_title}')]]/td[#{col_number}]" do
    When action
  end
end 

要检查正在生成的表结构,您可以使用检查行数是 X page.should have_selector('table tr', :count => X)

于 2012-06-12T15:48:04.197 回答