selenium-webdriver - example - protractor tutorial español
Caso de prueba de e2e de Protractor para descargar el archivo pdf (4)
Actualmente puedo establecer la ubicación de la ruta de descarga
Cromo
capabilities: {
''browserName'': ''chrome'',
''platform'': ''ANY'',
''version'': ''ANY'',
''chromeOptions'': {
// Get rid of --ignore-certificate yellow warning
args: [''--no-sandbox'', ''--test-type=browser''],
// Set download path and avoid prompting for download even though
// this is already the default on Chrome but for completeness
prefs: {
''download'': {
''prompt_for_download'': false,
''default_directory'': ''/e2e/downloads/'',
}
}
}
},
Para las pruebas remotas, necesitaría una infraestructura más compleja, como la configuración de un recurso compartido de Samba o un destino de directorio compartido de red.
Firefox
var FirefoxProfile = require(''firefox-profile'');
var q = require(''q'');
[...]
getMultiCapabilities: getFirefoxProfile,
framework: ''jasmine2'',
[...]
function getFirefoxProfile() {
"use strict";
var deferred = q.defer();
var firefoxProfile = new FirefoxProfile();
firefoxProfile.setPreference("browser.download.folderList", 2);
firefoxProfile.setPreference("browser.download.manager.showWhenStarting", false);
firefoxProfile.setPreference("browser.download.dir", ''/tmp'');
firefoxProfile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/vnd.openxmlformats-officedocument.wordprocessingml.document");
firefoxProfile.encoded(function(encodedProfile) {
var multiCapabilities = [{
browserName: ''firefox'',
firefox_profile : encodedProfile
}];
deferred.resolve(multiCapabilities);
});
return deferred.promise;
}
Finalmente y tal vez obvio, para activar la descarga, haga clic en el enlace de descarga como sabe, por ejemplo
$(''a.some-download-link'').click();
¿Alguien puede decirme cómo escribir un caso de prueba para obtener un enlace para descargar el archivo pdf usando jasmine framework? Gracias por adelantado.
Necesitaba verificar los contenidos del archivo descargado (una exportación CSV en mi caso) contra un resultado esperado, y encontré lo siguiente para trabajar:
var filename = ''/tmp/export.csv'';
var fs = require(''fs'');
if (fs.existsSync(filename)) {
// Make sure the browser doesn''t have to rename the download.
fs.unlinkSync(filename);
}
$(''a.download'').click();
browser.driver.wait(function() {
// Wait until the file has been downloaded.
// We need to wait thus as otherwise protractor has a nasty habit of
// trying to do any following tests while the file is still being
// downloaded and hasn''t been moved to its final location.
return fs.existsSync(filename);
}, 30000).then(function() {
// Do whatever checks you need here. This is a simple comparison;
// for a larger file you might want to do calculate the file''s MD5
// hash and see if it matches what you expect.
expect(fs.readFileSync(filename, { encoding: ''utf8'' })).toEqual(
"A,B,C/r/n"
);
});
Encontré la sugerencia de configuración de Leo útil para permitir que la descarga se guarde en algún lugar accesible.
El tiempo de espera de 30000ms es el predeterminado, por lo que podría omitirse, pero lo dejo como recordatorio en caso de que alguien quiera cambiarlo.
Una cosa que hice en el pasado es usar un comando HTTP HEAD. Básicamente, es lo mismo que ''OBTENER'', pero solo recupera los encabezados.
Desafortunadamente, el servidor web necesita ser compatible con ''HEAD'' explícitamente. Si es así, puedes probar la URL y luego verificar la ''aplicación / pdf'' en Content-Type, sin tener que descargar el archivo.
Si el servidor no está configurado para admitir HEAD, probablemente solo pueda verificar el texto del enlace como se sugirió anteriormente.
podría ser la prueba para verificar el atributo href así:
var link = element(by.css("a.pdf"));
expect(link.getAttribute(''href'')).toEqual(''someExactUrl'');