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


Je veux vérifier le téléchargement de fichier en utilisant Selenium webdriver et Java. Le fichier à télécharger est au format pdf. Lorsque webdriver clique sur le lien "Télécharger" dans l'AUT, firefox ouvre la fenêtre de confirmation de téléchargement suivante

Fenêtre de Confirmation de Téléchargement

Je veux que Firefox télécharge automatiquement le fichier 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 puis-je définir le profil Firefox pour que les fichiers PDF soient téléchargé automatiquement sans afficher le dialogue de confirmation?

Author: stackoverflow, 2016-03-30

3 answers

Tout comme @Jason l'a suggéré, c'est probablement un autre type mime. Pour obtenir le type mime:

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

entrez la description de l'image ici

Puis 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();
 26
Author: Florent B., 2018-01-29 14:03:25

La façon dont il 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
Author: dmytrocx75, 2017-11-14 15:36:59

Si quelqu'un a ce problème dans un environnement SPA, alors j'ai frappé un problème où la définition de la préférence saveToDisk au type de contenu attendu n'a pas fonctionné (dans mon cas text/csv)

La raison pour laquelle l'interface utilisateur SPA initie un appel HTTP à l'api backend pour obtenir les données CSV. Il fait ensuite une astuce pour créer un élément <A> sur lequel il clique pour lancer le téléchargement sur la machine locale. L'astuce crée un objet Blob avec les données CSV et le type doit être défini sur octet/stream dans le cadre de celui-ci. Par conséquent, le saveToDisk doit également être défini sur octet/stream pour que cela fonctionne.

 1
Author: deejbee, 2018-07-26 12:41:59