Azure DevOps流水线测试中,下载的PDF默认存储路径是什么?
在Azure DevOps流水线中处理Selenium PDF下载验证的方案
1. 不要依赖默认路径,强制指定自定义下载目录
Azure DevOps代理(微软托管/自托管)的默认下载路径不固定,还可能被自动清理,最稳妥的方式是初始化浏览器时直接指定下载目录,优先选流水线的工作目录(对应环境变量$(Agent.WorkFolder)或$(Build.SourcesDirectory),实际路径比如Windows下的D:\a\1\s、Linux下的/home/vsts/work/1/s)。
以Chrome为例,代码配置示例:
import os from selenium import webdriver from selenium.webdriver.chrome.options import Options # 创建自定义下载目录(基于流水线工作目录) download_dir = os.path.join(os.environ['BUILD_SOURCESDIRECTORY'], 'test_downloads') os.makedirs(download_dir, exist_ok=True) # 配置Chrome下载偏好 chrome_prefs = { "download.default_directory": download_dir, "download.prompt_for_download": False, "download.directory_upgrade": True, "plugins.always_open_pdf_externally": True # 强制下载PDF,避免浏览器直接打开 } chrome_options = Options() chrome_options.add_experimental_option("prefs", chrome_prefs) # 初始化浏览器 driver = webdriver.Chrome(options=chrome_options)
指定目录后,后续统计文件数量的逻辑和本地完全一致,无需调整。
2. 明确流水线可用的环境变量
Azure DevOps提供了几个关键环境变量,可直接在测试代码中读取:
$(Agent.WorkFolder):代理工作根目录(Windows默认D:\a,Linux/macOS默认/home/vsts/work)$(Build.SourcesDirectory):代码仓库克隆目录(对应D:\a\1\s或/home/vsts/work/1/s,推荐用这个目录下的子文件夹存下载文件)$(Agent.TempDirectory):临时目录(会被自动清理,不建议存放需要验证的下载文件)
3. 保留该测试功能的注意事项
- 预清理目录:每次测试前清空自定义下载目录,避免历史残留文件干扰统计结果,示例代码:
for file in os.listdir(download_dir): file_path = os.path.join(download_dir, file) if os.path.isfile(file_path): os.unlink(file_path)
- 等待下载完成:点击下载按钮后不要立刻统计,添加等待逻辑(比如循环检查目录中是否出现目标PDF,设置30秒超时)——流水线环境的网络、浏览器响应速度可能比本地慢。
- 权限确认:微软托管代理默认对工作目录有完全读写权限,自托管代理需确保指定目录的权限正常。
4. 可选:保留下载文件用于问题排查
如果需要在测试失败时查看下载的PDF,可在流水线中添加Publish Build Artifacts任务,将下载目录作为构件上传:
steps: - task: PublishBuildArtifacts@1 inputs: PathtoPublish: '$(Build.SourcesDirectory)/test_downloads' ArtifactName: 'downloaded_pdfs' publishLocation: 'Container'
测试失败后,可在流水线的构件页面下载对应的PDF文件,辅助排查问题。
内容的提问来源于stack exchange,提问作者Glen Butcher
相关产品推荐
相关产品推荐

