Selenium Grid报错:转发新会话失败,无法找到Capabilities求助
我来帮你梳理这个报错的问题,从你给出的启动命令、环境信息来看,有几个明确的点可以先排查修复:
1. ChromeDriver 路径的明显错误(Mac 环境专属问题)
你在 Node 启动命令里写的是 java -Dwebdriver.chrome.driver=/Users/alina/Selenium/chromedriver.exe,但你用的是 Mac 系统啊!ChromeDriver 在 Mac 上是没有.exe后缀的可执行文件,这个错误会直接导致 Node 无法正确加载 ChromeDriver,Hub 自然找不到对应的浏览器 Capabilities,就抛出了你看到的转发错误。
修复方法:
把启动命令里的驱动路径改成无后缀的正确版本:
java -Dwebdriver.chrome.driver=/Users/alina/Selenium/chromedriver -jar selenium-server-standalone-3.11.0.jar -role node -hub http://192.168.100.4:4444/grid/register/
2. Node 角色参数写错了
你当前用的是 -role webdriver,但在 Selenium 3.x 的 Grid 体系里,节点的正确角色参数是 -role node,这个参数错误会让 Hub 无法正确识别这个节点为可用的浏览器节点。
修复方法:
直接用上面修正后的命令,确保角色参数是 -role node。
3. 检查代码里的 Capabilities 配置是否匹配
如果上面两个问题修复后还是报错,就得看看你的测试代码里的浏览器配置是不是和 Node 支持的匹配:
- Selenium 3.x 更推荐用
ChromeOptions来配置,而不是旧的DesiredCapabilities - 给你个示例代码片段参考:
import java.net.URL; import org.openqa.selenium.chrome.ChromeOptions; import org.openqa.selenium.remote.RemoteWebDriver; public class GridTest { public static void main(String[] args) throws Exception { ChromeOptions options = new ChromeOptions(); options.setBrowserVersion("66"); // 要和你安装的Chrome版本一致 RemoteWebDriver driver = new RemoteWebDriver(new URL("http://192.168.100.4:4444/wd/hub"), options); // 后续测试逻辑... driver.quit(); } }
4. 验证 Hub 和 Node 的连接状态
修改完启动命令后,打开浏览器访问 Hub 的控制台:http://192.168.100.4:4444/grid/console,确认你的 Node 已经成功注册,并且显示 Chrome 浏览器处于可用状态。如果看不到 Node,还要检查:
- Hub 和 Node 是否在同一局域网,IP 地址能不能互相访问
- 有没有防火墙拦截了 4444 端口的通信
额外小提示
别忘了给 ChromeDriver 加可执行权限,在 Mac 终端里执行这个命令就行:
chmod +x /Users/alina/Selenium/chromedriver
另外,你的 Chrome 66、ChromeDriver 2.38 和 Selenium 3.11.0 版本是完全兼容的,版本层面不用操心~
内容的提问来源于stack exchange,提问作者greennyyy

