【问题标题】:Unable to find field "Name" (Capybara::ElementNotFound)找不到字段“名称”(Capybara::ElementNotFound)
【发布时间】:2012-12-01 17:06:09
【问题描述】:

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

怎么了????

【问题讨论】:

  • 当找不到元素时,可能表示您没有编写该元素,或者您的测试正在查看错误的页面。我会首先检查/users/sign_up 的页面源代码,看看您是否将适当的名称或ID 与您的测试相匹配。如果那是正确的,那么我会检查在到达/users/sign_up 时测试是否有任何障碍。
  • 在您的fill_in 之后加入save_and_open_page,您将能够看到Capybara 在页面上的实际想法。
  • 关于 save_and_open_page @nmott 的好建议,但应该指出您需要 Gemfile 中的启动 gem。
  • @jason328 thx mate 正是我的问题!

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


【解决方案1】:

尝试从表单中缩小范围

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

【讨论】:

  • 这帮助我们节省了时间。非常感谢!
【解决方案2】:

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

"#{resource_name}[name]"

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

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

【讨论】:

    【解决方案3】:

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

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

    我想你可以把它封装成一个方法,让你的测试更流畅

    【讨论】:

    • 不是find 方法用于查找CSS吗?
    【解决方案4】:

    好吧,伙计们,我发现它有同样的问题,它非常简单: 在 capybara 或 rspec 中,他们需要您填写“姓名”,而在您的表单或标签字段中,您需要用小写“姓名”……您可以为我工作。

    【讨论】:

      【解决方案5】:

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

      【讨论】:

      • 我第二次遇到这个错误,都是由单词的第一个字母大写引起的。
      【解决方案6】:

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

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

      或

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多