使用Selenium Grid跨VM执行脚本遇SessionNotCreatedException错误求助
我来帮你排查这个Selenium自动化脚本的问题,你遇到的SessionNotCreatedException本质是Selenium Grid节点没法成功启动ChromeDriver服务,结合你的代码和环境信息,我梳理了几个核心原因和对应的解决办法:
错误原因分析与解决方法
可能的原因1:节点机器未正确配置ChromeDriver
你用的是RemoteWebDriver,意味着浏览器是在目标VM(10.132.48.16)上启动的,这台机器必须安装对应版本的ChromeDriver,而且要和Chrome浏览器版本严格匹配(版本不匹配是这类问题最常见的诱因)。
- 解决步骤:
- 在目标VM上打开Chrome,通过「设置→关于Chrome」查看浏览器版本号。
- 下载与该版本完全匹配的ChromeDriver(注意选择适配Windows 10 64位的版本)。
- 把ChromeDriver放到系统PATH目录下,或者在启动Selenium Grid节点时通过参数指定路径:
java -Dwebdriver.chrome.driver="C:\your-chromedriver-path\chromedriver.exe" -jar selenium-server-standalone-3.8.1.jar -role node -hub http://[你的Hub地址]:4444/grid/register
可能的原因2:Selenium版本不兼容
你的客户端代码用的是Selenium 3.8.1,如果目标VM上的Selenium Grid节点使用的是不同版本的selenium-server-standalone包,就会出现服务创建失败的兼容性问题。
- 解决步骤:
- 确保Hub和节点都使用3.8.1版本的
selenium-server-standalone.jar,不要混用不同版本的Selenium组件。
- 确保Hub和节点都使用3.8.1版本的
可能的原因3:目标VM的Chrome浏览器或权限问题
如果目标VM上的Chrome浏览器损坏,或者启动Selenium节点的用户没有桌面交互权限(Windows系统下Chrome需要桌面环境才能运行,服务账户默认没有这个权限),也会导致ChromeDriver服务启动失败。
- 解决步骤:
- 在目标VM上手动打开Chrome,确认能正常运行。
- 如果是通过Windows服务启动Selenium节点,进入服务属性,勾选「允许服务与桌面交互」选项;或者用有桌面权限的普通用户启动节点进程。
代码优化建议(非核心问题,但更规范)
你的代码用了DesiredCapabilities,在Selenium 3.x中更推荐使用ChromeOptions来配置浏览器参数,同时别忘了退出驱动避免资源泄漏:
public static void main(String[] args) throws MalformedURLException { ChromeOptions options = new ChromeOptions(); options.setPlatform(Platform.WIN10); WebDriver driver = new RemoteWebDriver(new URL("http://10.132.48.16:5566/wd/hub"), options); try { driver.get("http://google.com"); System.out.println(driver.getTitle()); } finally { driver.quit(); // 确保驱动退出,释放资源 } }
内容的提问来源于stack exchange,提问作者Dhrumil Pathak
相关产品推荐
相关产品推荐

