2011-07-26 9 views
2

私はキュウリスイートを用意して静的なPDFファイルを読んで内容をアサーションしました。キュウリが一時ファイルにpdfを読む

私は最近、私のすべての宝石を更新して以来、それはもはや機能しません。次のように

キュウリのステップがある:

When /^I follow PDF link "([^"]*)"$/ do |arg1| 
    temp_pdf = Tempfile.new('foo') 
    temp_pdf << page.body 
    temp_pdf.close 
    temp_txt = Tempfile.new('txt') 
    temp_txt.close 
    'pdftotext -q #{temp_pdf.path} #{temp_txt.path}' 
    page.drive.instance_variable_set('@body', File.read(temp_txt.path)) 
end 

は、これがうまく動作するために使用しました。しかしtemp_pdf << page.body

encoding error: output conversion failed due to conv error, bytes 0xA3 0xC3 0x8F 0xC3 
I/O error : encoder error 

ラインを実行するときにライオン/私の宝石にアップデートした後、それは次のようなエラーがスローされます私は、異なるソースからいくつかの異なるPDFファイルを試してみましたが、それらはすべて失敗しているように見えます。 PDFを一時ファイルに読み込む方法を教えてください。

+0

私は、これはカピバラ、キュウリ、ルビー1.8.7または3つすべての組み合わせのバグでなければならないと思います。明示的に私のキュウリ、キュウリのレール、カピバラ、ガーキンの宝石をgemfileの以前のバージョンにロールバックしました。今度は私のテストが再び実行されています。 – DVG

答えて

4

次のコードは私の仕事です。 temp_pdf < < page.bodyをpage.sourceに変更しなければなりませんでした(本体は既に不完全に解析されています)。また、ドライバ上の@bodyの代わりに、インスタンス変数@domをドライバブラウザに設定する必要がありました。これは、最近のカピバラのバージョン(rack_test)ドライバは何のインスタンス変数の体は存在せず、代わりに体が「browser.body @」の呼び出しである:

https://github.com/jnicklas/capybara/blob/master/lib/capybara/rack_test/driver.rb

browser.body再び、呼び出し「dom.to_xml」、および'dom'を見ると、Nokogiri :: HTMLで@domを初期化していることがわかります。最初にnokogiriの変換エラーがあったことは非常に意味があります。

https://github.com/jnicklas/capybara/blob/master/lib/capybara/rack_test/browser.rb

with_scope(selector) do 
    click_link(label) 
    temp_pdf = Tempfile.new('pdf') 
    temp_pdf << page.source 
    temp_pdf.close 
    temp_txt = Tempfile.new('txt') 
    temp_txt.close 
    temp_txt_path = "#{temp_txt.path}.html" 
    `pdftohtml -c -noframes #{temp_pdf.path} #{temp_txt_path}` 
    page.driver.browser.instance_variable_set('@dom', Nokogiri::HTML(File.read(temp_txt_path)) 
end 
+0

#bodyを#sourceに変更すると非常に役に立ちました - ありがとう –