1

我有一个测试上传,压缩和下载PDF文件。除了下载部分外,一切工作正常。当我们点击下载时,我无法得到如何处理Firefox中的确认弹出菜单/保存或打开文件对话框。我尝试修改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(); 
+1

为什么你使用browser.helperApps.neverAsk.openFile和browser.helperApps.neverAsk.saveToDisk?尝试删除'openFile'首选项 – Andersson

+0

我使用两个作为Firefox提供2选项:保存文件或打开.. 试图通过删除openFile但没有帮助.. –

回答

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

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

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

profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/pdf"); 

要这样:

profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/octet-stream"); 

如何找到MIME类型

你点击下载按钮打开Firefox的控制台,转到前网络选项卡。 Firefox network tab

现在,如果您点击下载按钮,您将看到一个GET请求。如果你打开这个请求,你可以看到响应的内容类型。这是你的MIME类型。 MIME-type

+0

很多谢谢,它的工作.. 只是一件事,你可以请指导我在哪里得到这些MIME信息..我不知道这些东西 –

+0

@SahilSehgal我已经添加了一些解释如何找到它。 – RemcoW

+0

非常感谢Remco .. –