无法找到字段"名称"(Capybara :: ElementNotFound)

And*_*ian 14 rspec capybara ruby-on-rails-3

我正在尝试使用capybara + rspec并得到此错误:无法找到字段"Name"(Capybara :: ElementNotFound)

这是我的表格:

%h2 Sign up
= simple_form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => {:class => 'form-vertical' }) do |f|
  = f.error_notification
  = display_base_errors resource
  = f.input :name, :autofocus => true
  = f.button :submit, 'Sign up', :class => 'btn-primary'
= render "devise/shared/links"
Run Code Online (Sandbox Code Playgroud)

这是我的user_steps.rb

When /^I sign up with valid user data$/ do
  create_visitor
  sign_up
end

def create_visitor
  @visitor ||= { :name => "Test visitor"}
end

def sign_up
  visit '/users/sign_up'
  fill_in "Name", :with => @visitor[:name]
  click_button "Sign up"
end
Run Code Online (Sandbox Code Playgroud)

怎么了????

Wat*_*Box 5

在我看来,您正在寻找一个字段 label Name,但您的 name 字段没有标签,因此您可能需要使用该字段的 ID 或可能是的名称:

"#{resource_name}[name]"

此外,正如@nmott 在他的评论中所说,您应该尝试使用,save_and_open_page以便您可以实际查看页面,但是,请注意您需要 launchy gem 才能使用此方法。

此外,您可能会发现您甚至不在正确的页面上。在测试注册页面以外的页面时,我通常遇到的问题是我被重定向了并且不知道。因此,在使用之后visit,您还应该使用assert_template来确保您在正确的页面上。


dan*_*lee 5

我遇到了这个问题并意识到Capybara 过滤掉了隐藏的字段 -我的元素属于多标签页面中的非活动标签(隐藏).我刚刚通过了:可见的arg并将其设置为false,瞧!该元素被发现.

fill_in "content", with: 'foo bar', visible: false
Run Code Online (Sandbox Code Playgroud)

要么

find('#item_content', visible: false).set 'foo bar'
Run Code Online (Sandbox Code Playgroud)


Som*_*ere 2

尝试从表格本身缩小范围

within("form#whatever_form_id") do
  fill_in "Name", :with => @visitor[:name]
  click_button "Sign up"
end
Run Code Online (Sandbox Code Playgroud)