【问题标题】:Downloading file in capybara without rails在没有导轨的水豚中下载文件
【发布时间】:2016-08-20 01:49:02
【问题描述】:

场景:试图通过 capybara 访问外部 url 以下载文件。必须使用 Selenium 或 webkit 作为驱动程序。不能使用机架测试,因为它不允许访问外部 url。

该网站使用 iframe。

文件下载通过javascript提示如下:

    <a href="javascript:OpenFile('****.pdf', 2)">some_text_here</a>

单击该链接会提示一个本机浏览器下载确认框。 我尝试了以下方法: 硒驱动程序:

  • 使用自定义配置文件 -> 没有效果,弹出窗口仍然出现

    Capybara.register_driver :selenium do |app|
    profile = Selenium::WebDriver::Firefox::Profile.new 
    profile['browser.download.dir'] = "~/Downloads"
    profile['browser.helperApps.neverAsk.saveToDisk'] = "application/pdf"
      Capybara::Selenium::Driver.new(app, :browser => :firefox, :profile => >profile)
    end
    
  • 点击链接前使用javascript->没有效果

    within_frame(1) do
      page.evaluate_script('window.confirm = function() { return true; }')
      find(:xpath,"//span[@class='BoldText']/a").click
    end
    
  • 尝试使用警报 -> 即使出现下载框也找不到

    page.driver.browser.switch_to.alert.accept
    -> No alert is present
    

Webkit 驱动程序:

  • 尝试使用 javascript -> 文件未下载

  • page.accept_confirm 未找到任何链接

如何下​​载文件?

【问题讨论】:

  • 你有describe "title", :js =&gt; true do吗?
  • 只要文档被识别为“application/pdf”而不是“ application/octet-stream' - 您可以尝试profile['browser.helperApps.neverAsk.saveToDisk'] = "application/pdf, application/octet-stream" 或在您的应用程序中验证它实际上报告的是 application/pdf 类型的文件。其他可能需要的配置文件设置是profile['pdfs.disabled'] = trueprofile['browser.download.folderList'] = 2,因此它使用您的目录
  • 非常感谢 Tom Walpole,应用程序确实报告了 application/octet-stream 类型的文件。命名驱动程序 :webkit 是一个错字。

标签: javascript ruby selenium capybara


【解决方案1】:

应用程序正在报告具有 application/octet-stream 类型的文件。添加

    profile['browser.helperApps.neverAsk.saveToDisk'] = "application/pdf, application/octet-stream"

在这种情况下解决了问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    • 2012-12-06
    相关资源
    最近更新 更多