Je souhaite vérifier le téléchargement du fichier avec Selenium WebDriver et Java. Le fichier à télécharger est au format PDF. Lorsque WebDriver clique sur le lien "Télécharger" de la commande AUT, Firefox ouvre la fenêtre de confirmation de téléchargement suivante:
Je souhaite que Firefox télécharge le fichier automatiquement sans afficher la fenêtre de confirmation ci-dessus. J'ai donc utilisé le code ci-dessous:
FirefoxProfile firefoxProfile=new FirefoxProfile();
firefoxProfile.setPreference("browser.download.folderList",2);
firefoxProfile.setPreference("browser.download.manager.showWhenStarting",false);
firefoxProfile.setPreference("browser.download.dir",downloadPath);
firefoxProfile.setPreference("browser.helperApps.neverAsk.saveToDisk","application/pdf");
WebDriver driver=new FirefoxDriver(firefoxProfile);
mais Firefox affiche toujours la même fenêtre. Comment définir le profil Firefox pour que les fichiers PDF soient téléchargés automatiquement sans afficher le dialogue de confirmation?
Comme @Jason l'a suggéré, c'est probablement un autre type de mime .
Ensuite, pour télécharger un PDF avec Firefox:
FirefoxOptions options = new FirefoxOptions();
options.setPreference("browser.download.folderList", 2);
options.setPreference("browser.download.dir", "C:\\Windows\\temp");
options.setPreference("browser.download.useDownloadDir", true);
options.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/pdf");
options.setPreference("pdfjs.disabled", true); // disable the built-in PDF viewer
WebDriver driver = new FirefoxDriver(options);
driver.get("https://www.mozilla.org/en-US/foundation/documents");
driver.findElement(By.linkText("IRS Form 872-C")).click();
La façon dont cela fonctionne actuellement dans Firefox 57.0b13 est
FirefoxProfile profile = new FirefoxProfile();
// profile.setPreference("browser.download.useDownloadDir", true); This is true by default. Add it if it's not working without it.
profile.setPreference("browser.download.folderList",2); //Use for the default download directory the last folder specified for a download
profile.setPreference("browser.download.dir", "/Path/to/directory"); //Set the last directory used for saving a file from the "What should (browser) do with this file?" dialog.
profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/pdf"); //list of MIME types to save to disk without asking what to use to open the file
profile.setPreference("pdfjs.disabled", true); // disable the built-in PDF viewer
firefoxOptions.setProfile(profile);
Informations détaillées sur chaque paramètre de profil Firefox
Si quelqu'un rencontre ce problème dans un environnement SPA, je rencontre un problème où la définition de la préférence saveToDisk
sur le type de contenu attendu ne fonctionnait pas (dans mon cas, text/csv
)
La raison en est que l'interface utilisateur SPA lance un appel HTTP à l'API backend pour obtenir les données CSV. Il crée ensuite un élément <A>
sur lequel il clique pour lancer le téléchargement sur la machine locale. Cette astuce crée un objet Blob
avec les données CSV et le type doit être défini sur octet/stream
. Par conséquent, saveToDisk
doit également être défini sur octet/stream
pour que cela fonctionne.