cucumber test file download

后端 未结 5 1253
渐次进展
渐次进展 2020-12-10 02:32

Anybody have idea how to test file download using cucumber?

相关标签:
5条回答
  • 2020-12-10 02:48

    On chrome I do it by opening the page: chrome://downloads and then use the shadow dom to retrieve the downloaded files:

    document
      .querySelector('downloads-manager')
      .shadowRoot.querySelector('#downloads-list')
      .getElementsByTagName('downloads-item');
    

    The downloaded files list also contain information such as file path and download date.

    0 讨论(0)
  • 2020-12-10 02:51

    I found this to be a convenient way of testing for downloads, its a naiv way just testing for the headers put for most of the time its reasonable.

    If you are using capbybara then put the following inside your step_definitions.rb

        Then /^I should get a download with the filename "([^\"]*)"$/ do |filename|
           page.response_headers['Content-Disposition'].should include("filename=\"#{filename}\"")
        end
    

    Inside your feature you can now do:

        When I follow "Export as ZIP"
        Then I should get a download with the filename "contacts_20110203.zip"
    

    Cheers

    0 讨论(0)
  • 2020-12-10 02:54

    For Chrome you can set the capability providing chrome options. Refer below code

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

    then you can use exists() method of java.io.File to make sure if file exists.

        File file = new file(downloadFilepath+filename);
        assert file.exists() : "File not downloaded";
    
    0 讨论(0)
  • 2020-12-10 03:00

    This worked for me based when using send_data like so send_data(data, :filename => "inventory_#{Date.today.to_s}.csv", :disposition => 'attachment')

    Probably not best way to write the step, but it worked!

    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
    
    0 讨论(0)
  • 2020-12-10 03:07

    I run selenium through chrome, when I'm testing that the csv has downloaded, I use the following in Ruby:

    Then /^I should get a downloaded file for fleet: "(.*?)"$/ do |export|       
        puts Dir["C:/Users/**/Downloads/fleet_#{export}_export_all_*.csv"].last
    end
    

    It simply looks in the default download directory and confirms that the file is there and outputs the filename within cmd.

    0 讨论(0)
提交回复
热议问题