黄瓜测试文件下载

时间:2011-03-10 03:51:03

标签: cucumber

有人知道如何使用黄瓜测试文件下载吗?

5 个答案:

答案 0 :(得分:13)

这对我来说非常适用于使用像send_data(data, :filename => "inventory_#{Date.today.to_s}.csv", :disposition => 'attachment')

这样的send_data

可能不是编写步骤的最佳方式,但它有效!

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";