如何强制Capybara指定Firefox下载目录而非默认路径?
解决Firefox测试时自定义下载目录的问题
别担心,你的配置已经有了开头,只需要补充几个关键的Firefox profile设置就能搞定!下面是完整的配置代码和说明:
首先,确保你的下载目录存在(避免测试时因为目录不存在报错),然后完善Firefox的profile配置:
# spec/config/capybara.rb DOWNLOAD_DIRECTORY = Rails.root.join('tmp', 'capybara', 'downloads').to_s # 确保目录存在,不存在则创建 Dir.mkdir(DOWNLOAD_DIRECTORY) unless Dir.exist?(DOWNLOAD_DIRECTORY) Capybara.register_driver :firefox do |app| profile = Selenium::WebDriver::Firefox::Profile.new profile['devtools.selfxss.count'] = 9999 # 设置自定义下载目录 profile['browser.download.dir'] = DOWNLOAD_DIRECTORY # 告诉Firefox使用自定义目录(2代表自定义,0是桌面,1是默认下载目录) profile['browser.download.folderList'] = 2 # 禁止弹出保存文件的对话框,需要指定你要下载文件的MIME类型 # 这里举几个常见的例子,你可以根据实际测试的文件类型补充 profile['browser.helperApps.neverAsk.saveToDisk'] = [ 'application/pdf', 'text/csv', 'application/vnd.ms-excel', 'application/octet-stream' ].join(',') # 关闭PDF预览(如果你的测试涉及PDF下载,这个设置很有用) profile['pdfjs.disabled'] = true Capybara::Selenium::Driver.new(app, browser: :firefox, profile: profile) end
关键配置说明:
browser.download.folderList = 2:这是核心设置,必须把它设为2,Firefox才会使用你指定的browser.download.dir目录,而不是默认的下载文件夹。browser.helperApps.neverAsk.saveToDisk:指定不需要弹出保存对话框的文件MIME类型,这样测试过程中不会被弹窗打断,能自动完成下载。你需要根据自己测试中下载的文件类型来补充对应的MIME类型,比如你下载的是CSV就加text/csv,是PDF就加application/pdf。Dir.mkdir(DOWNLOAD_DIRECTORY):提前创建目录,避免Selenium因为找不到目录而抛出异常。
配置完之后,运行测试时Firefox就会自动把文件下载到你项目的tmp/capybara/downloads目录里啦!
内容的提问来源于stack exchange,提问作者Chloe
相关产品推荐
相关产品推荐

