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

C# Selenium测试在Azure流水线中无法下载并验证报告文件求助

Azure Pipelines中Selenium/C#下载测试失败的排查思路

我们有一组基于Selenium/C#的测试用例,用于点击下载报告按钮并验证报告文件已在本地创建。本地运行正常,但部署到Azure发布流水线后运行失败——测试会检查预设的文件夹,但始终找不到报告文件,推测要么文件未下载,要么被下载到了其他路径。

已尝试设置不同硬编码路径,例如:

protected const string DownloadPathExt = "C:\\TestFolder\\Release\\net6.0\\";
protected const string DownloadPathExt = "D:\\a\\r1\\a\\TestFolder Regression\\";

路径用于Chrome配置及文件检查:

var options = new ChromeOptions();
options.AddUserProfilePreference("download.default_directory", DownloadPathExt);

// 文件检查代码
string[] filePaths = Directory.GetFiles(DownloadPath);

从日志可见,测试实际检查的是D:\a\r1\a\_Pi Regression\路径下的仓库文件,而非预期的下载文件:

2023-06-05T10:52:01.9695830Z  In procedure ReadXLSFileDownloaded
2023-06-05T10:52:01.9696187Z  Checking file D:\a\r1\a\_Pi Regression\.editorconfig
2023-06-05T10:52:01.9696549Z  Checking file D:\a\r1\a\_Pi Regression\.gitattributes
...

以下是具体排查思路:

  • 确认路径的一致性与正确性

    • 日志显示的检查路径D:\a\r1\a\_Pi Regression\与代码中设置的TestFolder Regression不一致,先排查DownloadPathExt和DownloadPath是否为同一变量,或流水线中工作目录是否有变动。
    • 在测试中添加日志输出实际使用的路径:Console.WriteLine($"当前检查路径: {DownloadPath}");,验证是否与预期匹配。
    • 避免硬编码路径,改用Azure Pipelines预定义变量,比如$(Agent.TempDirectory)或$(Build.ArtifactStagingDirectory),这些是流水线环境的标准路径,适配不同代理机器。
  • 完善Chrome下载配置

    • 仅设置download.default_directory可能不够,需添加配置确保无弹窗自动下载:
      options.AddUserProfilePreference("download.prompt_for_download", false);
      options.AddUserProfilePreference("download.directory_upgrade", true);
      options.AddUserProfilePreference("safebrowsing.enabled", true);
      // 针对Excel等文件设置MIME类型,避免浏览器自动打开
      var mimeSettings = new Dictionary<string, object>
      {
          {"application/vnd.ms-excel", "application/octet-stream"},
          {"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "application/octet-stream"}
      };
      options.AddUserProfilePreference("download.default_content_setting_values", mimeSettings);
      options.AddUserProfilePreference("download.extensions_to_open", "");
      
    • 如果使用无头模式,需补充必要参数:
      options.AddArgument("--headless=new");
      options.AddArgument("--disable-gpu");
      options.AddArgument("--window-size=1920,1080");
      
  • 添加文件下载的等待逻辑

    • 流水线环境网络或服务响应较慢,可能文件未下载完成就触发检查。添加等待机制:
      int maxWaitSeconds = 30;
      DateTime start = DateTime.Now;
      string targetReport = null;
      while ((DateTime.Now - start).TotalSeconds < maxWaitSeconds)
      {
          // 根据报告实际后缀调整过滤条件
          var files = Directory.GetFiles(DownloadPath, "*.xlsx");
          if (files.Length > 0)
          {
              targetReport = files[0];
              break;
          }
          Thread.Sleep(1000);
      }
      
      if (targetReport == null)
      {
          // 输出当前路径所有文件,辅助排查
          foreach (var file in Directory.GetFiles(DownloadPath))
          {
              Console.WriteLine($"当前路径文件: {file}");
          }
          Assert.Fail("超时未找到下载的报告文件");
      }
      
  • 检查流水线环境权限与配置

    • 确认流水线代理账户对目标下载路径有读写权限,避免因权限不足导致文件无法写入。
    • 排查是否存在代理拦截下载请求,可临时关闭代理或添加网络请求日志验证。
    • 确保流水线中ChromeDriver与Chrome浏览器版本和本地一致,版本不匹配可能导致配置失效。
  • 排查默认下载路径

    • 如果上述配置均无效,可检查代理机器的默认下载目录(比如C:\Users\<代理账户>\Downloads),确认文件是否被下载到了默认路径,这说明自定义路径配置未生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 14:27:55