【问题标题】:Capybara fails on Capybara::ElementNotFound during cucumber testCapybara 在黄瓜测试期间在 Capybara::ElementNotFound 上失败
【发布时间】:2012-03-10 04:47:50
【问题描述】:

我最近获得了一个小型 Rails 项目,该项目将帮助我学习环境和相关的语言/工具(Ruby、Cucumber、RSpec、Haml...)。

最近让我陷入困境的是,我决定从 one scenario 转到 this gist 中看到的多个。当我介绍第二种情况时,我注意到没有汇总矿物堆的总值,这是因为“我已经开采了该矿物”的步骤定义如下:

Given /^I have mined "([^"]*)" of that mineral$/ do |amount|
  visit(root_path)
  fill_in(@mineral.name, :with => amount)
end

罪魁祸首显然是 visit(root_path) 调用,它会在填写新字段后立即重置已填写的字段。然而,重要的是要注意,除了“总价值:”这一事实之外最后,所有的测试都是绿色的。

我决定,由于此功能中完成的所有内容都需要在索引/根页面上(我稍后可能会更改),因此我将其放入 Background: 块中。对应的步骤定义无非就是将visit(root_path)这一行提取到自己的步骤中。

然而,这导致每次 fill_in() 调用都失败并出现以下情况(或类似情况):

cannot fill in, no text field, text area or password field with id, name, or label 'tritanium' found (Capybara::ElementNotFound)
(eval):2:in `fill_in'
./features/step_definitions/miner_converts_minerals.rb:12:in `/^I have mined (\d+) of that mineral$/'
features/miner_converts_minerals.feature:12:in `And I have mined <amount> of that mineral'

我对此的看法是,出于某种原因,对Background: 中的页面的访问不是持久的,并且它忘记了它到达那里......出于某种原因。请注意,(如上所述)一旦将访问(root_path)移出“我已经开采......”,它就会停止工作 - 进入一个单独的步骤,让我猜测访问必须在同一个内部完成阻止,但我可能是错的。

编辑:我尝试使用save_and_open_page 方法查看Capybara 无法找到元素的页面上实际显示的内容。事实证明,“计算”按钮在那里,但表中的任何字段都不在那里。看起来问题在于没有生成字段。

我认为解决此问题的所有相关代码都可以在上述要点中找到。感谢阅读!

【问题讨论】:

    标签: ruby-on-rails cucumber capybara


    【解决方案1】:

    这主要是因为测试数据库有Mineral的表,但没有导入行。

    这反过来又导致find_or_create_by_name 方法能够创建测试中提到的矿物,但不能创建其他矿物,当在"Given I have mined..." 中添加visit(root_path) 调用时,给人一种工作的错觉-块(在 .feature 文件中)。

    解决方案是正确地为测试数据库播种,然后使用find_by_name 而不是find_or_create_by_name

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多