Selenium Grid远程测试报错:SessionNotCreatedException(GeckoDriverService)
解决Selenium Grid远程测试的SessionNotCreatedException问题
我来帮你定位这个问题——你遇到的SessionNotCreatedException,核心原因是本地代码的GeckoDriver和Firefox配置无法作用于远程节点,结合你的代码和报错信息,给你几个针对性的修复方案:
1. 远程节点必须单独配置GeckoDriver
你在本地代码里设置的System.setProperty("webdriver.gecko.driver", "...")只对本地运行的Driver生效,远程节点上需要在启动时指定GeckoDriver路径:
- 启动远程节点时,通过JVM参数指定GeckoDriver位置(Windows环境示例):
java -Dwebdriver.gecko.driver=C:\geckodriver-v0.19.1-win64\geckodriver.exe -jar selenium-server-standalone-3.8.1.jar -role node -hub http://[HubIP]:4444/grid/register - 额外注意:GeckoDriver版本要和远程节点的Firefox版本匹配——你用的GeckoDriver 0.19.1对应Firefox 55~57版本,如果远程节点的Firefox版本不在这个范围,直接换对应版本的GeckoDriver即可。
2. 移除本地代码中的Firefox二进制路径配置
你代码里设置的FirefoxDriver.BINARY是本地Firefox的路径,远程节点的Firefox路径大概率和本地不同,这个配置会干扰远程会话创建:
- 删掉这行代码:
capabilities.setCapability(FirefoxDriver.BINARY,new File("C:\\Program Files\\Mozilla Firefox\\firefox.exe").getAbsolutePath()); - 如果远程节点的Firefox不在系统默认路径,启动节点时通过JVM参数指定:
java -Dwebdriver.firefox.bin=C:\Program Files\Mozilla Firefox\firefox.exe -Dwebdriver.gecko.driver=C:\geckodriver-v0.19.1-win64\geckodriver.exe -jar selenium-server-standalone-3.8.1.jar -role node
3. 确保Selenium版本完全一致
本地客户端用的是Selenium 3.8.1,远程节点的selenium-server-standalonejar包必须是完全相同的版本,版本不匹配会导致会话协商失败。
快速验证步骤
- 先在远程节点本地直接运行GeckoDriver测试,确认Firefox能正常启动,排除节点本身的环境问题;
- 检查远程节点是否成功注册到Grid Hub,通过Hub的控制台页面查看节点状态;
- 启动节点时添加日志参数,查看详细报错信息,方便定位:
java -Dwebdriver.gecko.driver=C:\geckodriver-v0.19.1-win64\geckodriver.exe -jar selenium-server-standalone-3.8.1.jar -role node -hub http://[HubIP]:4444/grid/register -log node_debug.log
修改后的简化测试代码:
public static void main(String[] args) throws MalformedURLException { String nodeURL = "http://10.132.48.16:5566/wd/hub"; DesiredCapabilities capabilities = DesiredCapabilities.firefox(); WebDriver driver = new RemoteWebDriver(new URL(nodeURL), capabilities ); driver.get("http://google.com"); System.out.println(driver.getTitle()); driver.quit(); // 记得关闭会话,避免资源泄漏 }
内容的提问来源于stack exchange,提问作者Dhrumil Pathak
相关产品推荐
相关产品推荐

