org.openqa.selenium.SessionNotCreatedException:通过selenium v3.11.0启动Firefox v37时,找不到匹配的功能集

org.openqa.selenium.SessionNotCreatedException:通过selenium v3.11.0启动Firefox v37时,找不到匹配的功能集,selenium,firefox,selenium-webdriver,webdriver,geckodriver,Selenium,Firefox,Selenium Webdriver,Webdriver,Geckodriver,我试图在Firefox中运行一个网站,但我得到错误“驱动程序可执行文件的路径必须由webdriver.gecko.driver系统属性设置”;我已经正确设置了路径,仍然不知道问题出在哪里。这是我的密码: if (browsers.equalsIgnoreCase("Firefox")) { String driverPath = System.getProperty("user.dir") + "\\src/test/java\\drivers\\geckodriver.exe

我试图在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   
配置失败:@BeforeClass启动浏览器
org.openqa.selenium.SessionNotCreatedException:找不到匹配的功能集
构建信息:版本:“3.8.0”,修订版:“924c4067df”,时间:“2017-11-30T11:36:59.109Z”
系统信息:主机:'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.version:FirefoxDriver
远程堆栈跟踪:
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(未知源)
位于sun.reflect.delegatingConstructor或AccessorImpl.newInstance(未知源)
位于java.lang.reflect.Constructor.newInstance(未知源)
位于org.openqa.selenium.remote.W3CHandshakeResponse.lambda$new$0(W3CHandshakeResponse.java:57)
位于org.openqa.selenium.remote.W3CHandshakeResponse.lambda$getResponseFunction$2(W3CHandshakeResponse.java:104)
位于org.openqa.selenium.remote.ProtocolHandshake.lambda$createSession$0(ProtocolHandshake.java:123)
org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:126)
位于org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:73)
位于org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:142)
位于org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83)
位于org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:601)
位于org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:219)
位于org.openqa.selenium.remote.RemoteWebDriver(RemoteWebDriver.java:142)
位于org.openqa.selenium.firefox.FirefoxDriver.(FirefoxDriver.java:120)
在Utility.UtilityMethods.openBrowser(UtilityMethods.java:26)
在TestCases.LoginTestCase.launchBrowser(LoginTestCase.java:35)中
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(未知源)
在sun.reflect.DelegatingMethodAccessorImpl.invoke处(未知源)
位于java.lang.reflect.Method.invoke(未知源)
位于org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:124)
位于org.testng.internal.MethodInvocationHelper.invokeMethodConsideringTimeout(MethodInvocationHelper.java:59)
位于org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:455)
位于org.testng.internal.Invoker.invokeConfigulations(Invoker.java:222)
位于org.testng.internal.Invoker.invokeConfigulations(Invoker.java:142)
位于org.testng.internal.TestMethodWorker.invokeBeforeClassMethods(TestMethodWorker.java:168)
位于org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:105)
位于org.testng.TestRunner.privateRun(TestRunner.java:648)
位于org.testng.TestRunner.run(TestRunner.java:505)
位于org.testng.SuiteRunner.runTest(SuiteRunner.java:455)
在org.testng.SuiteRunner.runsequential上(SuiteRunner.java:450)
位于org.testng.SuiteRunner.privateRun(SuiteRunner.java:415)
运行(SuiteRunner.java:364)
位于org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
位于org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:84)
在org.testng.testng.runSuitesSequentially上(testng.java:1208)
位于org.testng.testng.runSuitesLocally(testng.java:1137)
位于org.testng.testng.runSuites(testng.java:1049)
位于org.testng.testng.run(testng.java:1017)
位于org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:114)
位于org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
位于org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)
已跳过配置:@AfterClass.com浏览器
跳过:注册

这是如何设置系统属性的:

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

您使用的是user.dir这基本上意味着:当前工作目录

下面是使用selenium初始化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();

如果您对此有任何疑问,请告诉我。

刚刚更新了您的代码。对于最新的firefox驱动程序,您必须在
setProperty
和用户
webdriver.gecko.driver
时设置驱动程序路径

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

让我知道。

为了保持简单,当您使用Selenium Client v3.11.0和Firefox v37时,您需要从下载最新的GeckoDriver并将其保存在系统中的任何位置。接下来在
System.setProperty()中
line传递键webdriver.gecko.driver以及作为GeckoDriver绝对路径的值,最后通过DesiredCapabilities类将capabilityMarionate设置为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及更高版本。要摆脱此约束,您可以降级到以下任一版本:

  • 壁虎河v0.17.0
  • 壁虎河v0.16.1

我有这个错误已经2天了,我的解决方案是Set.Platform、put Platform.ANY或Platform.Windows,因为Platform.W
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
}