javaseleniumgeckodriverdesiredcapabilitiesmutablecapabilities

How to pass the capabilities and options into Firefoxdriver using Selenium through Java


I have this:

System.setProperty("webdriver.gecko.driver", "gecko/linux/geckodriver");

FirefoxProfile profile = new FirefoxProfile();
profile.setPreference("network.proxy.no_proxies_on", "localhost");
profile.setPreference("javascript.enabled", true);

DesiredCapabilities capabilities = DesiredCapabilities.firefox();
capabilities.setCapability("marionette", true);
capabilities.setCapability(FirefoxDriver.PROFILE, profile);

FirefoxOptions options = new FirefoxOptions();
options.setLogLevel(Level.FINEST);
options.addPreference("browser.link.open_newwindow", 3);
options.addPreference("browser.link.open_newwindow.restriction", 0);

Now I have two different constructors:

WebDriver driver = new FirefoxDriver(capabilities);

and

WebDriver driver = new FirefoxDriver(options);

How can I pass them both (capabilities and options) into the driver? By the way, the IDE is telling me that FirefoxDriver(capabilities) is deprecated.


Solution

  • You were almost there. You need to use the method merge() from MutableCapabilities Class to merge the DesiredCapabilities type of object into FirefoxOptions type object and initiate the WebDriver and WebClient instance by passing the FirefoxOptions object as follows :

    System.setProperty("webdriver.gecko.driver", "gecko/linux/geckodriver");
    
    FirefoxProfile profile = new FirefoxProfile();
    profile.setPreference("network.proxy.no_proxies_on", "localhost");
    profile.setPreference("javascript.enabled", true);
    
    DesiredCapabilities capabilities = DesiredCapabilities.firefox();
    capabilities.setCapability("marionette", true);
    capabilities.setCapability(FirefoxDriver.PROFILE, profile);
    
    FirefoxOptions options = new FirefoxOptions();
    options.merge(capabilities);
    options.setLogLevel(Level.FINEST);
    options.addPreference("browser.link.open_newwindow", 3);
    options.addPreference("browser.link.open_newwindow.restriction", 0);
    
    WebDriver driver = new FirefoxDriver(options);
    

    References

    You can find a couple of relevant discussions in: