7

テストにCucumberとCapybaraを使用するRailsプロジェクトがあります。Dropzone.js を使用したファイル アップロード ページがあります。

私のアップロードは、ダイアログ ボックスまたはドラッグ アンド ドロップを使用してうまく機能します。テストは別の問題です。

フォームに次のフィールドがあります。

<input id="photo_image" multiple="multiple" name="image" type="hidden">

ただし、ステップ定義で、ファイル データを検索して添付する方法をいくつか試しましたが、どれも機能しません。

私はfill_inを試しました:

fill_in "photo_image",  with: photo

CSSセレクターで検索を試みました:

find('#photo_image').set photo

xpathで検索しようとしました:

find(:xpath, "//input[@id='photo_image']").set photo

しかし、彼らの誰も隠しフィールドを見ません。

Unable to find css "#photo_image" (Capybara::ElementNotFound)

Unable to find xpath "//input[@id='photo_image']" (Capybara::ElementNotFound)

Unable to find field "photo_image" (Capybara::ElementNotFound)

Dropzone.js を使用してアップロードを処理できるテスト方法はありますか、それとも絶望的ですか?

4

8 に答える 8

10

デフォルトでは、 Capybara 2.1は隠し要素を検出しません

ignore_hidden_elementsfalse に設定できます。

Capybara.ignore_hidden_elements = false

または:visibleメソッドにオプションを追加します。

attach_file('photo_image', path_to_file, visible: false)

ほとんどの場合、テストで検出される要素が表示され、そのうちの 1 つが非表示の場合に例外をスローするように Capybara を保持する方がよいため、2 番目のバリアントを好みます。

注:オプションは、:visible内部で動作するほとんどの Capybara メソッドCapybara::Query( findall、など)でもサポートされています。has_css?have_selector

于 2013-05-28T20:51:01.410 に答える
1

Dropzone.js は、次の入力を使用してファイルを添付します (私の Web サイトから取得します)。

<input type="file" multiple="multiple" class="dz-hidden-input" accept="image/*,application/pdf" style="visibility: hidden; position: absolute; top: 0px; left: 0px; height: 0px; width: 0px;">

したがって、次のコードを実行して、dropzone.js を介してファイルを添付するだけです。

page.find('.dz-hidden-input', visible: false).set('file_path_here'))
于 2017-11-06T16:45:07.317 に答える
0

カピバラが見つからないのは、ファイルフィールドを作成していないためだと思います。

<input id="photo_image" multiple="multiple" name="image" type="file">

type="file" はあなたが望むものです。type="hidden" の入力は、文字列のみを受け入れる必要があります。

私も rspec/capybara で dropzone.js 領域をテストしようとしていて、壁にぶつかっています。これを理解したことがありますか?

私はここで解決策を試していましたが、うまくいきませんでした: Selenium を使用してファイルをアップロード要素にドラッグすることを模倣する

于 2014-07-20T03:36:58.930 に答える
-2

あなたの入力タイプは隠されています.カピバラはブラウザでそれを見ることができないので、plsはそれを削除してください.これを試してみてください.

web_steps.rb

When /^I attach the file "([^"]*)" to "([^"]*)"$/ do |path, field|
  attach_file(field, File.expand_path(path))
end

upload_picture.feature

 ###.....some other steps too
 When I attach the file "app/assets/images/default/accept.jpg" to "image[image]"
于 2013-05-29T12:46:59.723 に答える