
本文详解 se:downloadsEnabled 能力的使用前提与配置要点:该能力仅在 Grid 节点显式启用 --enable-managed-downloads 时才生效,否则会因会话匹配失败导致 SessionNotCreatedException。
本文详解 `se:downloadsenabled` 能力的使用前提与配置要点:该能力仅在 grid 节点显式启用 `--enable-managed-downloads` 时才生效,否则会因会话匹配失败导致 `sessionnotcreatedexception`。
se:downloadsEnabled 是 Selenium 4 Grid 引入的服务端托管下载(managed downloads)能力,用于安全、可追溯地管理测试会话中的文件下载行为。但它不是浏览器端的普通 capability——它是一个 Grid 层面的会话路由策略标记。当你在客户端代码中设置:
options.setCapability("se:downloadsEnabled", true);
Selenium Grid 会将该会话请求仅路由到已启动时明确开启托管下载支持的节点上。若所有节点均未启用 --enable-managed-downloads,Grid 将无法匹配任何可用节点,最终抛出 SessionNotCreatedException(错误信息中“browser start-up failure”实为会话调度失败的笼统提示)。
✅ 正确配置流程如下:
-
启动 Grid Node 时必须添加参数:
java -jar selenium-server-4.9.0.jar node \ --hub http://localhost:4444/grid/register \ --enable-managed-downloads true \ --publish-events tcp://*:4442 \ --subscribe-events tcp://*:4443
⚠️ 注意:
--enable-managed-downloads true是强制要求,缺省值为false,且不支持通过环境变量或配置文件替代。 -
客户端代码中设置 capability(你已做对):
ChromeOptions options = new ChromeOptions(); options.setCapability("platformName", "LINUX"); options.setCapability("se:downloadsEnabled", true); // ✅ 必须与节点配置一致 // 下载路径偏好仍需保留(但由 Grid 自动注入,无需手动指定 dir) HashMap<string object> prefs = new HashMap(); prefs.put("download.prompt_for_download", false); prefs.put("download.directory_upgrade", true); prefs.put("safebrowsing.enabled", false); options.setExperimentalOption("prefs", prefs); driver = new RemoteWebDriver(new URL("http://localhost:4444/"), options);</string> -
验证与使用:
- 下载文件后,可通过 Grid 提供的 HTTP API 获取文件列表与内容:
# 列出当前 session 的所有下载文件 curl -X GET "http://localhost:4444/session/{session-id}/se/download" # 下载指定文件(返回二进制流) curl -X GET "http://localhost:4444/session/{session-id}/se/download/{filename}" - 文件自动保存在 Node 本地临时目录,会话结束即清理,无需手动管理磁盘空间。
- 下载文件后,可通过 Grid 提供的 HTTP API 获取文件列表与内容:
? 关键注意事项:
-
se:downloadsEnabled不影响浏览器是否允许下载,仅启用 Grid 的下载托管与审计能力; - ChromeDriver 本身不识别该 capability,它完全由 Selenium Server(Grid Node)解析和处理;
- 若混用本地 WebDriver(非 Grid),此 capability 会被忽略或引发异常,应仅用于 Grid 环境;
- 当前仅支持 Chrome、Firefox、Edge;Safari 和旧版 IE 不支持。
总结:SessionNotCreatedException 的根源并非代码错误,而是 Grid 节点缺失 --enable-managed-downloads true 启动参数。启用托管下载需“节点侧开启 + 客户端声明”双配合,二者缺一不可。










