Я знаю, что есть простое решение для этого, но я не могу вспомнить, что это за жизнь.
Мой файл функций выглядит следующим образом:
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.
Я уже однажды решил это, но я не могу понять, как ...