我想使用Selenium WebDriver和Java来验证文件下载。要下载的文件是PDF格式。当WebDriver点击"下载"在AUT中链接,Firefox打开以下下载确认窗口:
我希望Firefox自动下载文件而不显示上面的确认窗口,所以我使用了以下代码:
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);
但Firefox仍显示相同的窗口。如何设置Firefox配置文件以便自动下载PDF文件而不显示确认对话框?
答案 0 :(得分:30)
就像@Jason建议的那样,它很可能是另一种mime类型。 获取mime类型:
然后使用Firefox下载PDF:
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();
答案 1 :(得分:2)
目前在Firefox 57.0b13中的工作方式是
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);
的详细信息
答案 2 :(得分:2)
如果有人在SPA环境中遇到此问题,那么我遇到的问题是无法将saveToDisk
首选项设置为预期的内容类型(在我的情况下为text/csv
)>
SPA UI之所以会发起对后端api的HTTP调用,以获取CSV数据。然后,它会技巧性地创建一个<A>
元素,单击该元素可开始下载到本地计算机。该技巧将使用CSV数据创建一个Blob
对象,并且必须将类型设置为octet/stream
。因此,saveToDisk
也必须设置为octet/stream
才能起作用。
答案 3 :(得分:1)
我会将其写为评论,但我的信誉点不足-硒Web驱动程序启动后,您可以导航到about:config并搜索 browser.helperApps.neverAsk.saveToDisk,以确认您特定的类型已正确记录。
就我而言,该问题也通过添加
得到解决prof.set_preference("browser.helperApps.neverAsk.openFile", "application/pdf, application/octet-stream, application/x-winzip, application/x-pdf, application/x-gzip")
答案 4 :(得分:1)
现在是2020年。找到MIME类型作为@FlorentB。 对我来说,下载csv文件,发现Content-Type =“ application / octet-stream”
要下载到文件夹“下载”:
FirefoxOptions options = new FirefoxOptions();
options.addPreference("browser.download.folderList",1);
options.addPreference("browser.helperApps.neverAsk.saveToDisk", "application/octet-stream");
WebDriver driver = new FirefoxDriver(options);
要下载到桌面,请将第二行的值更改为0:
FirefoxOptions options = new FirefoxOptions();
options.addPreference("browser.download.folderList",0);
options.addPreference("browser.helperApps.neverAsk.saveToDisk", "application/octet-stream");
WebDriver driver = new FirefoxDriver(options);
要下载到另一个文件夹:
FirefoxOptions options = new FirefoxOptions();
options.addPreference("browser.download.dir", "D:\\Test");
options.addPreference("browser.download.folderList",2);
options.addPreference("browser.helperApps.neverAsk.saveToDisk", "application/octet-stream");
WebDriver driver = new FirefoxDriver(options);
答案 5 :(得分:0)
如果您像我一样,正在寻找其他文件类型或多种类型的文件。确保只设置一次neverAsk
首选项。
opts.set_preference('browser.download.folderList', 2)
opts.set_preference('browser.download.manager.showWhenStarting', False) opts.set_preference('browser.download.dir', str(download_directory)) opts.set_preference('browser.download.useDownloadDir', True)
# important part!
opts.set_preference('browser.helperApps.neverAsk.saveToDisk', 'application/zip')
如果人们知道如何包含多个哑剧类型,我将很乐意对此进行更新!
其他mime类型供快速参考:
# CSV mimetype = 'text/csv'
# TXT mimetype = 'text/txt'
# EXCEL mimetype = 'application/vnd.ms-excel'
答案 6 :(得分:0)
Err,根据JRodDynamite的回答:
opts.set_preference('browser.helperApps.neverAsk.saveToDisk', 'application/zip,text/csv,text/txt')
应对多种mime类型有效-在这种情况下,仅适用于zip,csv和txt文件。
就个人而言(以及我现在在此页面上的原因),我感到很困惑,“只保存#$&*!”选项不是“未知”(也称为“应用程序/八位字节流”)-文件类型的默认选项。 哦,这就是生活! :)