CapybaraとPoltergeistドライバーを使用して受け入れテストを作成しています。ダウンロードしたCSVファイルの内容を検証する必要があります。
最後に、特定のフォルダーにファイルをダウンロードして、コアRubyライブラリーを使用してCSVファイルを読み取るというオプションで落ち着きたいです。
これを実現するために、ポルターガイストドライバーがダウンロードリンクをクリックすると、ポップアップを処理して、指定されたフォルダーにファイルを直接ダウンロードする必要があります。
Seleniumのchromeおよびfirefoxドライバーでは、ポップアップを処理し、ダウンロードディレクトリを構成するようにプロファイルを構成するオプションがあります。
ポルターガイストを使用したそのようなオプションはありますか?どんな情報でも役に立ちます。
Railsアプリで同様のことをしなければなりませんでした。私の解決策は、Javascriptを使用してURLへのXMLHttpRequestを作成し、ファイルをダウンロードし、ファイルの内容をCapybaraに返します。 Rubyを使用してファイルをディスクのどこかに保存します。次に、別の手順で、ダウンロードしたCSVファイルの内容を確認します。
ファイルをダウンロードするためのステップ定義は次のとおりです。
Then /^I download the csv file$/ do
page.execute_script("window.downloadCSVXHR = function(){ var url = window.location.protocol + '//' + window.location.Host + '/file.csv'; return getFile(url); }")
page.execute_script("window.getFile = function(url) { var xhr = new XMLHttpRequest(); xhr.open('GET', url, false); xhr.send(null); return xhr.responseText; }")
data = page.evaluate_script("downloadCSVXHR()")
File.open(File.join(Rails.root, "tmp", "csv.data"), "w") { |f| f.write(data) }
end
JavascriptコードのURLをCSVの場所に変更します。
最後に、CSVファイルの内容を検証するためのステップ定義を次に示します。
And /^the contents of the downloaded csv should be:$/ do |contents|
file = File.open(File.join(Rails.root, "tmp", "csv.data"), "r")
file_contents = file.read
file_contents.chop!
file_contents.should == contents
end
幸運を。お役に立てれば。
これは現在、ポルターガイストでは不可能です。
カピバラを使用しないこのCSVのテストを作成したほうがよいと思います。 (たとえば、組み込みのRails統合テストを使用し、応答をCSVとして解析します。)
PhantomJS/Poltergeistでのファイルのダウンロードをサポートするチケットがあり、何らかの形で機能したと主張するフォークが1つか2つあります。 https://github.com/ariya/phantomjs/issues/10052 を参照してください