Ruby on rails Capybara在Capybara::ElementNotFound上失败

Ruby on rails Capybara在Capybara::ElementNotFound上失败,ruby-on-rails,cucumber,capybara,Ruby On Rails,Cucumber,Capybara,我最近得到了一个小Rails项目,它将帮助我学习环境以及与之相关的语言/工具(Ruby、Cucumber、RSpec、Haml…) 最近让我陷入困境的是,我决定从中看到的倍数。当我介绍第二个场景时,我注意到没有总结矿物堆的总价值,这是因为“我已经开采了该矿物”的步骤定义如下所示: Given /^I have mined "([^"]*)" of that mineral$/ do |amount| visit(root_path) fill_in(@mineral.name, :wit

我最近得到了一个小Rails项目,它将帮助我学习环境以及与之相关的语言/工具(Ruby、Cucumber、RSpec、Haml…)

最近让我陷入困境的是,我决定从中看到的倍数。当我介绍第二个场景时,我注意到没有总结矿物堆的总价值,这是因为“我已经开采了该矿物”的步骤定义如下所示:

Given /^I have mined "([^"]*)" of that mineral$/ do |amount|
  visit(root_path)
  fill_in(@mineral.name, :with => amount)
end
罪魁祸首显然是visit(root_path)调用,该调用在填充新字段时立即重置已填充的字段。然而,值得注意的是,除了“总值:”最终失败之外,所有测试都是绿色的

我决定,因为在这个特性中完成的所有工作都需要一个位于索引/根页面上(稍后我可能会对此进行更改),所以我将把它放在
背景:
块中。相应的步骤定义只不过是提取到自己步骤中的访问(根路径)行

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

无法填写,未找到id、名称或标签为“tritanium”的文本字段、文本区域或密码字段(Capybara::ElementNotFound)
(评估):2:填写“填写”
./features/step\u definitions/miner\u conversions\u minerals.rb:12:in`/^我已经开采了(\d+)种矿物$/'
特写/矿工转换矿物。特写:12:在“我已经开采了该矿物”
我对这一点的看法是,出于某种原因,在
背景:
中对页面的访问不是持久的,它忘记了它到达了那里。。。出于某种原因。请注意(如上所述),一旦访问(根路径)从“我已挖掘…”移动到另一个步骤,它就会停止工作,这使我猜测访问必须在同一个块内完成,但我可能是错的

EDIT:我尝试使用
save\u and\u open\u page
方法查看此页面上实际显示的内容,而Capybara无法在其中找到元素。原来“计算”按钮在那里,但表中的字段都不在那里。看起来问题在于没有生成字段


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

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

这反过来导致
find\u或\u create\u by\u name
方法能够创建测试中提到的矿物,但不能创建其他矿物,从而在
访问(根路径)
调用添加到
“gived I have mined…”
-块(在.feature文件中)时产生某种工作错觉


解决方案是正确地为测试数据库设置种子,然后使用
find_by_name
而不是
find_或\u create_by_name

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

这反过来导致
find\u或\u create\u by\u name
方法能够创建测试中提到的矿物,但不能创建其他矿物,从而在
访问(根路径)
调用添加到
“gived I have mined…”
-块(在.feature文件中)时产生某种工作错觉

解决方案是正确地为测试数据库设置种子,然后使用
find\u by\u name
而不是
find\u或\u create\u by\u name

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'