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

时间:2012-12-13 18:27:26

标签: ruby-on-rails-3 rspec capybara

我正在尝试使用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"

这是我的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

怎么了????

6 个答案:

答案 0 :(得分:5)

我遇到了这个问题并意识到Capybara filtered out hidden fields - 我的元素属于多标签页中的非活动标签(隐藏)。我刚刚通过了:可见的arg并将其设置为false,瞧!找到了元素。

fill_in "content", with: 'foo bar', visible: false

find('#item_content', visible: false).set 'foo bar'

答案 1 :(得分:4)

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

"#{resource_name}[name]"

另外,正如@nmott在评论中所说,你应该尝试使用save_and_open_page,这样你才能真正查看页面。但是,请注意你需要launchy gem才能使用这种方法。

此外,你可能会发现你甚至没有在正确的页面上。测试页面以外的常见问题除了注册页面之外,我已被重定向并且不知道它。因此,在使用visit后,您还应该使用assert_template来确保您位于正确的页面上。

答案 2 :(得分:4)

我自己也有同样的问题,我不得不一直停止使用fill_in。 我所做的是用以下代码替换所有出现的fill_in:

    element = page.find("Name")
    element.set(@visitor[:name])

我想你可以将它封装到一个方法中,以使你的测试更加顺畅

答案 3 :(得分:2)

尝试从表单中缩小范围

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

答案 4 :(得分:0)

好的家伙我发现它有同样的问题,很简单: 在水豚或rspec他们需要你,但"姓名"在您的表格或标签字段中,您需要写下" name"在小...你去为我工作。

答案 5 :(得分:0)

对我而言,导致问题的不是规范的下一行而不是fill_in“name”行。名称是“名称”还是“名称”无关紧要。 对我来说,下一个click_button行有click_button“错误名称”,这是该按钮的错误名称,并且这没有给出“无法点击按钮”错误名称的预期错误“但反而给出了找不到字段”名称”。 我的第一篇关于堆栈溢出的帖子有点冗长。底线。考虑capybara错误消息中给出的行下方的行。