ruby - webrat 自动填充表单字段

标签 ruby testing forms cucumber webrat

我正在学习如何使用 Cucumber/webrat 编写测试。我的测试场景之一设置为测试表单验证(将字段留空)。奇怪的是,我没有使用 fill_in 填写的字段被设置为该字段的 name 属性。这只会在我运行 Cucumber 时发生,而在使用浏览器时不会发生。

我使用的步骤很简单:

When /^I submit the form$/ do
  # Not filling in the 'Name' field here
  fill_in 'Description', :with => 'This is a description'
  click_button 'Save'
end

运行使用上述步骤的场景后,我可以看到文本字段“Name”设置为“name”而不是空的。如果我用空格或 nil 填充该字段,情况也是如此:

fill_in 'Name', :with => ''

我正在测试的表单非常简单:

<form action="/item/create" method="post">
  <div>
    <label for="ItemName">Name</label>
    <input type="text" name="name" id="ItemName" />
  </div>
  <div>
    <label for="ItemDescription">Description</label>
    <textarea name="description" id="ItemDescription"></textarea>
  </div>
  <input type="submit" value="Save" />
</form>

知道为什么会这样吗?

最佳答案

我猜您正在使用带有 Mechanize 适配器的 Webrat,对吗?如果是这样,我发现自己对同样的问题感到非常沮丧。事实证明这是 Webrat 如何将表单字段值传递给 Mechanize 的一个错误。您可以在此处找到详细信息和补丁:https://webrat.lighthouseapp.com/projects/10503/tickets/384-webrat-does-not-pass-empty-form-fields-correctly-to-mechanize

或者,如果您不想使用 Webrat 的补丁版本,一个略微非最佳的解决方法是用空格 (' ') 代替 fill_in,并确保您的应用程序的输入验证在考虑是否有空格时修剪或忽略空格字段已正确填写。

不幸的是,似乎有许多这样的问题,它们提供的补丁尚未合并到“官方”Webrat 代码库中。大约一个半月前,我给作者发了一封电子邮件,询问他是否仍在维护它,如果没有,请考虑调用愿意维护的人,因为很多人仍在使用它。迄今为止,我还没有收到回复。

关于ruby - webrat 自动填充表单字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4689690/

相关文章:

java - 是否可以配置 cucumber 以使用不同的 Spring 配置文件运行相同的测试?

python - 如何告诉 pip 安装测试依赖项?

php - 如何全局设置 Symfony 表单的日期格式?

Ruby:内存中基于哈希的线程安全缓冲区?

ruby - 从 Rails 3.0 升级到 Rails 3.2(Ruby 1.9.3 + Passenger)后出现巨大的内存泄漏/膨胀

testing - TestLink 安装期间的数据库访问错误

php - MySQL 中的动态复选框和文本字段

ruby - 如何使用 Regex 匹配前面没有 "="的单词?

ruby-on-rails - 在辅助文件和 Controller 文件中说明辅助方法之间的区别

python - Django:使用动态字段加载表单