Доступ к диалоговому окну загрузки файлов в Firefox

firefox selenium dialog

99619 просмотра

11 ответа

11979 Репутация автора

Есть ли какой-либо API, который может позволить мне манипулировать диалоговым окном загрузки файлов в Firefox? (Я хочу получить доступ к тому, который появляется, когда пользователь что-то делает, а не инициировать сам).

То, что я хочу сделать, - это получить доступ к этому диалоговому окну от Selenium (и достаточно ли привилегированного режима Selenium для доступа к интерфейсу chrome, я тоже не уверен).

Автор: Andrey Shchekin Источник Размещён: 24.07.2009 08:10

Ответы (11)


30 плюса

243211 Репутация автора

Решение

Не то, что я знаю из. Но вы можете настроить Firefox для автоматического запуска загрузки и сохранения файла в определенном месте. Затем ваш тест мог проверить, действительно ли файл появился.

Автор: Aaron Digulla Размещён: 24.07.2009 08:22

3 плюса

8478 Репутация автора

Не знаю, но вы, возможно, можете проверить источник одной из загрузок Firefox.

Вот источник для того, что я использую Download Statusbar .

Автор: Nifle Размещён: 24.07.2009 09:40

0 плюса

0 Репутация автора

Я не понял вашу цель, вы хотите, чтобы ваш тест автоматически загружал файл, когда тест выполняется, если да, то вам нужно использовать пользовательский профиль Firefox в своем тестовом исполнении.

В пользовательском профиле в первый раз выполните тест вручную, и если появится диалоговое окно загрузки, установите флажок «Сохранить его на диск», установите флажок «Всегда выполнять это действие», который гарантирует, что файл будет автоматически загружен при следующем запуске вашего теста.

Автор: Ruturaj Размещён: 25.07.2009 10:45

38 плюса

1311 Репутация автора

Я застрял с той же проблемой, но нашел решение. Я сделал это так же, как и этот блог .

Конечно, это была Java, я перевел ее на Python:

fp = webdriver.FirefoxProfile()

fp.set_preference("browser.download.folderList",2)
fp.set_preference("browser.download.manager.showWhenStarting",False)
fp.set_preference("browser.download.dir",getcwd())
fp.set_preference("browser.helperApps.neverAsk.saveToDisk","text/csv")

browser = webdriver.Firefox(firefox_profile=fp)

В моем примере это был файл CSV. Но когда вам нужно больше, они хранятся в~/.mozilla/$USER_PROFILE/mimeTypes.rdf

Автор: Akendo Размещён: 02.11.2011 04:03

70 плюса

3112 Репутация автора

У меня есть решение для этой проблемы, проверьте код:

FirefoxProfile firefoxProfile = new FirefoxProfile();

firefoxProfile.setPreference("browser.download.folderList",2);
firefoxProfile.setPreference("browser.download.manager.showWhenStarting",false);
firefoxProfile.setPreference("browser.download.dir","c:\\downloads");
firefoxProfile.setPreference("browser.helperApps.neverAsk.saveToDisk","text/csv");

WebDriver driver = new FirefoxDriver(firefoxProfile);//new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), capability);

driver.navigate().to("http://www.myfile.com/hey.csv");
Автор: dlopezgonzalez Размещён: 17.02.2012 01:22

6 плюса

6735 Репутация автора

Веб-приложения генерируют 3 разных типа всплывающих окон; а именно,

 1| JavaScript PopUps
 2| Browser PopUps
 3| Native OS PopUps [e.g., Windows Popup like Upload/Download]

В целом всплывающие окна JavaScript генерируются кодом веб-приложения. Selenium предоставляет API для обработки этих всплывающих окон JavaScript, например Alert.

В конце концов, самый простой способ игнорировать всплывающие и загружаемые файлы браузера осуществляется с использованием профилей браузера; Есть несколько способов сделать это:

  • Вручную включить изменения в свойствах браузера (или)
  • Настроить свойства браузера с помощью профиля setPreference

Method1

Прежде чем вы начнете работать со всплывающими окнами в профилях браузера, убедитесь, что для параметров «Загрузить» по умолчанию задано значение «Сохранить файл».

(Открыть Firefox) Инструменты> Параметры> Приложения

введите описание изображения здесь

Method2

Используйте приведенный ниже фрагмент и редактируйте, когда это необходимо.

FirefoxProfile profile = new FirefoxProfile();

String path = "C:\\Test\\";
profile.setPreference("browser.download.folderList", 2);
profile.setPreference("browser.download.dir", path);
profile.setPreference("browser.download.manager.alertOnEXEOpen", false);
profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/msword, application/csv, application/ris, text/csv, image/png, application/pdf, text/html, text/plain, application/zip, application/x-zip, application/x-zip-compressed, application/download, application/octet-stream");
profile.setPreference("browser.download.manager.showWhenStarting", false);
profile.setPreference("browser.download.manager.focusWhenStarting", false);  
profile.setPreference("browser.download.useDownloadDir", true);
profile.setPreference("browser.helperApps.alwaysAsk.force", false);
profile.setPreference("browser.download.manager.alertOnEXEOpen", false);
profile.setPreference("browser.download.manager.closeWhenDone", true);
profile.setPreference("browser.download.manager.showAlertOnComplete", false);
profile.setPreference("browser.download.manager.useWindow", false);
profile.setPreference("services.sync.prefs.sync.browser.download.manager.showWhenStarting", false);
profile.setPreference("pdfjs.disabled", true);

driver = new FirefoxDriver(profile);
Автор: Prashanth Sams Размещён: 27.05.2015 10:59

2 плюса

408 Репутация автора

Большинство браузеров (в моем случае Firefox) по умолчанию выбирают кнопку OK. Поэтому мне удалось решить эту проблему, используя следующий код. Он в основном нажимает кнопку ввода для вас, и файл загружается.

Robot robot = new Robot();

// A short pause, just to be sure that OK is selected
Thread.sleep(3000);

robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
Автор: shish Размещён: 17.06.2015 11:00

2 плюса

15352 Репутация автора

Вместо того, чтобы запускать собственный диалог загрузки файла так:

By DOWNLOAD_ANCHOR = By.partialLinkText("download");
driver.findElement(DOWNLOAD_ANCHOR).click();

Я обычно делаю это вместо этого, чтобы обойти собственный диалог загрузки файла. Таким образом, он работает во всех браузерах:

String downloadURL = driver.findElement(DOWNLOAD_ANCHOR).getAttribute("href");
File downloadedFile = getFileFromURL(downloadURL);

Это просто требует, чтобы вы реализовали метод, getFileFromURLкоторый использует Apache HttpClient для загрузки файла и возврата ссылки на файл.

Аналогично, если вы используете Selenide , он работает одинаково, используя встроенную download()функцию для загрузки файлов.

Автор: djangofan Размещён: 03.03.2016 08:07

5 плюса

1297 Репутация автора

Я столкнулся с той же проблемой. В нашем приложении экземпляр FireFox был создан путем передачи DesiredCapabilities следующим образом

driver = new FirefoxDriver(capabilities);

Основываясь на предложениях других, я сделал свои изменения как

FirefoxProfile firefoxProfile = new FirefoxProfile();     
firefoxProfile.setPreference("browser.helperApps.neverAsk.saveToDisk",
    "application/octet-stream");
driver = new FirefoxDrvier(firefoxProfile);

Это послужило цели, но, к сожалению, мои другие тесты автоматизации начали проваливаться. И причина в том, что я удалил возможности, которые были переданы ранее.

Еще несколько просмотров в сети и нашли альтернативный путь. Мы можем настроить профиль в желаемых возможностях.

Таким образом, новый рабочий код выглядит так:

DesiredCapabilities capabilities = DesiredCapabilities.firefox();

// add more capabilities as per your need.
FirefoxProfile firefoxProfile = new FirefoxProfile();        
firefoxProfile.setPreference("browser.helperApps.neverAsk.saveToDisk",
    "application/octet-stream");

// set the firefoxprofile as a capability
capabilities.setCapability(FirefoxDriver.PROFILE, firefoxProfile);
driver = new FirefoxDriver(capabilities);
Автор: Sanjay Bharwani Размещён: 17.03.2016 06:35

0 плюса

91 Репутация автора

Кроме того, вы можете добавить

      profile.setPreference("browser.download.panel.shown",false);

Чтобы удалить загруженный список файлов, который отображается по умолчанию и закрывает часть веб-страницы.

Мои общие настройки:

        DesiredCapabilities dc = DesiredCapabilities.firefox();
        dc.merge(capabillities);
        FirefoxProfile profile = new FirefoxProfile();
        profile.setAcceptUntrustedCertificates(true);
        profile.setPreference("browser.download.folderList", 4);
        profile.setPreference("browser.download.dir", TestConstants.downloadDir.getAbsolutePath());
        profile.setPreference("browser.download.manager.alertOnEXEOpen", false);
        profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/msword, application/csv, application/ris, text/csv, data:image/png, image/png, application/pdf, text/html, text/plain, application/zip, application/x-zip, application/x-zip-compressed, application/download, application/octet-stream");
        profile.setPreference("browser.download.manager.showWhenStarting", false);
        profile.setPreference("browser.download.manager.focusWhenStarting", false);
        profile.setPreference("browser.download.useDownloadDir", true);
        profile.setPreference("browser.helperApps.alwaysAsk.force", false);
        profile.setPreference("browser.download.manager.alertOnEXEOpen", false);
        profile.setPreference("browser.download.manager.closeWhenDone", true);
        profile.setPreference("browser.download.manager.showAlertOnComplete", false);
        profile.setPreference("browser.download.manager.useWindow", false);
        profile.setPreference("browser.download.panel.shown",false);
        dc.setCapability(FirefoxDriver.PROFILE, profile);
        this.driver = new FirefoxDriver(dc);
Автор: Neil Ellis Размещён: 09.05.2016 09:56

3 плюса

441 Репутация автора

У меня была та же проблема, я не хотел доступа к Save Dialogue.

Ниже код может помочь:

    FirefoxProfile fp = new FirefoxProfile();
    fp.setPreference("browser.download.folderList",2);
    fp.setPreference("browser.download.manager.showWhenStarting",false);
    fp.setPreference("browser.helperApps.alwaysAsk.force", false);
    // Below you have to set the content-type of downloading file(I have set simple CSV file)
    fp.setPreference("browser.helperApps.neverAsk.saveToDisk","text/csv");

В зависимости от типа файла, который загружается, вам необходимо указать типы содержимого.

Вы можете указать несколько типов контента, разделенных символом ' ; '

например:

    fp.setPreference("browser.helperApps.neverAsk.saveToDisk","text/csv;application/vnd.ms-excel;application/msword");
Автор: Pratik Patel Размещён: 20.03.2017 07:14
Вопросы из категории :
32x32