You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下D盘文件挂载Zalenium Docker后Selenium上传文件失败

解决Zalenium Docker容器中Selenium文件上传失败的问题

我来帮你排查这个问题,核心原因是容器内的浏览器无法访问本地Windows路径,加上你的Docker挂载命令格式有误,导致文件没有被正确映射到容器里。下面是分步解决方案:

1. 修正Docker启动命令的挂载配置

你的原挂载命令存在格式错误(路径含空格未加引号、目标路径写法混乱),而且Zalenium需要额外配置让Selenium节点容器也能访问挂载的文件。正确的命令如下(Windows命令行下):

docker run --rm -ti --name zalenium -p 4444:4444 ^
  -v /var/run/docker.sock:/var/run/docker.sock ^
  -v /tmp/videos:/home/seluser/videos ^
  -v "D:\Automation\KITS Automation\exports-endtoend-tests\Defra.Exports.EndToEnd.Tests\bin\Debug\netcoreapp2.1":/upload-files ^
  -e ZALENIUM_EXTRA_MOUNTS="-v /upload-files:/upload-files" ^
  --privileged dosel/zalenium start

关键说明:

  • 用双引号包裹含空格的本地路径,避免命令解析错误
  • 将本地PDF目录映射到容器内的/upload-files路径(这个路径可以自定义,只要前后一致就行)
  • ZALENIUM_EXTRA_MOUNTS环境变量会让Zalenium启动的每个Selenium节点容器都继承这个挂载,确保浏览器能访问到文件

2. 修改C#上传代码的路径

因为执行上传操作的浏览器运行在Docker容器内,它只能识别容器内部的文件路径,而不是你的本地Windows路径。所以需要把代码里的路径替换成容器内的挂载路径:

// 直接使用容器内的挂载路径,而非本地Windows路径
string filePath = "/upload-files/test-ehc.pdf";
driver.FindElement(By.Id("file")).SendKeys(filePath);

如果你的测试需要兼容本地运行和Docker运行两种场景,可以通过环境变量来切换路径:

string filePath;
// 通过环境变量判断是否使用Docker环境
if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("USE_ZALENIUM")))
{
    filePath = "/upload-files/test-ehc.pdf";
}
else
{
    // 本地运行时使用原逻辑
    string folder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
    filePath = Path.Combine(folder, "test-ehc.pdf");
}
driver.FindElement(By.Id("file")).SendKeys(filePath);

3. 额外检查项

  • 确认本地目录下的test-ehc.pdf确实存在,且文件名大小写和代码里一致(容器内是Linux环境,路径大小写敏感)
  • 检查Docker Desktop的设置 > 资源 > 文件共享,确保D盘已经被勾选共享(你说已经确认过,这一步可以快速核对)

内容的提问来源于stack exchange,提问作者Steve

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:42:04