Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 2

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

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");

Ответ 3

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

Конечно, это была 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

Ответ 4

Веб-приложения генерируют 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) Инструменты > Параметры > Приложения

enter image description here

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);

Ответ 5

Я столкнулся с той же проблемой. В нашем приложении экземпляр 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);

Ответ 6

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

Вот источник, который я использую Загрузить Statusbar.

Ответ 7

У меня была такая же проблема, я не хотел доступа к 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");

Ответ 8

Большинство браузеров (в моем случае 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);

Ответ 9

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

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() для обработки загрузки файлов.

Ответ 10

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

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

Ответ 11

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

      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);