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

Azure DevOps托管代理使用WebDriverManager.Net跨卷移动报错如何解决

问题根因

该报错由WebDriverManager.Net的默认路径逻辑与Azure DevOps托管代理的盘符分配冲突导致:

  • WebDriverManager.Net默认将驱动安装包下载到系统临时目录,Microsoft托管代理的系统临时目录通常分配在C盘
  • 流水线的工作目录默认分配在D盘,组件内部默认使用File.Move操作将驱动文件从临时目录移动到工作目录,该操作不支持跨盘符执行,因此触发IO异常
解决方案

方案1:代码中显式指定同盘缓存路径(最稳妥,本地、流水线均生效)

修改驱动初始化代码,直接指定驱动缓存路径为当前运行目录的子路径,确保和工作目录处于同一盘符:

// 定义与工作目录同盘的驱动缓存目录
var driverCachePath = Path.Combine(AppContext.BaseDirectory, "webdrivers");
// 自动创建目录
if (!Directory.Exists(driverCachePath))
{
    Directory.CreateDirectory(driverCachePath);
}
// 初始化时传入缓存路径配置
new DriverManager().SetUpDriver(new ChromeConfig(), cacheDirectory: driverCachePath);
var webDriver = new ChromeDriver();

如果你使用的是较低版本的WebDriverManager.Net,不支持直接在SetUpDriver方法中传缓存路径,可以修改配置类属性:

var chromeConfig = new ChromeConfig
{
    CacheDirectory = driverCachePath
};
new DriverManager().SetUpDriver(chromeConfig);

方案2:流水线配置环境变量(无需修改业务代码)

在Azure DevOps流水线的测试任务执行前,新增步骤配置环境变量WEBDRIVER_MANAGER_CACHE_PATH,指定为工作目录下的路径,WebDriverManager.Net会优先读取该环境变量作为缓存根目录:
YAML流水线示例配置:

- task: PowerShell@2
  inputs:
    targetType: 'inline'
    script: |
      $cachePath = Join-Path -Path $(System.DefaultWorkingDirectory) -ChildPath "webdrivers"
      New-Item -ItemType Directory -Path $cachePath -Force
      Write-Host "##vso[task.setvariable variable=WEBDRIVER_MANAGER_CACHE_PATH]$cachePath"
  displayName: '配置WebDriverManager缓存路径'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:57:00