有人知道如何使用黄瓜测试文件下载吗?
答案 0 :(得分:13)
这对我来说非常适用于使用像send_data(data, :filename => "inventory_#{Date.today.to_s}.csv", :disposition => 'attachment')
可能不是编写步骤的最佳方式,但它有效!
Then /^I should receive a file(?: "([^"]*)")?/ do |file|
result = page.response_headers['Content-Type'].should == "application/octet-stream"
if result
result = page.response_headers['Content-Disposition'].should =~ /#{file}/
end
result
end
答案 1 :(得分:11)
我发现this是一种测试下载的便捷方式,它是一种简单的方法,只是测试大多数时候放置的标头是合理的。
如果您使用的是capbybara,请将以下内容放入step_definitions.rb
中 Then /^I should get a download with the filename "([^\"]*)"$/ do |filename|
page.response_headers['Content-Disposition'].should include("filename=\"#{filename}\"")
end
您可以在功能内部执行以下操作:
When I follow "Export as ZIP"
Then I should get a download with the filename "contacts_20110203.zip"
干杯
答案 2 :(得分:1)
我通过chrome运行selenium,当我测试csv已下载时,我在Ruby中使用以下内容:
Then /^I should get a downloaded file for fleet: "(.*?)"$/ do |export|
puts Dir["C:/Users/**/Downloads/fleet_#{export}_export_all_*.csv"].last
end
它只是查看默认下载目录并确认文件在那里并在cmd中输出文件名。
答案 3 :(得分:1)
在Chrome上,我打开页面:chrome://downloads
,然后使用影子dom检索下载的文件:
document
.querySelector('downloads-manager')
.shadowRoot.querySelector('#downloads-list')
.getElementsByTagName('downloads-item');
下载的文件列表还包含文件路径和下载日期等信息。
答案 4 :(得分:0)
对于Chrome,您可以设置提供Chrome选项的功能。参考下面的代码
String downloadFilepath = "path to specify download location e.g. C:\\Downloads";
Map<String, Object> chromePrefs = new HashMap<String, Object>();
chromePrefs.put("profile.default_content_settings.popups", 0);
chromePrefs.put("download.default_directory", downloadFilepath);
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("prefs", chromePrefs);
DesiredCapabilities cap = DesiredCapabilities.chrome();
cap.setCapability(ChromeOptions.CAPABILITY, options);
WebDriver driver = new ChromeDriver(cap);
然后你可以使用java.io.File的exists()方法来确保文件是否存在。
File file = new file(downloadFilepath+filename);
assert file.exists() : "File not downloaded";