org.openqa.selenium.SessionNotCreatedException: Unable to find a matching set of capabilities while initiating Firefox v37 through Selenium v3.11.0

17,099

Solution 1

To keep things simple, as you are using Selenium Client v3.11.0 and Firefox v37 you need to download the latest GeckoDriver from mozilla/geckodriver and save it any where within your system. Next within the System.setProperty() line pass the Key webdriver.gecko.driver along with the Value as the absolute path of the GeckoDriver and finally through DesiredCapabilities class set the capability marionatte to false and merge into an instance of FirefoxOptions instance to initiate the Firefox browser as follows :

System.setProperty("webdriver.gecko.driver", "C:/path/to/geckodriver.exe");
DesiredCapabilities dc = new DesiredCapabilities();
dc.setCapability("marionatte", false);
FirefoxOptions opt = new FirefoxOptions();
opt.merge(dc);
FirefoxDriver driver =  new FirefoxDriver(opt);
driver.get("https://stackoverflow.com");
System.out.println("Application opened");
System.out.println("Page Title is : "+driver.getTitle());
driver.quit();

Update

As per your comment update you are using GeckoDriver v0.20.1.

But if you look back at the Release Notes of GeckoDriver v0.18.0 it clearly mentions :

geckodriver now recommends Firefox 53 and greater

So using GeckoDriver v0.18.0 and above you have to mandatory use Firefox 53 and greater. To get rid of this constraint you can downgrade either to any of these versions :

  • GeckoDriver v0.17.0
  • GeckoDriver v0.16.1

Solution 2

This is how system property is set:

System.setProperty("webdriver.gecko.driver", "C:\\...\\geckodriver.exe");

Solution 3

I had this error for 2 days, the solution for me was in Set.Platform, put Platform.ANY or Platform.Windows because Platform.WIN10 not worked, marionette wasn't necessary.

public class Main { public static RemoteWebDriver driver;

public static void main(String[] args) throws MalformedURLException {
    System.setProperty("webdriver.gecko.driver", "D:/Lib/geckodriver.exe");
    DesiredCapabilities desiredCapabilities = new 
                                        DesiredCapabilities().firefox();
    desiredCapabilities.setPlatform(Platform.ANY);
    desiredCapabilities.setBrowserName("firefox");

    driver = new RemoteWebDriver(new URL("http://172.20.19.182:5557/wd/hub"), 
                                                desiredCapabilities);
    driver.navigate().to("http://www.google.com");
    driver.findElementByName("q").sendKeys("execute automation");
    driver.findElementByName("q").sendKeys(Keys.ENTER);
    driver.close();
    // write your code here
}
Share:
17,099
Rohn Kerry
Author by

Rohn Kerry

I am a curious software tester, who is always willing to find bugs in softwares and loves different techniques to test the softwares.

Updated on June 06, 2022

Comments

  • Rohn Kerry
    Rohn Kerry almost 2 years

    I am trying to run test a run a website in Firefox, but I am getting error "The path to the driver executable must be set by the webdriver.gecko.driver system property;" I have set the path correctly, still don't know where the problem is. Here is my code:

    if (browsers.equalsIgnoreCase("Firefox")) 
    {
            String driverPath = System.getProperty("user.dir") + "\\src/test/java\\drivers\\geckodriver.exe";
            System.setProperty("webdriver.firefox.marionette", "false");
            driver = new FirefoxDriver();
            driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
        } else if (browsers.equalsIgnoreCase("Chrome")) {
            // String driverPath = System.getProperty("user.dir") +
            // "\\src\\Drivers\\chromedriver";
            // System.setProperty("webdriver.chrome.driver", driverPath);
            System.setProperty("webdriver.chrome.driver", "D:\\chromedriver.exe");
            driver = new ChromeDriver();
            driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
    
        }
    

    Here is the Failure Trace of my code:

    FAILED CONFIGURATION: @BeforeClass launchBrowser
    org.openqa.selenium.SessionNotCreatedException: Unable to find a matching set of capabilities
    Build info: version: '3.8.0', revision: '924c4067df', time: '2017-11-30T11:36:59.109Z'
    System info: host: 'DSCHD-PC-180', ip: '192.168.6.122', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_161'
    Driver info: driver.version: FirefoxDriver
    remote stacktrace: 
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
        at java.lang.reflect.Constructor.newInstance(Unknown Source)
        at org.openqa.selenium.remote.W3CHandshakeResponse.lambda$new$0(W3CHandshakeResponse.java:57)
        at org.openqa.selenium.remote.W3CHandshakeResponse.lambda$getResponseFunction$2(W3CHandshakeResponse.java:104)
        at org.openqa.selenium.remote.ProtocolHandshake.lambda$createSession$0(ProtocolHandshake.java:123)
        org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:126)
        at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:73)
        at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:142)
        at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83)
        at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:601)
        at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:219)
        at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:142)
        at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:120)
        at Utility.UtilityMethods.openBrowser(UtilityMethods.java:26)
        at TestCases.LoginTestCase.launchBrowser(LoginTestCase.java:35)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:124)
        at org.testng.internal.MethodInvocationHelper.invokeMethodConsideringTimeout(MethodInvocationHelper.java:59)
        at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:455)
        at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:222)
        at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:142)
        at org.testng.internal.TestMethodWorker.invokeBeforeClassMethods(TestMethodWorker.java:168)
        at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:105)
        at org.testng.TestRunner.privateRun(TestRunner.java:648)
        at org.testng.TestRunner.run(TestRunner.java:505)
        at org.testng.SuiteRunner.runTest(SuiteRunner.java:455)
        at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:450)
        at org.testng.SuiteRunner.privateRun(SuiteRunner.java:415)
        at org.testng.SuiteRunner.run(SuiteRunner.java:364)
        at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
        at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:84)
        at org.testng.TestNG.runSuitesSequentially(TestNG.java:1208)
        at org.testng.TestNG.runSuitesLocally(TestNG.java:1137)
        at org.testng.TestNG.runSuites(TestNG.java:1049)
        at org.testng.TestNG.run(TestNG.java:1017)
        at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:114)
        at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
        at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)
    
    SKIPPED CONFIGURATION: @AfterClass quitBrowser
    SKIPPED: registration   
    
  • Rohn Kerry
    Rohn Kerry almost 6 years
    That is correct but the issue is, I am using firefox version 37, So I have to put marionette= false. Now we can send only two string values in .setProperty.So where I can put the path to the geckodriver?
  • cruisepandey
    cruisepandey almost 6 years
    Which version of selenium you are using with FF37?
  • Rohn Kerry
    Rohn Kerry almost 6 years
    Like can we do that- System.setProperty("webdriver.firefox.marionette=false", "driverPath"); ?
  • Rohn Kerry
    Rohn Kerry almost 6 years
    I am using selenium 3.11.0
  • Rohn Kerry
    Rohn Kerry almost 6 years
    But the problem is I am not using latest firefox version, I am using ff version 37. That is why I have set the marionette= false, for compatibility.
  • cruisepandey
    cruisepandey almost 6 years
    @RohnKerry : I'm not sure about this. Give me some time, if I will find anything, I will update you !
  • Rohn Kerry
    Rohn Kerry almost 6 years
    Sure cruisepandey, I appreciate your help and efforts to help me resolve my issue.
  • cruisepandey
    cruisepandey almost 6 years
    No issue @RohnKerry. Cheers !
  • Rabia Asif
    Rabia Asif almost 6 years
    @RohnKerry why don't you try adding set property twice? One for marinette and other for driver path
  • BhavinD.
    BhavinD. almost 6 years
    @RohnKerry, the latest Firefox version is 59 and you don't need to set marionette for that if you are using ff version 37 then you have to use compatible firefoxdriver.exe
  • Rohn Kerry
    Rohn Kerry almost 6 years
    Still no success.
  • Rohn Kerry
    Rohn Kerry almost 6 years
    So you mean to say that I have to download a compatible Firefox Webdriver for ff version 37?
  • BhavinD.
    BhavinD. almost 6 years
    No need to download. you can use latest FireFox geckodriver and you can set marionette=false using DesiredCapabilities class.
  • Rohn Kerry
    Rohn Kerry almost 6 years
    Yes I have already did that but the problem is you can pass two values to the .setProperty() and I have to also give path to geckodriver in that.
  • Rohn Kerry
    Rohn Kerry almost 6 years
    I have also tried the code : String driverPath = System.getProperty("user.dir") + "D:\\Workspace\\YourLogo\\src\\test\\java\\drivers\\geckodri‌​ver.exe"; System.setProperty("webdriver.firefox.driver", "driverPath"); DesiredCapabilities capabilities = DesiredCapabilities.firefox(); capabilities.setCapability("marionette", false); driver = new FirefoxDriver();
  • BhavinD.
    BhavinD. almost 6 years
    @RohnKerry, Please look my updated answer. Added DesiredCapabilities and FirefoxOptions.
  • Rohn Kerry
    Rohn Kerry almost 6 years
    May I know what is this for?- FirefoxOptions options = new FirefoxOptions(); FirefoxDriver driver = new FirefoxDriver(options);
  • Rohn Kerry
    Rohn Kerry almost 6 years
    This code is giving me error " Unable to find a matching set of capabilities", That mean it did not have set the capability marionatte to "false"
  • Rohn Kerry
    Rohn Kerry almost 6 years
    Just to update you , I have done some changes- dc.setCapability("marionatte", false); FirefoxDriver driver = new FirefoxDriver(dc); ....This have initiated the Firefox browser but now I am getting the error "connection refused", Why is this happening?
  • undetected Selenium
    undetected Selenium almost 6 years
    @RohnKerry Update the question with the complete error stack trace for further analysis please
  • Rohn Kerry
    Rohn Kerry almost 6 years
    I have edited and added the error stack trace of my code.
  • Rohn Kerry
    Rohn Kerry almost 6 years
    I have found the solution for that. The code is : System.setProperty("webdriver.firefox.marionette","D:\\gecko‌​driver.exe");
  • undetected Selenium
    undetected Selenium almost 6 years
    Wait, that's not the right solution, gimme some time to get back to you. Update me your GeckoDriver please.
  • Rohn Kerry
    Rohn Kerry almost 6 years
    My geckodriver version is- geckodriver-v0.20.1
  • Rohn Kerry
    Rohn Kerry almost 6 years
    the solution I pasted in comments is working fine for me, So I guess it is the right solution.
  • undetected Selenium
    undetected Selenium almost 6 years
    @RohnKerry Checkout my answer update and let me know the status