0

我知道有一个简单的解决方法,但对于我的生活,我不记得它是什么。

我的功能文件如下:

  Scenario: Editing locations
    When I edit "Western Australia"
      And fill in "Name" with "Tasmania"
      And I press "Save"
    Then I should see a form success message

我已经将“编辑”步骤定义如下:

When /^I edit "([^"]*)"$/ do |name|
  within(:xpath, "//tr[./td[contains(text(), '#{name}')]]") do
    find(:css, "a img[alt=Edit]").click
  end
end

它所处理的索引页面的 HTML 如下:

<tr>
    <td>Western Australia</td>
    <td>WA</td>
    <td>
        <a href="/admin/locations/2/edit"><img alt="Edit" src="/images/icons/pencil.png" title="Edit" /></a>
    </td>
</tr>

然后是 HTML 表单:

<%= semantic_form_for [:admin, @location] do |f| %>
<%= f.inputs do %>
    <%= f.input :name %>
    <%= f.input :abbreviation %>
<% end %>

    <%= f.submit "Save" %></li> 
<% end %>

事实上,它不起作用 - 我收到以下错误:

And fill in "Name" with "Tasmania"                           # features/step_definitions/web_steps.rb:39
  cannot fill in, no text field, text area or password field with id, name, or label 'Name' found (Capybara::ElementNotFound)

但是表单元素“名称”显然在页面上。

如果我在“填写”之前添加“然后显示页面”,那么水豚会保存索引页面,导致我认为它根本没有进入编辑表单。

... 然而,如果我将“@javascript”标签添加到该功能,它可以完美运行,即使此页面上没有 Javascript。

我以前解决过这个问题,但是对于我的生活,我无法弄清楚如何......

4

2 回答 2

1

好吧,我设法解决了这个问题——问题出在我的 CSS 选择器上,它点击了“编辑”链接。我不知道为什么它不能按原样工作,但是我将其更改find(:css, "a img[alt=Edit]").click为 readclick_link('Edit')并且效果很好。

来源:http ://groups.google.com/group/ruby-capybara/browse_thread/thread/9c997395306d40e2/

于 2011-01-19T00:58:51.553 回答
0

对于初学者,您需要在 When 块中使用 Capybara 访问方法实际“访问”编辑页面。另外,我不相信您想使用 fill_in 将文本插入标签(至少根据错误消息,它仅适用于文本字段/区域)。

于 2011-01-18T01:24:24.110 回答