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
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?
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:
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();
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
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.