2017-05-11 6 views
0

「カピバラ」を学び、カピバラを通して隠された要素を見つける問題にぶつかりました。カピバラで隠された要素を見つける

HTMLには、デフォルトで 'display:none'というファイルフィールドがあります。 HTML要素は次のとおりです。今

<input class="some_class" id="some_id" name="some_name" type="file"> 

、私はキュウリを使っカピバラにテストケースを書いたが、私は私のカピバラスクリプトでこの要素を見つけることができませんでした。隠し要素に関する

find(:xpath, "//input[@name='some_name']") 

読み取りをして

Capybara.ignore_hidden_elements = false 

を設定すると、私の問題を解決する必要があることを知って行く:私のカピバラスクリプトは、ちょうどこのように要素を見つけることです。しかし、私は上記の設定がデフォルトであることを他の場所で読んでいます。だから、それを明示的に渡すという別の選択肢を試した。 Like:

find(:xpath, "//input[@name='some_name']", :visible => false) 

これも機能しませんでした。もう何か試してみるべきですか?誰かが興味を持っている場合に備えて、詳細を分かち合うことができます。

答えて

1

可視オプションは、いくつかの潜在的な値を持つ

  1. true又は:visible =>のみ表示要素を見つけ
  2. false又は:all =>見つけ可視および非可視要素
  3. :hidden =>のみ見つけます目に見えない要素

したがって、find(:xpath, "//input[@name='some_name']", :visible => false)が要素を返さない場合、そのページにそのXPathに一致する要素がなく、ページの内容があなたが思うものであることを確認する必要があります(page.html、page.save_screenshotなど)

それ以外にもいくつかの問題があります。まず、あなたはXPath // trapに落ちています。 XPathクエリを使用して要素を検索する場合は、.//でクエリを開始するのに慣れてください。//ではなく、すべてを破棄しています。ページ上のカピバラのスコープ(within、連鎖findなど)。 CSSセレクタを使用するとそのような問題は発生しませんので、Capybaraの組み込みセレクタタイプを使用していないほとんどのクエリには意味があります。私たちを知って

find("input[name='some_name']", visible: false) 

は、私たちが使用して、より良いものを行くことができ、ファイルの入力を探しているカピバラさんfile_fieldセレクタを内蔵し、読みやすい、あなたが探している正確に何を説明し

find(:file_field, 'some_name', visible: false) 

をやってために。次に、ファイルフィールドを探しているので、実際にファイルフィールドを追加したいと思っています。目に見えない要素は一般的に対話できないため、これは問題になる可能性があります。しかし、ファイルフィールドは非常に頻繁に隠されているので、スタイリングを可能にするために、それを手助けするオプションがあります。

attach_file('some_name', file_path, make_visible: true) 

make_visible: trueオプション一時的に接続し、(デフォルトのCSSがあなたのページに動作しない場合は、むしろtrueより設定するCSS値のハッシュにそれを設定することができます)、それが見えるようにする要素のCSSを変更しますそのファイルを削除して、CSSの変更を元に戻します。

最後に、Capybara.ignore_hidden_elements = falseを設定すると、実際にユーザーが見たりテストしたりできることをテストしていないため、アプリをテストしている場合(自動化だけであれば問題ありません)、ひどい考えです。

関連する問題