2011-03-10 12 views
16

¿Alguien tiene idea de cómo probar la descarga de archivos usando pepino?archivo de prueba de pepino descarga

+2

Necesita un poco más de información. ¿Es esta una aplicación por lotes, un sitio web, estás usando Watir o una API similar? ¿Qué estás tratando de probar con respecto a la descarga de archivos? –

Respuesta

13

Esto funcionó para mí en base al utilizar send_data al igual que send_data(data, :filename => "inventory_#{Date.today.to_s}.csv", :disposition => 'attachment')

Probablemente no es la mejor manera de escribir el paso, pero funcionó!

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 
10

He encontrado this a ser una manera conveniente de las pruebas de descargas, es una manera naiv haciendo una prueba para las cabeceras puestos a la mayoría de las veces es razonable.

Si está utilizando capbybara a continuación, poner el siguiente dentro de su step_definitions.rb

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

Dentro de su función ahora se puede hacer:

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

Saludos

+0

Intentó pero activó esta excepción 'Capybara :: NotSupportedByDriverError Exception: Capybara :: NotSupportedByDriverError'. ¿Cualquier sugerencia? – kxhitiz

+0

Solo lo probé con prueba en rack como controlador. ¿Qué estás usando, Selenio? – krichard

+0

sí ... selenio. ¿Cualquier sugerencia? – kxhitiz

1

corro selenio a través de cromo , cuando estoy probando que la csv se ha descargado, uso lo siguiente en Ruby:

Simplemente busca en el directorio de descarga predeterminado y confirma que el archivo está allí y emite el nombre de archivo en cmd.

1

en Chrome lo hago con la apertura de la página: chrome://downloads y luego usar el dom sombra para recuperar los archivos descargados:

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

La lista de archivos descargados también contienen información como la ruta del archivo y la fecha de descarga.

0

Para Chrome, puede establecer la capacidad proporcionando opciones de cromo. Consulte a continuación código

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

entonces se puede usar existe() de java.io.File para asegurarse de si existe el archivo.

File file = new file(downloadFilepath+filename); 
    assert file.exists() : "File not downloaded"; 
Cuestiones relacionadas