Access to file download dialog in Firefox

前端 未结 11 2359
一个人的身影
一个人的身影 2020-11-22 07:02

Is there any kind of API that can allow me to manipulate a file download dialog in Firefox? (I want to access the one that appears when user does something, not initiate one

相关标签:
11条回答
  • 2020-11-22 07:31

    I had the same problem, I wanted no access of Save Dialogue.

    Below code can help:

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

    According to the file type which is being downloaded, You need to specify content types.

    You can specify multiple content-types separated with ' ; '

    e.g:

        fp.setPreference("browser.helperApps.neverAsk.saveToDisk","text/csv;application/vnd.ms-excel;application/msword");
    
    0 讨论(0)
  • 2020-11-22 07:32

    I was stuck with the same problem, but I found a solution. I did it the same way as this blog did.

    Of course this was Java, I've translated it to 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)
    

    In my example it was a CSV file. But when you need more, there are stored in the ~/.mozilla/$USER_PROFILE/mimeTypes.rdf

    0 讨论(0)
  • 2020-11-22 07:34

    Instead of triggering the native file-download dialog like so:

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

    I usually do this instead, to bypass the native File Download dialog. This way it works on ALL browsers:

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

    This just requires that you implement method getFileFromURL that uses Apache HttpClient to download a file and return a File reference to you.

    Similarly, if you happen to be using Selenide, it works the same way using the built-in download() function for handling file downloads.

    0 讨论(0)
  • 2020-11-22 07:35

    Most browsers (in mine case Firefox) select the OK button by default. So I managed to solve this by using the following code. It basically presses enter for you and the file is downloaded.

    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);
    
    0 讨论(0)
  • 2020-11-22 07:42

    I have a solution for this issue, check the code:

    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");
    
    0 讨论(0)
  • 2020-11-22 07:46

    Web Applications generate 3 different types of pop-ups; namely,

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

    In General, the JavaScript pop-ups are generated by the web application code. Selenium provides an API to handle these JavaScript pop-ups, such as Alert.

    Eventually, the simplest way to ignore Browser pop-up and download files is done by making use of Browser profiles; There are couple of ways to do this:

    • Manually involve changes on browser properties (or)
    • Customize browser properties using profile setPreference

    Method1

    Before you start working with pop-ups on Browser profiles, make sure that the Download options are set default to Save File.

    (Open Firefox) Tools > Options > Applications

    enter image description here

    Method2

    Make use of the below snippet and do edits whenever necessary.

    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);
    
    0 讨论(0)
提交回复
热议问题