我刚开始使用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>
正如您所看到的,页面上有(至少)两个字段具有相同名称和ID的字段,尽管它们的格式不同,我无法在Webrat rdoc或源代码中找到方法指定一个特定的。
我知道我可以更改其中一个的名称或ID,但我必须偏离Rails命名约定才能这样做,我真的不愿意。我也可以将表单放在不同的页面上,但是我需要对工作流程进行更多的修改。我也可以尝试将它们合并为一个更模块化和动态的单一形式,但是为了支持给定的测试框架而必须对UI进行结构更改似乎有点可疑并且可能并不总是可行的,而且我会有要求javascript。
有没有办法在Webrat中指定其中一个字段,或者我应该放弃并尝试在另一个项目上使用Cucumber?
答案 0 :(得分:1)
考虑到具有相同ID的多个元素明显违反HTML有效性,我认为您已经偏离了Rails约定的路径。最新版本的Rails通常会努力使符合标准的内容保持一致。 IIRC以非常简单的方式调用表单助手是非常简单的。如果没有别的,你可以只为每次通话提供一个明确的ID。出于Rails约定的目的,name
字段是唯一重要的字段,因为Rails必须映射回模型上的字段名称。
答案 1 :(得分: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
希望有所帮助