14

我正在尝试使用 capybara+rspec 并收到此错误:无法找到字段“名称”(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

怎么了????

4

6 回答 6

5

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

"#{resource_name}[name]"

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

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

于 2013-08-17T19:39:04.637 回答
5

我遇到了这个问题,意识到Capybara过滤掉了隐藏字段——我的元素属于多标签页中的非活动标签(隐藏)。我刚刚传递了 :visible arg 并将其设置为 false,瞧!找到该元素。

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

或者

find('#item_content', visible: false).set 'foo bar'
于 2015-08-25T18:05:52.557 回答
4

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

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

我想您可以将其封装到一个方法中,以使您的测试更加流畅

于 2013-12-10T15:43:03.137 回答
2

尝试从表格中缩小范围

within("form#whatever_form_id") do
  fill_in "Name", :with => @visitor[:name]
  click_button "Sign up"
end
于 2013-05-29T18:02:58.693 回答
0

Ok guys I found it out having the same issue , its very simple : In capybara or rspec they need you to but "Name" and in your form or label field you need to write "name" in small....there you go works for me.

于 2014-07-12T14:14:23.847 回答
0

对我来说,引起问题的是规范的下一行,而不是 fill_in “name”行。name 是“Name”还是“name”都没有关系。对我来说,下一个 click_button 行有 click_button "Wrong Name",这是按钮的错误名称,这并没有给出预期的错误“无法点击按钮 "Wrong Name",而是给出了找不到字段”名称”。对于我的第一篇关于堆栈溢出的帖子来说有点冗长。底线。考虑一下水豚错误消息中给出的行下方的行。

于 2015-08-21T01:56:21.743 回答