org.openqa.selenium.SessionNotCreatedException: невозможно найти соответствующий набор возможностей при запуске Firefox v37 через Selenium v3.11.0

Я пытаюсь запустить тестовый запуск веб-сайта в Firefox, но получаю сообщение об ошибке «Путь к исполняемому файлу драйвера должен быть установлен системным свойством webdriver.gecko.driver»; Я правильно указал путь, но до сих пор не знаю, в чем проблема. Вот мой код:

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);

    }

Вот трассировка сбоя моего кода:

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   

person Rohn Kerry    schedule 12.04.2018    source источник
comment
Это потенциальная проблема дублирования. См. следующее: stackoverflow.com/questions/38676719/   -  person Larry    schedule 12.04.2018


Ответы (5)


Для простоты, поскольку вы используете Selenium Client v3.11.0 и Firefox v37, вам необходимо загрузить последнюю версию GeckoDriver с mozilla/geckodriver и сохраните его в любом месте вашей системы. Затем в строке System.setProperty() передайте Key webdriver.gecko.driver вместе со значением Value в качестве абсолютного пути к GeckoDriver и, наконец, через класс DesiredCapabilities задайте для возможности marionette значение false и объединитесь с экземпляром FirefoxOptions для запуска браузера Firefox следующим образом:

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();

Обновлять

Согласно обновлению вашего комментария, вы используете GeckoDriver v0.20.1.

Но если вы посмотрите на примечания к выпуску GeckoDriver v0.18.0, там ясно сказано:

geckodriver now recommends Firefox 53 and greater

Таким образом, используя GeckoDriver v0.18.0 и выше, вы должны обязательно использовать Firefox 53 и выше. Чтобы избавиться от этого ограничения, вы можете перейти на любую из этих версий:

  • GeckoDriver v0.17.0
  • GeckoDriver v0.16.1
person DebanjanB    schedule 12.04.2018
comment
Этот код дает мне ошибку Невозможно найти соответствующий набор возможностей. Это означает, что он не установил для возможности марионетки значение false - person Rohn Kerry; 12.04.2018
comment
Просто чтобы сообщить вам, я внес некоторые изменения: dc.setCapability(marionette, false); Драйвер FirefoxDriver = новый FirefoxDriver(dc); .... Это инициировало браузер Firefox, но теперь я получаю сообщение об ошибке: «Отказано в соединении». Почему это происходит? - person Rohn Kerry; 12.04.2018
comment
@RohnKerry Обновите вопрос, указав полную трассировку стека ошибок для дальнейшего анализа, пожалуйста. - person DebanjanB; 12.04.2018
comment
Я отредактировал и добавил трассировку стека ошибок моего кода. - person Rohn Kerry; 12.04.2018
comment
Я нашел решение для этого. Код: System.setProperty(webdriver.firefox.marionette,D:\\geckodriver.exe); - person Rohn Kerry; 12.04.2018
comment
Подождите, это не правильное решение, дайте мне немного времени, чтобы ответить вам. Обновите мне свой GeckoDriver, пожалуйста. - person DebanjanB; 12.04.2018
comment
Моя версия geckodriver — geckodriver-v0.20.1. - person Rohn Kerry; 13.04.2018
comment
решение, которое я вставил в комментариях, отлично работает для меня, поэтому я думаю, что это правильное решение. - person Rohn Kerry; 16.04.2018
comment
@RohnKerry Проверьте мой ответ и дайте мне знать о статусе - person DebanjanB; 16.04.2018

Вот как задается системное свойство:

System.setProperty("webdriver.gecko.driver", "C:\\...\\geckodriver.exe");
person Rabia Asif    schedule 12.04.2018

У меня была эта ошибка 2 дня, решение для меня было в Set.Platform, ставь Platform.ANY или Platform.Windows, т.к. Platform.WIN10 не работала, марионетка была не нужна.

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
}
person Rose8525    schedule 28.05.2020
comment
Вы спасли мой день, спасибо - person Atul Kumar Sharma; 05.02.2021

вы используете user.dir, что в основном означает: текущий рабочий каталог

Вот код, который позволяет вам инициализировать браузер Firefox с помощью селена.

public static void main(String[] args) {


            System.setProperty("webdriver.gecko.driver", "C:\\your\\gecko\\driver\\path\\geckodriver.exe");
            driver = new firefoxDriver();

Вот и все ! вы можете использовать драйвер Firefox для выполнения нескольких операций, таких как:

1.  driver.get(String args0);
2.  driver.getCurrentUrl();
3.  driver.getPageSource();
4.  driver.getTitle();
5.  driver.findElememt(By args0);
6.  driver.findElements(By args0);
7.  driver.naviagate();
8.  driver.manage();
9.  driver.close();
10. driver.quit();
11. driver.switchTo();
12. driver.getWindowHandle();
13. driver.getWindowHandles();

Пожалуйста, дайте мне знать, если у вас есть какие-либо опасения, связанные с этим.

person cruisepandey    schedule 12.04.2018
comment
Это правильно, но проблема в том, что я использую Firefox версии 37, поэтому мне нужно поставить marionette=false. Теперь мы можем отправить только два строковых значения в .setProperty. Итак, где я могу указать путь к geckodriver? - person Rohn Kerry; 12.04.2018
comment
Какую версию селена вы используете с FF37? - person cruisepandey; 12.04.2018
comment
Например, мы можем сделать это: System.setProperty(webdriver.firefox.marionette=false, driverPath); ? - person Rohn Kerry; 12.04.2018
comment
Я использую селен 3.11.0 - person Rohn Kerry; 12.04.2018
comment
@RohnKerry: я не уверен в этом. Дайте мне немного времени, если я найду что-нибудь, я сообщу вам! - person cruisepandey; 12.04.2018
comment
Конечно, круизпандей, я ценю вашу помощь и усилия, чтобы помочь мне решить мою проблему. - person Rohn Kerry; 12.04.2018
comment
Нет проблем @RohnKerry. Ваше здоровье ! - person cruisepandey; 12.04.2018
comment
@RohnKerry, почему бы вам не попробовать добавить заданное свойство дважды? Один для Маринетт и другой для пути водителя - person Rabia Asif; 12.04.2018
comment
До сих пор нет успеха. - person Rohn Kerry; 12.04.2018

Только что обновил свой код. Вам нужно будет установить путь к драйверу, пока setProperty и пользователь webdriver.gecko.driver для последней версии драйвера Firefox.

    if (browsers.equalsIgnoreCase("Firefox")) {
            String driverPath = System.getProperty("user.dir") + "\\src\\test\\java\\drivers\\geckodriver.exe"; 
            System.setProperty("webdriver.firefox.driver", "driverPath"); 
            DesiredCapabilities capabilities = new DesiredCapabilities();
            capabilities.setCapability("marionette", false); 
            FirefoxOptions options = new FirefoxOptions(); 
            options.merge(capabilities);
            FirefoxDriver driver = new FirefoxDriver(options);
            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);
        }

Дай мне знать.

person BhavinD.    schedule 12.04.2018
comment
Но проблема в том, что я не использую последнюю версию firefox, я использую ff версии 37. Вот почему я установил marionette=false для совместимости. - person Rohn Kerry; 12.04.2018
comment
@RohnKerry, последняя версия Firefox — 59, и вам не нужно устанавливать для этого марионетку, если вы используете версию ff 37, тогда вам нужно использовать совместимую firefoxdriver.exe - person BhavinD.; 12.04.2018
comment
То есть вы хотите сказать, что мне нужно загрузить совместимый веб-драйвер Firefox для ff версии 37? - person Rohn Kerry; 12.04.2018
comment
Нет необходимости скачивать. вы можете использовать последний geckodriver FireFox, и вы можете установить marionette=false, используя класс DesiredCapabilities. - person BhavinD.; 12.04.2018
comment
Да, я уже сделал это, но проблема в том, что вы можете передать два значения в .setProperty(), и я также должен указать в этом путь к geckodriver. - person Rohn Kerry; 12.04.2018
comment
Я также пробовал код: String driverPath = System.getProperty(user.dir) + D:\\Workspace\\YourLogo\\src\\test\\java\\drivers\\geckodriver.exe; System.setProperty(webdriver.firefox.driver, путь к драйверу); Возможности DesiredCapabilities = DesiredCapabilities.firefox(); Возможности.setCapability (марионетка, ложь); драйвер = новый FirefoxDriver(); - person Rohn Kerry; 12.04.2018
comment
@RohnKerry, посмотрите мой обновленный ответ. Добавлены DesiredCapabilities и FirefoxOptions. - person BhavinD.; 12.04.2018
comment
Могу я узнать, для чего это? - FirefoxOptions options = new FirefoxOptions(); Драйвер FirefoxDriver = новый FirefoxDriver (параметры); - person Rohn Kerry; 12.04.2018