2017-01-17 21 views
1

idをsearchに設定したdiv内のフォームをラップするだけでなく、フォームのさまざまな部分でIDを設定しようとしました。結果は常に同じです。Capybaraがフィールドを見つけることができません "検索"

スペック/機能/ 02_post_spec.rb

scenario 'search for post title' do 
    fill_post_form(post3) 
    fill_in "search", with: post3.title 
    click_button("Search") 

    expect(page).to_not have_content(post1.title) 
    expect(page).to_not have_content(post2.title) 
    expect(page).to have_content(post3.title) 
    end 

スペック/ spec_helper.rb

def fill_post_form(post) 
    visit new_post_path 
    fill_in 'Title', with: post.title 
    fill_in 'Body', with: post.body 
    click_button 'Create Post' 
end 

この意志redirect_to post_path(post)

ビュー/記事/ index.html.erb

<%= form_tag(posts_path, method: :get, class: "block") do %> 
    <div class="form-group"> 
    <div class="input-group"> 
     <%= text_field_tag :search, params[:search], class: "form-control", id: "search" %> 
     <span class="input-group-btn"> 
     <%= submit_tag "Search", name: nil, class: "btn btn-default" %> 
     </span> 
    </div> 
    </div> 
<% end %> 

カピバラ出力

Failure/Error: fill_in "search", with: post3.title 

Capybara::ElementNotFound: 
    Unable to find field "search" 
+0

ページのフォームの生のHTMLを見てみましょう...フィールドが少しだけ異なるものと呼ばれる可能性があります。あなたがidに基づいて試しているのであれば、おそらく 'fill_in '#search''またはそれに類するものも必要でしょう。 –

+0

@TarynEast 'fill_in'は入力される入力要素の名前、id、または関連するラベルテキストで検索します - CSSセレクタを受け付けないので' fill_in 'search'、... 'not #search –

答えて

2

コマンドを使用すると、使用しているfill_in "search", with: post3.titleあなたが部分的に示され、その部分の出力は、ページ(CSS経由で隠されていない)の上に実際に表示されているレンダリングページ上にあると仮定すると、動作するはずです。あなたのシナリオでは実際のページにアクセスすることは表示されず、fill_post_formが何をしているのかわからないので、何がうまくいかないのかを正確に知るのは難しいです。最初のステップは、次のようなことです:

fill_post_form(post3) # already in your tests 
sleep 2 # wait a few seconds to make sure above method has completed whatever actions it does 
puts page.html # output the current page and take a look to see if your 'search' element is actually on the page 
+0

Youそうだった。それは間違ったページに載っているのと同じくらい簡単でした。私はあまりにも長い間スクリーンを見つめていた。ありがとうございました。 –

+0

@ n.milsht歓迎ですが、それがあなたを助けた場合、答えを受け入れることを忘れないでください。 –

関連する問題