我正在尝试使用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
怎么了????
答案 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错误消息中给出的行下方的行。