使用Selenium 3.8.1+GeckoDriver启动Firefox失败,报SessionNotCreatedException求助
解决Selenium 3.8.1启动Firefox时的SessionNotCreatedException问题
嗨,我来帮你搞定这个启动报错的问题!你遇到的org.openqa.selenium.SessionNotCreatedException: 无法找到匹配的功能集,通常是版本不兼容或者代码配置有小疏漏导致的,咱们一步步来排查解决:
1. 优先检查版本兼容性
Selenium 3.8.1是比较老的版本,它对GeckoDriver和Firefox的版本有严格要求:
- 推荐搭配GeckoDriver v0.19.1(对应Selenium 3.8.x系列)
- Firefox版本建议在57.x ~ 60.x之间
如果你的GeckoDriver或Firefox版本太新/太旧,都会出现功能集不匹配的报错,先确认三者版本对应上。
2. 修正代码里的拼写错误
看你的代码里写了dc.setCapability("marionnete", true);——这里有个明显的拼写错误!正确的参数名是marionette(少了一个t),这个错误会导致Selenium无法正确启用Marionette驱动,直接引发匹配失败。
3. 修正GeckoDriver路径的转义问题
Java里的文件路径用单反斜杠会被识别为转义字符,所以你的路径C:\Users\abc\Downloads\geckodriver.exe会解析错误,要改成:
- 双反斜杠:
C:\\Users\\abc\\Downloads\\geckodriver.exe - 或者正斜杠:
C:/Users/abc/Downloads/geckodriver.exe
修正后的完整代码示例
方式一:修正DesiredCapabilities写法
public class LoginTest { @SuppressWarnings("deprecation") @Test public static void logintest() { // 修正路径转义 System.setProperty("webdriver.gecko.driver", "C:\\Users\\abc\\Downloads\\geckodriver.exe"); DesiredCapabilities dc = DesiredCapabilities.firefox(); // 修正marionette拼写 dc.setCapability("marionette", true); constants.driver = new FirefoxDriver(dc); constants.driver.get("https://www.amazon.in"); // 后续的超时设置代码... } }
方式二:用FirefoxOptions替代过时的DesiredCapabilities
DesiredCapabilities在Selenium 3.x后期已经逐渐被标记为过时,更推荐用FirefoxOptions来配置:
public class LoginTest { @Test public static void logintest() { System.setProperty("webdriver.gecko.driver", "C:\\Users\\abc\\Downloads\\geckodriver.exe"); FirefoxOptions options = new FirefoxOptions(); options.setMarionette(true); // 直接启用Marionette驱动 constants.driver = new FirefoxDriver(options); constants.driver.get("https://www.amazon.in"); // 后续代码... } }
按上面的步骤调整后,应该就能正常启动Firefox了!
内容的提问来源于stack exchange,提问作者Ab123
相关产品推荐
相关产品推荐

