QA@IT

CapybaraでのWeb画面操作のテストで、正しくダウンロードできたことを確認したいのですがどうすれば良いのでしょうか?

4224 PV

Rails/CapybaraのWeb画面操作のテストで、ダウンロードできることを確認したいのです。

capybaraの画面操作でダウンロードのチェックを書いていますが、ダウンロードできたことの確認をどう記述すればよいか立ち往生しています。

click_link 'hogehoge'

にてダウンロードの挙動には、入っているような反応待ちになりますが、結局どこの場所に、いつダウンロードされたファイルの存在をどのようにチェックするかで詰まってます。

ご教示の程よろしくお願い致します。

なお capybara-mechanizeで外部サイトを操作するので capybaraのバージョンは1.1.2です。

gem 'capybara', '1.1.2'
gem 'capybara-mechanize'
 :

参考 Capybaraリファレンス

  • Capybara::Node::Element

HTMLのエレメントの属性値やテキストにアクセスするAPI

http://rubydoc.info/github/jnicklas/capybara/master/Capybara/Node/Element

  • Capybara::Node::Finders

ページ内のHTML要素を検索するAPI 検索方式には、CSSセレクターで指定する方法と、XPATHで指定する方法がある

http://rubydoc.info/github/jnicklas/capybara/master/Capybara/Node/Finders

  • Capybara::Node::Actions

リンククリックや、テキストフィールド入力、ラジオボタンの選択,リストボックスの選択などを行うAPI

http://rubydoc.info/github/jnicklas/capybara/master/Capybara/Node/Actions

  • Capybara::Node::Matchers

ページに期待する要素が存在するか、期待する文字が表示されているか等をチェックする等のAPI

http://rubydoc.info/github/jnicklas/capybara/master/Capybara/Node/Matchers

回答

レスポンスヘッダをみればよいらしい。注1)

click_link 'hogehoge'
expect(page.response_headers['Content-Type']).to eq("application/xxx")

ダウンロードするのは、Windowsの.exeファイルなので application/xxxxxx をどう書けばよいのかまだよくわかっていません。(^_^;;

その後、注2) よりxxxは、exeでよさげだったのでやってみたら、いけました。

ただし chromeではapplication/octet-streamとしないとダメ。

参考

注1) CapybaraでPDFダウンロード
http://qiita.com/items/4a23fbf12d6c9d8b214d

注2) Microsoft asp.net download
http://forums.asp.net/t/1106618.aspx/1

編集 履歴 (2)

capybara の selenium-webdriver であれば、firefox の profile を直接編集し以下の変更点を加える事で、ダウンロードされたことを確認することが可能です。

  • デフォルトのダウンロード場所を変更する
  • ダウンロードの際に確認を行わないようにする
編集 履歴 (0)
  • 情報ありがとうございます。なるほどselenium-webdriverならそうなのですね。capybara-mechanizeの場合はどこにダウンロードされるかが分かれば良いのですが。というかそれを調べたらよさげですね。 -
ウォッチ

この質問への回答やコメントをメールでお知らせします。