如何在Java中将Firefox配置文件和Firefox选项与Selenium一起使用

问题描述

我正在编写一个无头的测试,该测试还将使用Selenium在Java中下载文件。从here中我了解到,可以在初始化驱动程序之前通过抛出以下代码来将驱动程序设置为无头:

options.setHeadless(true); //sets driver to work headless 
WebDriver driver = new FirefoxDriver(options);

,我可以使用此method编写Firefox个人资料,该个人资料将规定下载目录,并允许我使用Firefox下载文件而没有任何弹出窗口(我已修改方法,以允许允许下载位置作为参数的方法)。创建方法之后,我在main中这样调用它:

downloadpath = "C:\Scripts"
WebDriver driver = new FirefoxDriver(FirefoxDriverProfile(downloadpath));

然后说我想将下面的代码与上面的两种方法之一配合使用:

driver.get(https://github.com/mozilla/geckodriver/releases);
driver.findElement(By.linkText("geckodriver-v0.27.0-win64.zip")).click();

我要么没有运行的无头版本的Firefox,要么在下载zip文件时收到弹出的保存提示

我如何结合这两个功能配置文件和选项?

编辑:将setHeadless(false)固定为setHedless(true)

解决方法

函数options.setHeadless(false)应该有一个true参数而不是false

,

要使用新的Firefox ProfileFirefoxOptions,可以使用以下代码块:

System.setProperty("webdriver.gecko.driver","C:\\path\\to\\geckodriver.exe");
FirefoxOptions options = new FirefoxOptions();
options.setProfile(new FirefoxProfile());
WebDriver driver = new FirefoxDriver(options);
driver.get("https://www.google.com");

要使用现有的Firefox ProfileFirefoxOptions,可以使用以下代码块:

System.setProperty("webdriver.gecko.driver","C:\\path\\to\\geckodriver.exe");
ProfilesIni profile = new ProfilesIni();
FirefoxProfile testprofile = profile.getProfile("debanjan");
FirefoxOptions opt = new FirefoxOptions();
opt.setProfile(testprofile);
WebDriver driver =  new FirefoxDriver(opt);
driver.get("https://www.google.com");

要与Firefox Profile一起使用新的preferencesFirefoxOptions,可以使用以下代码块:

String downloadFilepath = "C:\\path\\to\\MozillaFirefoxDownload";
System.setProperty("webdriver.gecko.driver","C:\\path\\to\\geckodriver.exe");
FirefoxProfile profile = new FirefoxProfile();
profile.setPreference("browser.download.dir",downloadFilepath);
FirefoxOptions options = new FirefoxOptions();
options.setHeadless(true);
options.setProfile(profile);
WebDriver driver =  new FirefoxDriver(options);
driver.get("https://www.google.com");

参考文献

您可以在以下位置找到几个相关的详细讨论: