在Firefox中处理下载确认弹出/对话框

Sah*_*gal 1 testng selenium selenium-firefoxdriver selenium-webdriver

我有一个上传,压缩和下载pdf文件的测试.除下载部分外,一切正常.当我们点击下载时,我无法获得如何处理Firefox中的确认弹出/保存或打开文件对话框.我尝试修改firefox配置但仍然无法解决它.有人可以帮忙吗?

FirefoxProfile profile = new FirefoxProfile();
        profile.setPreference("browser.download.folderList", 2);
        profile.setPreference("browser.download.manager.showWhenStarting", false);
        profile.setPreference("browser.download.dir", "C:\\Users\\Sahil\\Downloads\\");
        profile.setPreference("browser.helperApps.neverAsk.openFile","application/pdf");
        profile.setPreference("browser.helperApps.neverAsk.saveToDisk","application/pdf");
        profile.setPreference("browser.helperApps.alwaysAsk.force", false);
        profile.setPreference("browser.download.manager.alertOnEXEOpen", false);
        profile.setPreference("browser.download.manager.focusWhenStarting", false);
        profile.setPreference("browser.download.manager.useWindow", false);
        profile.setPreference("browser.download.manager.showAlertOnComplete", false);
        profile.setPreference("browser.download.manager.closeWhenDone", false);

        profile.setPreference("browser.download.manager.useWindow", false);
        profile.setPreference("browser.download.manager.showWhenStarting", false);
        profile.setPreference("services.sync.prefs.sync.browser.download.manager.showWhenStarting", false);
      , 0  profile.setPreference("pdfjs.disabled", true);
     WebDriver driver=new FirefoxDriver(profile);   
    driver.get("http://www.ilovepdf.com/compress_pdf");
    driver.findElement(By.id("pickfiles")).click();
    Runtime.getRuntime().exec("C:\\Users\\Sahil\\Documents\\Au\\Second.exe");
    WebDriverWait wait=new WebDriverWait(driver, 100);
    WebElement element1=wait.until(ExpectedConditions.elementToBeClickable(By.id("uploadfiles")));
    element1.click();

    WebElement element=wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("a#download")));
    element.click();
Run Code Online (Sandbox Code Playgroud)

Rem*_*coW 6

您有很多不需要的偏好.你需要的只是这个:

// Create a firefoxprofile for firefox specific settings
FirefoxProfile profile = new FirefoxProfile();

// Set the downloads folder
profile.setPreference("browser.download.dir", path/to/folder);

// Download files to the downloads folder
profile.setPreference("browser.download.folderList", 2);

// Don't show downloads window when download starts
profile.setPreference("browser.download.manager.showWhenStarting", False);

// Prevent file download dialog to be shown for certain MIME-types
profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/pdf");
Run Code Online (Sandbox Code Playgroud)

如果这不起作用,您应该确保指定了正确的MIME类型.您可以在浏览器中监控网络并手动下载文件.应使用特定内容类型进行GET请求.确保已将内容类型添加到您的browser.helperApps.neverAsk.saveToDisk首选项中.

编辑! 我刚刚检查了您指定的网站的MIME类型.您正在尝试自动保存application/pdf.但是,您正在下载MIME类型的文件application/octet-stream.你需要改变这个:

profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/pdf");
Run Code Online (Sandbox Code Playgroud)

对此:

profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/octet-stream");
Run Code Online (Sandbox Code Playgroud)

如何找到MIME类型

在点击下载按钮之前打开firefox控制台并转到网络选项卡. Firefox网络选项卡

现在,如果您点击下载按钮,您将看到已发出GET请求.如果您打开此请求,则可以看到响应的内容类型.这是您的MIME类型. MIME类型