2016-10-25 13 views
0

なぜ私のファイル入力がCapybara(2.8.0)で見つからないのですか? (私は、デバッガからpage.bodyを調べる場合は、入力が存在する)Capybaraがファイル入力を見つけることができません

And(/^if I add a large image$/) do 
    within all('.story-title-wrapper').first do 
    attach_file('.story-item-image-url-file-input-large', test_file) 
    end 
end 

# Cucumber error message 
And if I add a large image # features/step_definitions/story_steps.rb:466 
    Unable to find file field ".story-item-image-url-file-input-large" (Capybara::ElementNotFound) 
    ./features/step_definitions/story_steps.rb:468:in `block (2 levels) in <top (required)>' 
    ./features/step_definitions/story_steps.rb:467:in `/^if I add a large image$/' 
    features/long_form_features.feature:450:in `And if I add a large image' 

編集:私はID(attach_file 'story_title_item_image_url_file_input_large', test_file )を使用して入力を見つけることができるんだけど、私は本当にIDを追加する必要が希望しません私の入力のすべてに、このテストを動作させるだけです。カピバラと一緒に既存のクラスを使用する方法はありますか?

答えて

0

ほとんどの場合、実際のファイル入力要素は、ページ上に表示されないようになっています。これは、複数のプラットフォーム間でファイル入力のスタイリングを同じにするためによく行われます。 #execute_scriptを使用して、ページ上に表示されていないすべてのCSSを削除してから、#attach_fileを呼び出してください。

更新:フィールドを見つけるためにクラスを使用しようとしていたことに気がつかなかった。 documented#attach_fileは、CSSのセレクタではなく、要素を検索するために、関連するラベルの要素name、id、またはtextをとります。あなたが本当にクラスで見つけ、あなたがオンになっているカピバラのバージョンに滞在する必要がありますする必要がある場合、あなたは

を行うことができるはず

find('.story-item-image-url-file-input-large').set(test_file) 

または2.10+あなたはカピバラに更新する場合を行うことができます

attach_file(test_file, class: 'story-item-image-url-file-input-large') 

さらにwithin all('.story-title-wrapper').firstそれらのいずれもが、実際に必要に応じて、ページに表示する要素をお待ちしています、あなたはあなたの答えのためにwithin first('.story-title-wrapper', minimum: 1)

+0

感謝として、それを書いたほうが良いと思いますが、それはないのですが、ちょうどwithin first('.story-title-wrapper')をすることができ場合。 – pdoherty926

+0

@ pdoherty926答えが更新されたので、クラス名を使用しようとしていたことに気付きました。 –

+0

Aha、2.10で 'class:'オプションが導入されたことはわかりませんでした。私はそれを使ってみましたが、無効なキーエラーが発生しました。これは意味があります。 – pdoherty926

関連する問題