2009-10-26 2 views
1

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

<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> 

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

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

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

ответ

1

Вы можете использовать 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

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

Смежные вопросы