Установите профиль Firefox для автоматической загрузки файлов с использованием Selenium и Java
Я хочу проверить загрузку файлов с помощью Selenium WebDriver и Java. Файл для скачивания в формате PDF. Когда WebDriver нажимает на ссылку "Загрузить" в AUT, Firefox открывает следующее окно подтверждения загрузки:
![Download Confirmation Window]()
Я хочу, чтобы 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 файлы загружались автоматически, не показывая диалоговое окно подтверждения?
Ответы
Ответ 1
Как и предположил @Jason, скорее всего, это другой тип пантомимы. Чтобы получить MIME-тип:
- Открытые инструменты разработчика
- Перейти в сеть
- Нажмите на ссылку, чтобы скачать PDF
- На панели сети выберите первый запрос
- MIME-тип - это Content-Type из заголовка ответа:
![enter image description here]()
Затем, чтобы загрузить PDF с 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();
Ответ 2
В настоящее время он работает в Firefox 57.0b13
FirefoxProfile profile = new FirefoxProfile();
// profile.setPreference("browser.download.useDownloadDir", true); This is true by default. Add it if it 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);
Подробная информация о каждом Настройка профиля Firefox
Ответ 3
Если у кого-то возникла эта проблема в среде SPA, я столкнулся с проблемой, когда установка предпочтения saveToDisk
для ожидаемого типа контента не работала (в моем случае text/csv
)
Причина, по которой пользовательский интерфейс SPA инициирует HTTP-вызов к API бэкэнда, чтобы получить данные CSV. Затем он делает трюк, чтобы создать элемент <A>
которому он щелкает, чтобы начать загрузку на локальный компьютер. Уловка создает объект Blob
с данными CSV, и для его типа должен быть установлен octet/stream
. Поэтому saveToDisk
также должен быть установлен в octet/stream
чтобы это работало.
Ответ 4
Я написал бы это как комментарий, но у меня не хватает очков репутации - после запуска веб-драйвера selenium вы можете перейти к 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")