当几个共享相同的名称和ID时,如何在Webrat中填写特定字段?

时间:2009-10-26 21:06:34

标签: ruby testing webrat

我刚开始使用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?

2 个答案:

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

希望有所帮助