如何在Capybara和RSpec中测试CSV文件下载?
发布于 2021-02-01 11:36:37
控制器中包含以下内容:
respond_to do |format|
format.csv { send_data as_csv, type:'text/csv' }
end
规格:
click_link 'Download CSV'
page.driver.browser.switch_to.alert.accept
expect( page ).to have_content csv_data
但这不起作用:
Failure/Error: page.driver.browser.switch_to.alert.accept
Selenium::WebDriver::Error::NoAlertPresentError: No alert is present
我看到“保存文件”对话框,但显然不是“警告”对话框。
如何单击确定并让水豚看到数据?
关注者
0
被浏览
44
1 个回答
-
改编自CollectiveIdea和其他来源。
在OSX上工作。Firefox 34.0.5
规格:
describe 'Download CSV' do let( :submission_email ){ 'foo@example.com' } let( :email_csv ){ "id,email,created_at\n1,#{ submission_email }," } specify do visit '/emails' expect( page ).to have_content 'Email Submissions' click_on 'Download CSV' expect( DownloadHelpers::download_content ).to include email_csv end end
规范助手:
require 'shared/download_helper' Capybara.register_driver :selenium do |app| profile = Selenium::WebDriver::Firefox::Profile.new profile['browser.download.dir'] = DownloadHelpers::PATH.to_s profile['browser.download.folderList'] = 2 # Suppress "open with" dialog profile['browser.helperApps.neverAsk.saveToDisk'] = 'text/csv' Capybara::Selenium::Driver.new(app, :browser => :firefox, :profile => profile) end config.before( :each ) do DownloadHelpers::clear_downloads end
共享/download_helper.rb:
module DownloadHelpers TIMEOUT = 1 PATH = Rails.root.join("tmp/downloads") extend self def downloads Dir[PATH.join("*")] end def download downloads.first end def download_content wait_for_download File.read(download) end def wait_for_download Timeout.timeout(TIMEOUT) do sleep 0.1 until downloaded? end end def downloaded? !downloading? && downloads.any? end def downloading? downloads.grep(/\.part$/).any? end def clear_downloads FileUtils.rm_f(downloads) end end
推荐阅读
-
如何在Java中通过Firefox配置文件下载CSV文件
2021-02-01 关注 0 浏览98 1答案
-
如何在Python中恢复文件下载?
2021-01-29 关注 0 浏览61 1答案
-
如何在 RSpec 中运行单个测试/规范文件?
2022-05-26 关注 0 浏览9 1答案
-
如何在rails中使用link_to_remote调用文件下载?
2021-01-31 关注 0 浏览70 1答案
-
提示要使用node.js和node-csv-parser(节点模块)弹出的CSV文件下载
2021-01-31 关注 0 浏览91 1答案
-
如何并行化文件下载?
2021-01-29 关注 0 浏览64 1答案
-
如何处理Safari WebseleniumWebdriver的文件下载
2021-02-01 关注 0 浏览55 1答案
-
如何使用AngularJS或Javascript提供文件下载?
2021-02-01 关注 0 浏览59 1答案
-
如何使用AngularJS或Javascript提供文件下载?
2021-02-02 关注 0 浏览58 1答案
-
使用FileSystemResource强制文件下载文件时,如何设置“ Content-Disposition”和“ Filename”?
2021-01-30 关注 0 浏览74 1答案