Java 创建Firefox配置文件并关闭木偶

Java 创建Firefox配置文件并关闭木偶,java,selenium,selenium-webdriver,Java,Selenium,Selenium Webdriver,我来自Ruby背景,我知道如何在Ruby Selenium绑定中做到这一点,但我不知道如何在Java Selenium绑定中做到这一点 我有这个代码来创建Firefox配置文件 FirefoxProfile firefoxProfile = new FirefoxProfile(pathToProfile); WebDriver driver=new FirefoxDriver(firefoxProfile); 它在selenium 2.53中工作,但在最近的selenium bindin

我来自Ruby背景,我知道如何在Ruby Selenium绑定中做到这一点,但我不知道如何在Java Selenium绑定中做到这一点

我有这个代码来创建Firefox配置文件

 FirefoxProfile firefoxProfile = new FirefoxProfile(pathToProfile);
 WebDriver driver=new FirefoxDriver(firefoxProfile);
它在selenium 2.53中工作,但在最近的selenium binding 3.11.0中出现了错误,有人能告诉我替代方案是什么吗

我还想关闭木偶连接到传统的Firefox驱动程序,我可以用以下代码实现

DesiredCapabilities capabilities = DesiredCapabilities.firefox();
capabilities.setCapability("marionette", false);
WebDriver driver=new FirefoxDriver(capabilities);
但是如果我使用上面的行,那么它给出的FirefoxDriver是不推荐的。谁能指导我如何创建个人资料以及如何关闭木偶

FirefoxDriver(desiredCapabilities)
不推荐使用

备选方法是使用选项:

FirefoxOptions foptions =  new FirefoxOptions(capabilities);
WebDriver driver=new FirefoxDriver(foptions);  
更新:[按顺序]

FirefoxOptions foptions =  new FirefoxOptions();
FirefoxProfile firefoxProfile = new FirefoxProfile(pathToProfile);
foptions.setProfile(firefoxProfile);
foptions.setCapability("marionette", false);
foptions.setBinary("C:\\Program Files\\Mozilla Firefox 52\\firefox.exe"); 
WebDriver driver = new FirefoxDriver(foptions);

要使用现有的Firefox配置文件执行测试,首先必须按照中的说明手动创建Firefox配置文件。现在,您必须将Firefox配置文件传递给FirefoxOptions类对象。此外,您还可以使用传统的Firefox浏览器 您必须通过
DesiredCapabilities
类对象将Marionate设置为
false
,您需要将该类对象
合并到FirefoxOptions类对象中,如下所示:

System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
ProfilesIni profile = new ProfilesIni();
FirefoxProfile testprofile = profile.getProfile("debanjan");
FirefoxOptions options = new FirefoxOptions();
options.setProfile(testprofile);
DesiredCapabilities dc = new DesiredCapabilities();
dc.setCapability("marionatte", false);
options.merge(dc);
WebDriver driver = new FirefoxDriver(options);
driver.get("https://www.google.com");

更新 我不确定您的用例以及为什么要使用旧式Firefox驱动程序。但根据GitHub的讨论,jimevans明确提到:

旧版Firefox驱动程序无法与Firefox 53或更高版本一起使用。您可能会启动浏览器,但语言绑定将完全无法与驱动程序通信(因为Firefox将拒绝加载传统Firefox驱动程序的浏览器扩展)

@barancev还提到:

绑定不应在W3C兼容的负载部分的“功能”块中传递OSS功能。它们仅允许在“desiredCapabilities”块中使用。也许,Mozilla在发布频道中破坏了Firefox48中的Selenium兼容性,但在esr频道的版本52中恢复了它。这是出乎意料的,但这是真的


这一切都取决于你采取知情的否定。

现在如何通过profile参数?第一个问题,如何将两者结合起来?需要将Firefox配置文件和选项(您的示例变量)与选项一起传递给您并设置功能!你能帮我订线吗?你想按哪种顺序?如果你愿意考虑其他问题,请告诉我。第一行不是必须的,对吗?因为我们使用的是旧版驱动程序?但如果必须使用旧版驱动程序,则不需要第一行,嗯?@Rajagopalan旧版驱动程序不需要第一行,但在没有GeckoDriver的情况下,我不确定旧版驱动程序是否与Selenium 3.11.0和函数兼容,例如
merge()
。请更新我的状态。我一直在使用WATIR,它正在使用最新的Ruby Selenium绑定,对我来说效果很好。@Rajagopalan不会对
WATIR
实现发表评论。我添加了一个更新,其中有来自Selenium工厂的Selenium提交者的评论。让我了解最新状态。