web-dev-qa-db-fra.com

Définir le profil Firefox pour télécharger les fichiers automatiquement à l'aide de Selenium et Java

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:

 Download Confirmation Window

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?

14
stackoverflow

Comme @Jason l'a suggéré, c'est probablement un autre type de mime .

  • Outils de développement ouverts
  • Aller au réseau
  • Cliquez sur le lien pour télécharger le pdf
  • Dans le panneau de réseau, sélectionnez la première demande
  • Le type mime est le type de contenu de l'en-tête de la réponse:

 enter image description here

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();
28
Florent B.

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

2
7cart project

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.

1
deejbee