【发布时间】: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 => true do吗? -
只要文档被识别为“application/pdf”而不是“ application/octet-stream' - 您可以尝试
profile['browser.helperApps.neverAsk.saveToDisk'] = "application/pdf, application/octet-stream"或在您的应用程序中验证它实际上报告的是 application/pdf 类型的文件。其他可能需要的配置文件设置是profile['pdfs.disabled'] = true和profile['browser.download.folderList'] = 2,因此它使用您的目录 -
非常感谢 Tom Walpole,应用程序确实报告了 application/octet-stream 类型的文件。命名驱动程序 :webkit 是一个错字。
标签: javascript ruby selenium capybara