2011-07-26 2 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 

이것은 잘 작동하는 데 사용됩니다. 나는 다른 소스에서 몇 가지 다른 PDF를 시도하고 그들은 모두 실패 것 같다 temp_pdf << page.body

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

라인을 실행하지만 사자/내 보석으로 업데이트 한 후, 그것은 다음과 같은 오류가 발생합니다. PDF를 임시 파일로 가져 오려면 어떻게해야합니까?

+0

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

나는이 카피 바라, 오이, 루비 1.8.7 또는 세 가지의 조합에서 버그가 수 생각합니다. 나는 오이, 오이 레일, 카피 바라, 작은 오이 보석을 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 변환 오류가 있었음을 알 수 있습니다.

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로 변경하는 것이 매우 도움이되었습니다. - 감사합니다. –

관련 문제