无法找到未禁用的字段 "player_1_name"
Unable to find field "player_1_name" that is not disabled
我刚刚通过向我提供的演练开始这段代码。我的功能测试应该有效,但它给了我这个错误:
Unable to find field "player_1_name" that is not disabled
我试过使用 [] 更改引号、路径,但仍然出现同样的错误。
- 我的 ruby 版本。
ruby 2.6.3p62(2019-04-16 修订版 67580)[x86_64-darwin18]
- 此外,除了 Rspec 和水豚,我还使用 shotgun、sinatra。
在下面的代码中,我将指定每个代码是哪个文件。
#features/entre_names_spec.rp
feature "Enter names" do
scenario "submitting names" do
visit('/')
fill_in "player_1_name", with: 'Dave'
fill_in "player_2_name", with: 'Mittens'
click_button 'Submit'
expect(page).to have_content 'Dave vs. Mittens'
end
end
#app.rb
require 'sinatra/base'
class Battle < Sinatra::Base
get '/' do
'Testing infrastructure working!'
end
get '/' do
erb :index
end
post '/names' do
@player_1_name = params[:player_1_name]
@player_2_name = params[:player_2_name]
erb :play
end
# start the server if ruby file executed directly
run! if app_file == [=12=]
end
views/index.erb
<form action= "names" method= "post">
<input type= "text" name= "player_1_name">
<input type= "text" name= "player_2_name">
<input type= "submit" value= "Submit">
</form>
#views/play.erb
<%= @player_1_name %> vs. <% @player_2_name %>
Failures:
1) Enter names submitting names
Failure/Error: fill_in "player_1_name", with: "Dave"
Capybara::ElementNotFound:
Unable to find field "player_1_name" that is not disabled
# /Users/student/.rvm/gems/ruby-2.6.3/gems/capybara-3.28.0/lib/capybara/node/finders.rb:296:in `block in synced_resolve'
# /Users/student/.rvm/gems/ruby-2.6.3/gems/capybara-3.28.0/lib/capybara/node/base.rb:83:in `synchronize'
# /Users/student/.rvm/gems/ruby-2.6.3/gems/capybara-3.28.0/lib/capybara/node/finders.rb:287:in `synced_resolve'
# /Users/student/.rvm/gems/ruby-2.6.3/gems/capybara-3.28.0/lib/capybara/node/finders.rb:52:in `find'
# /Users/student/.rvm/gems/ruby-2.6.3/gems/capybara-3.28.0/lib/capybara/node/actions.rb:91:in `fill_in'
# /Users/student/.rvm/gems/ruby-2.6.3/gems/capybara-3.28.0/lib/capybara/session.rb:749:in `block (2 levels) in <class:Session>'
# /Users/student/.rvm/gems/ruby-2.6.3/gems/capybara-3.28.0/lib/capybara/dsl.rb:51:in `block (2 levels) in <module:DSL>'
# ./spec/features/enter_names_spec.rb:4:in `block (2 levels) in <top (required)>'
Finished in 0.07645 seconds (files took 0.94706 seconds to load)
2 examples, 1 failure
Failed examples:
rspec ./spec/features/enter_names_spec.rb:2 # Enter names submitting names
我的猜测是,如果您访问根路径,您会看到 Testing infrastructure working!
。那是因为 get '/'
被定义了两次,在我的 Sinatra (v2.0.5) 版本中,第一个声明获胜。
这是呈现表单的此服务器的简单版本。它应该通过测试:
# app.rb
require 'sinatra'
# get '/' defined once
get '/' do
erb :index
end
post '/names' do
@player_1_name = params[:player_1_name]
@player_2_name = params[:player_2_name]
erb :play
end
运行 与:
$ ruby app.rb
警告:您还必须向播放视图添加第二个等号,以便 ERB 知道 @player_2_name
是一个 Ruby 表达式。
# views/play.erb
<%= @player_1_name %> vs. <%= @player_2_name %>
我遇到了这个问题。它说 'disabled' 因为 .erb 不在您目录中的正确位置。它应该保存在 'views' 文件夹中。
我刚刚通过向我提供的演练开始这段代码。我的功能测试应该有效,但它给了我这个错误:
Unable to find field "player_1_name" that is not disabled
我试过使用 [] 更改引号、路径,但仍然出现同样的错误。
- 我的 ruby 版本。 ruby 2.6.3p62(2019-04-16 修订版 67580)[x86_64-darwin18]
- 此外,除了 Rspec 和水豚,我还使用 shotgun、sinatra。 在下面的代码中,我将指定每个代码是哪个文件。
#features/entre_names_spec.rp
feature "Enter names" do
scenario "submitting names" do
visit('/')
fill_in "player_1_name", with: 'Dave'
fill_in "player_2_name", with: 'Mittens'
click_button 'Submit'
expect(page).to have_content 'Dave vs. Mittens'
end
end
#app.rb
require 'sinatra/base'
class Battle < Sinatra::Base
get '/' do
'Testing infrastructure working!'
end
get '/' do
erb :index
end
post '/names' do
@player_1_name = params[:player_1_name]
@player_2_name = params[:player_2_name]
erb :play
end
# start the server if ruby file executed directly
run! if app_file == [=12=]
end
views/index.erb
<form action= "names" method= "post">
<input type= "text" name= "player_1_name">
<input type= "text" name= "player_2_name">
<input type= "submit" value= "Submit">
</form>
#views/play.erb
<%= @player_1_name %> vs. <% @player_2_name %>
Failures:
1) Enter names submitting names
Failure/Error: fill_in "player_1_name", with: "Dave"
Capybara::ElementNotFound:
Unable to find field "player_1_name" that is not disabled
# /Users/student/.rvm/gems/ruby-2.6.3/gems/capybara-3.28.0/lib/capybara/node/finders.rb:296:in `block in synced_resolve'
# /Users/student/.rvm/gems/ruby-2.6.3/gems/capybara-3.28.0/lib/capybara/node/base.rb:83:in `synchronize'
# /Users/student/.rvm/gems/ruby-2.6.3/gems/capybara-3.28.0/lib/capybara/node/finders.rb:287:in `synced_resolve'
# /Users/student/.rvm/gems/ruby-2.6.3/gems/capybara-3.28.0/lib/capybara/node/finders.rb:52:in `find'
# /Users/student/.rvm/gems/ruby-2.6.3/gems/capybara-3.28.0/lib/capybara/node/actions.rb:91:in `fill_in'
# /Users/student/.rvm/gems/ruby-2.6.3/gems/capybara-3.28.0/lib/capybara/session.rb:749:in `block (2 levels) in <class:Session>'
# /Users/student/.rvm/gems/ruby-2.6.3/gems/capybara-3.28.0/lib/capybara/dsl.rb:51:in `block (2 levels) in <module:DSL>'
# ./spec/features/enter_names_spec.rb:4:in `block (2 levels) in <top (required)>'
Finished in 0.07645 seconds (files took 0.94706 seconds to load)
2 examples, 1 failure
Failed examples:
rspec ./spec/features/enter_names_spec.rb:2 # Enter names submitting names
我的猜测是,如果您访问根路径,您会看到 Testing infrastructure working!
。那是因为 get '/'
被定义了两次,在我的 Sinatra (v2.0.5) 版本中,第一个声明获胜。
这是呈现表单的此服务器的简单版本。它应该通过测试:
# app.rb
require 'sinatra'
# get '/' defined once
get '/' do
erb :index
end
post '/names' do
@player_1_name = params[:player_1_name]
@player_2_name = params[:player_2_name]
erb :play
end
运行 与:
$ ruby app.rb
警告:您还必须向播放视图添加第二个等号,以便 ERB 知道 @player_2_name
是一个 Ruby 表达式。
# views/play.erb
<%= @player_1_name %> vs. <%= @player_2_name %>
我遇到了这个问题。它说 'disabled' 因为 .erb 不在您目录中的正确位置。它应该保存在 'views' 文件夹中。