Как сделать так, чтобы шаг «Я заполнял» в Cucumber находил поле без определения метки? - PullRequest
2 голосов
/ 15 апреля 2011

Я начинаю с огурца и запускаю простой сценарий:

Scenario: Creating a project
  Given I go to the new project page
  And I fill in "Name"  with "xxx"
  ...

Новая форма проекта уже создана и выглядит следующим образом:

<% form_for (@project) do |f| %>
  <%= f.text_field :name %>
  ...
<% end %>

Как видите, я не определил ярлык (не нужен). Проблема в том, что огурец не находит поле:

Учитывая, что я иду на страницу нового проекта
И я заполняю "Имя" с "Мне нужно что-то" # Особенности / step_definitions / web_steps.rb: 68 не может заполнить, нет текстового поля, текстовой области или поля пароля с идентификатором, имя или метка 'Name' найдено (Капибара :: ElementNotFound)

Однако он находит это, если я добавляю ярлык. Я нахожу немного подозрительным, что это не может соответствовать имени, которое я дал с соответствующим текстовым полем

Что не так?

Спасибо

Ответы [ 3 ]

5 голосов
/ 15 апреля 2011

Попробуйте изменить функцию огурца на:

Scenario: Creating a project
  Given I go to the new project page
  And I fill in "project_name" with "xxx"

Или ...

Scenario: Creating a project
  Given I go to the new project page
  And I fill in "project[name]" with "xxx"

Причина, по которой это не удается, заключается в том, что если у вас нет метки, капибара (которую использует огурец) ищет идентификатор или атрибут имени поля. Как уже упоминалось, вы можете проверить эти значения, посмотрев на источник сгенерированного файла. Вы увидите что-то вроде:

<input id="project_name" name="project[name]" type="text">
2 голосов
/ 15 апреля 2011

Имя вашего текстового поля по умолчанию:

project[name] 

На самом деле оно следует правилу:

object[field]

Вы должны посмотреть на свой дом и проверить его.

Редактировать:

Jus FYI, странно видеть:

<% form_for (@project) do |f| %>

вместо:

<%= form_for (@project) do |f| %>
0 голосов
/ 15 декабря 2011

У меня была та же проблема, и я исправил ее, просто изменив

<% form_for ... %>

на

<%= for_for ... %>

. Добавление '=' позволяет отображать поля формы, чтопозволяет Капибаре правильно идентифицировать его.

...