使用Selenium Grid运行C#自动化测试时遇会话转发错误求助
解决Selenium Grid运行C#自动化测试时的会话转发错误
看起来你遇到的是Selenium Grid中节点匹配失败的问题,这个错误本质是Hub找不到符合你请求Capabilities的节点。下面是几个针对性的排查和解决步骤:
1. 检查节点注册的配置与参数
首先,确保你启动Grid节点时,正确指定了ChromeDriver路径,并且注册的Capabilities和测试请求一致。
- 启动节点的命令要包含ChromeDriver的绝对路径(注意路径里有空格的话,要用引号包裹):
java -jar selenium-server-standalone.jar -role node -hub http://<你的Hub地址>:4444/grid/register -Dwebdriver.chrome.driver="F:\Selenium Projects\C#\Grid practice\automation\chromedriver.exe" - 访问Hub的控制台页面(比如
http://localhost:4444/grid/console),查看已注册节点的Capabilities,确认是否包含browserName: chrome和platform: WINDOWS,如果没有,说明节点注册时的配置有问题。
2. 确认ChromeDriver与Chrome浏览器版本兼容
这是最容易踩的坑!ChromeDriver的版本必须和你本地安装的Chrome浏览器大版本完全匹配(比如Chrome是118.x,ChromeDriver也得是118.x系列)。
- 打开Chrome的「设置-关于Chrome」查看浏览器版本,然后下载对应版本的ChromeDriver替换你当前的文件。
3. 验证环境变量配置是否生效
虽然你在系统环境变量里加了ChromeDriver的路径,但有时候系统需要重启才能加载新的环境变量。
- 打开命令提示符,输入
chromedriver --version,如果能正常输出版本号,说明环境变量生效;如果不行,要么重启系统,要么直接在启动节点的命令里用-Dwebdriver.chrome.driver指定绝对路径(推荐后者,避免环境变量的问题)。
4. 清理测试代码中多余的Capabilities参数
你的错误里提到了marionette: false,这个参数是针对Firefox的,Chrome完全不需要它!多余的参数会导致Hub无法匹配到节点。
修改你的C#测试代码,去掉无关的参数,正确配置ChromeOptions:
ChromeOptions options = new ChromeOptions(); options.PlatformName = "WINDOWS"; options.BrowserName = "chrome"; // 不需要设置marionette参数 IWebDriver driver = new RemoteWebDriver(new Uri("http://<你的Hub地址>:4444/wd/hub"), options);
5. 确保Hub和Node使用相同版本的Selenium Server
如果Hub和Node的Selenium Server版本不一致,也可能导致会话转发失败。检查两者使用的selenium-server-standalone.jar是否是同一个版本,尽量使用最新稳定版。
最后,重启Hub和Node,再运行测试试试,应该能解决这个问题。
内容的提问来源于stack exchange,提问作者OptimusAutomation
相关产品推荐
相关产品推荐

