我正在尝试解决一个挑战,但我收到了来自Cabybara的错误消息:
`Failure/Error: fill_in 'Name', with: 'Vostro 2017'
Capybara::ElementNotFound: Unable to find visible field "Name" that is not disabled`
我的new.html.erb
是:
<%= form_for @item, url: {action: "create"} do |f|%>
<%= f.label 'Name' %>
<%= f.text_field :name %>
<%= f.label 'Description' %>
<%= f.text_field :description %>
<%= f.label 'Features' %>
<%= f.text_field :features %>
<%= f.label 'Asset number' %>
<%= f.text_field :assetNumber %>
<%= f.submit%>
<% end %>
我的item_controller.rb
是:
class ItemController < ApplicationController
def show
@items = Item.find(params[:id])
end
def new
@item = Item.new
end
def create
@item = Item.new(item_params)
@item.save
redirect_to @item
end
private
def item_params
params.require(:item).permit(:name, :description, :features, :assetNumber)
end
end
用于执行测试的rspec文件是:
require 'rails_helper'
feature 'User creates a new inventory item' do
scenario 'successfully' do
visit new_item_path
fill_in 'Name', with: 'Vostro 2017'
fill_in 'Description', with: 'Dell Notebook'
fill_in 'Features', with: '16gb, 1Tb, 15.6"'
fill_in 'Asset number', with: '392 DLL'
click_button 'Create Item'
expect(page).to have_content 'Vostro 2017'
expect(page).to have_content 'Dell Notebook'
expect(page).to have_content '16gb, 1Tb, 15.6"'
expect(page).to have_content '392 DLL'
end
end
我正在使用ruby-2.3.5和rails 4.1.0。 我是ruby / rails的初学者,我无法弄清楚我的代码有什么问题。 有人可以帮我解决这个问题吗? 我提前感激。
答案 0 :(得分:0)
您可以这样做,假设您的输入的ID为name
:
find("input[id$='name']").set "Vostro 2017"
或:
find("#name").set "Vostro 2017"
您也可以尝试下套Name
:
fill_in 'name', with: "Vostro 2017"
Capybara将定位名称或id属性,因此第二个示例应该有效。
答案 1 :(得分:0)
Rails使用表单对象生成表单输入名称。
fill_in 'item[name]', with: "Vostro 2017"
fill_in 'item[description]', with: 'Dell Notebook'
fill_in 'item[features]', with: '16gb, 1Tb, 15.6"'
fill_in 'item[assetNumber]', with: '392 DLL'
答案 2 :(得分:0)
如果您查看页面的实际HTML而不是erb模板(总是更好地包含HTML,除非您的问题是关于erb的),您会注意到您的标签实际上并未与输入元素相关联(没有匹配的f.label
属性到输入的id)。显然,Capybara通过标签文本(在您的情况下为“名称”)找到元素,标签必须与元素正确关联。要解决此问题,您需要正确使用f.label :name, 'Name'
- http://api.rubyonrails.org/classes/ActionView/Helpers/FormBuilder.html#method-i-label。如果你想指定元素的文本(vs使用从i18n翻译中提取的文本),那将是
ERROR: While executing gem ... (Errno::EACCES)
Permission denied @ rb_file_s_symlink
答案 3 :(得分:0)
我意识到我做错了什么,所以我们走吧: 我将def show action中的实例变量项更改为item(不是复数),并将属性从assetNumber更改为asset_number,这样Cabybara测试就能正确理解。
谢谢你们。