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

Azure DevOps中Safari UI自动化测试方案咨询(VSBuild兼容问题)

解决方案:Azure DevOps中Safari自动化UI测试及macOS构建问题

一、解决「The current operating system is not capable of running this task」错误

这个错误核心原因是使用了仅支持Windows的任务(如旧版VSTest、VSBuild)在macOS代理上执行,或未正确配置Safari自动化环境。

1. 切换到macOS代理池

必须选择macOS系列的虚拟机,示例YAML配置:

pool:
  vmImage: 'macOS-latest' # 或指定版本如'macOS-13'

2. 启用Safari自动化权限

macOS默认禁用Safari远程自动化,需在流水线中添加脚本开启:

sudo safaridriver --enable
defaults write com.apple.Safari AllowRemoteAutomation 1
# 若遇到钥匙链权限问题,可解锁钥匙链
security unlock-keychain -p "$(whoami)"

3. 使用跨平台测试任务替代Windows专属任务

放弃仅支持Windows的VSTest@2任务,改用跨平台的DotNetCoreCLI@2执行测试:

- task: DotNetCoreCLI@2
  inputs:
    command: 'test'
    projects: '**/*Tests.csproj'
    arguments: '--configuration Release --logger trx'

二、解决VSBuild无法在macOS运行的问题

VSBuild是Windows专属任务,macOS不支持,根据项目类型选择替代方案:

1. .NET Core/.NET 5+项目:用DotNetCoreCLI构建

直接使用dotnet build命令,完全跨平台:

- task: DotNetCoreCLI@2
  inputs:
    command: 'build'
    projects: '**/*.csproj'
    arguments: '--configuration Release'

2. .NET Framework项目:拆分构建与测试流程

.NET Framework仅支持Windows环境,需拆分两个阶段:

  • 阶段1(Windows代理):用VSBuild完成项目构建,将构建产物打包上传到流水线工件
  • 阶段2(macOS代理):下载工件,在macOS环境中执行Safari自动化测试

示例YAML多阶段配置:

stages:
- stage: Build_Windows
  pool:
    vmImage: 'windows-latest'
  jobs:
  - job: Build
    steps:
    - task: VSBuild@1
      inputs:
        solution: '**/*.sln'
        configuration: 'Release'
    - task: PublishBuildArtifacts@1
      inputs:
        PathtoPublish: '$(Build.BinariesDirectory)'
        ArtifactName: 'build-output'
        publishLocation: 'Container'

- stage: Test_macOS
  dependsOn: Build_Windows
  pool:
    vmImage: 'macOS-latest'
  jobs:
  - job: TestSafari
    steps:
    - task: DownloadBuildArtifacts@0
      inputs:
        buildType: 'current'
        downloadType: 'single'
        artifactName: 'build-output'
        downloadPath: '$(System.ArtifactsDirectory)'
    - script: |
        sudo safaridriver --enable
        defaults write com.apple.Safari AllowRemoteAutomation 1
      displayName: 'Enable Safari Automation'
    - script: 'dotnet test $(System.ArtifactsDirectory)/build-output/YourTests.dll --logger trx'
      displayName: 'Run Safari UI Tests'

额外注意事项

  • 确保测试项目引用适配macOS的WebDriver包:使用Selenium 4+版本,内置SafariDriver支持;若用旧版Selenium,需安装Selenium.SafariDriver包。
  • 测试代码中需正确配置SafariOptions:
var options = new SafariOptions();
options.UseTechnologyPreview = false; // 根据需求调整
var driver = new SafariDriver(options);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 16:57:13