java - Firefox Profile 无法自动下载文件

标签 java selenium firefox-driver

在 Selenium 测试中使用 Firefox 配置文件设置下载 pdf 文件时,我尝试绕过 Firefox 下载管理器窗口:

        FirefoxProfile profile = new FirefoxProfile();
        profile.setPreference("browser.download.folderList", 2);
        profile.setPreference("browser.download.dir", "path/to/downloads");
        profile.setPreference("browser.download.useDownloadDir", true);
        profile.setPreference("browser.helperApps.neverAsk.openFile", "application/x-pdf, application/pdf, application/octet-stream, text/csv,application/x-msexcel,application/excel,application/x-excel,application/vnd.ms-excel,image/png,image/jpeg,text/html,text/plain,application/msword,application/xml");
        profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/x-pdf, application/pdf, application/octet-stream, text/csv,application/x-msexcel,application/excel,application/x-excel,application/vnd.ms-excel,image/png,image/jpeg,text/html,text/plain,application/msword,application/xml");
        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);
        FirefoxOptions options = new FirefoxOptions();
        options.setProfile(profile);
        WebDriver driver = new FirefoxDriver(options);
        driver.get("https://mozilla.github.io/pdf.js/web/viewer.html");
        Thread.sleep(3000);
        driver.findElement(By.id("download")).click();
        Thread.sleep(5000);

我尝试了不同的个人资料偏好设置,但似乎没有任何效果。

还需要注意的是,我看到该文件作为一些带有奇怪扩展名的随机字符串出现在下载文件夹中,如下所示:5daYs8iE.pdf.part。如果我退出测试而没有单击下载窗口上的“确定”按钮,则文件会消失,但如果单击它,则文件会保存并将其扩展名更改为 PDF

org.seleniumhq.selenium:selenium-firefox-driver:3.141.59

最佳答案

您可以手动创建 Firefox 配置文件,而不是设置所有首选项,手动设置您需要的所有内容(PDF 自动下载等)并加载现有配置文件,如下所示:

package tyler;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.By;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.openqa.selenium.firefox.ProfilesIni;

public class Tyler {

    public static void main(String[] args) throws InterruptedException {
        FirefoxOptions options = new FirefoxOptions();
        ProfilesIni allProfiles = new ProfilesIni();         
        FirefoxProfile selenium_profile = allProfiles.getProfile("selenium_profile");
        options.setProfile(selenium_profile);
        options.setBinary("C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe");
        System.setProperty("webdriver.gecko.driver", "C:\\Users\\pavel.burgr\\Desktop\\webdrivers\\geckodriver.exe");
        WebDriver driver = new FirefoxDriver(options);
        driver.manage().window().maximize();
        driver.get("https://mozilla.github.io/pdf.js/web/viewer.html");
        Thread.sleep(10000);
        driver.findElement(By.id("download")).click();
        Thread.sleep(10000);
    }

}

关于java - Firefox Profile 无法自动下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58609201/

相关文章:

java - 无法实现 Android 设计支持库

java - 如何使用 session 外观从远程客户端访问实体 bean

c# - 如何在C#中使用关键字 `var`和Class

java - FirefoxDriver 截取不同尺寸的屏幕截图

c# - 如何使用 Selenium FirefoxDriver 启动多个 Firefox portable 实例

java - 在 Class.getDeclaredMethods() 中返回内部 Lambda?

java - CTCI 的字符串排列解法的这个解法正确吗?

java - 使用 Selenium-Java 单击 'find hotels' 时出现问题

java - 循环遍历 div 中的页面链接,然后单击 Selenium (java) 中包含特定值的每个链接