Как мне заполнить определенное поле в Webrat, если несколько человек имеют одинаковые имена и идентификаторы? - PullRequest
1 голос
/ 27 октября 2009

Я только начинаю работать с Cucumber и Webrat и добавляю спецификации функций в существующее приложение Rails. На одной странице приложения есть несколько форм, представляющих различные способы создания нового объекта Character. Вот упрощенный пример:

<form id="adopt_character_form">
    ....
    <input type="text" name="character[name]" id="character_name">
    ...
</form>

<form id="spawn_character_form">
    ....
    <input type="text" name="character[name]" id="character_name">
    ...
</form>

Как видите, на странице есть (как минимум) два поля с одинаковыми именами и идентификаторами, хотя они в разных формах, и я не могу найти способ в RDOC или исходном коде Webrat укажите конкретный.

Я знаю, что мог бы изменить имя или идентификатор одного из них, но для этого мне пришлось бы отклониться от соглашений об именах Rails, чего я бы на самом деле не хотел. Я мог бы также разместить формы на разных страницах, но это потребовало бы большего изменения рабочего процесса, чем я хочу сделать. Я также мог бы попытаться объединить их в единую форму, которая была бы более модульной и динамичной, но необходимость вносить структурные изменения в пользовательский интерфейс только для поддержки конкретной среды тестирования кажется немного сомнительной и не всегда возможной, плюс я бы требовать JavaScript.

Есть ли способ указать одно из этих полей в Webrat, или я должен просто сдаться и попробовать Cucumber в другом проекте?

Ответы [ 2 ]

1 голос
/ 15 января 2010

Вы можете использовать webrats within метод

Например, в файле шагов огурца

#my_steps
Then /^I update character name with  "([^\"]*)"$/ do |updated_character|
  within '#adopt_character_form'
     fill_in "character[name]", :with => updated_character
  end
end

Надеюсь, что поможет

1 голос
/ 27 октября 2009

Учитывая, что наличие нескольких элементов с одинаковым идентификатором является явным нарушением валидности HTML, я думаю, что вы уже отклонились от пути соглашений Rails. Последние версии Rails, как правило, прилагают усилия для обеспечения соответствия стандартам. IIRC довольно просто вызвать помощников по форме таким образом, чтобы идентификаторы были дифференцированы. Если ничего другого, вы можете просто указать явный идентификатор для каждого вызова. Для целей соглашений Rails поле name является единственным, которое имеет значение, так как именно этому Rails придется сопоставить имя поля в модели.

...