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

修复Blazor集成Selenium E2E测试到GitLab CI的端口占用错误

核心问题根因

你遇到的两个报错都是CI环境和本地运行环境的差异导致的:

  1. 5000端口占用:Selenium服务默认占用4444端口,你同时启动两个Selenium standalone服务会互相抢占4444端口,此外你修改应用端口为4444也会和Selenium冲突,部分dotnet镜像默认的自带服务也可能占用5000端口。
  2. Selenium驱动启动失败:你本地用的是本地浏览器驱动,CI环境中没有安装本地浏览器和对应驱动,启动本地DriverService当然会失败,CI环境需要用RemoteWebDriver连接Selenium服务容器。

具体修改方案

1. 调整Blazor应用启动端口

修改NUnit的[SetUp]中的启动代码,给CI环境指定独立的端口,避免端口冲突:

var host = Program.CreateHostBuilder(new string[0])
    .ConfigureWebHostDefaults(webBuilder =>
    {
        if (String.CompareOrdinal(Environment.MachineName, "runner") == 0)
        {
            // 自定义CI环境应用端口,不要用5000、4444这类常用端口
            webBuilder.UseUrls("http://0.0.0.0:5555");
        }
    })
    .Build();
await host.RunAsync();

2. 适配CI环境的Selenium驱动初始化

把原有本地驱动逻辑改成环境自适应,CI环境用RemoteWebDriver连接Selenium服务容器:

IWebDriver InitDriver()
{
    var testBrowser = Environment.GetEnvironmentVariable("TEST_BROWSER") ?? "Chrome";
    if (String.CompareOrdinal(Environment.MachineName, "runner") == 0)
    {
        // CI环境通过服务别名连接Selenium容器
        if (testBrowser == "Chrome")
        {
            var options = new ChromeOptions();
            return new RemoteWebDriver(new Uri("http://selenium-standalone-chrome:4444/wd/hub"), options.ToCapabilities());
        }
        else
        {
            var options = new FirefoxOptions();
            return new RemoteWebDriver(new Uri("http://selenium-standalone-firefox:4444/wd/hub"), options.ToCapabilities());
        }
    }
    else
    {
        // 本地环境保持原有逻辑不变
        return testBrowser == "Chrome" ? new ChromeDriver() : new FirefoxDriver();
    }
}

3. 修正.gitlab-ci.yml配置

拆分测试任务,每个浏览器单独一个job避免Selenium服务端口冲突,删除无效的install阶段(GitLab CI各job环境隔离,前序job启动的容器不会保留到后续job):

image: mcr.microsoft.com/dotnet/sdk:5.0

stages:
  - build
  - test

before_script:
    - cd Project/Team01
    - dotnet restore

build:
  tags:
    - pro
  stage: build
  script:
    - dotnet build

# Chrome测试任务
test:chrome:
  tags:
    - pro
  stage: test
  services:
  - name: mcmoe/mssqldocker:v2017.CU24.0
    alias: mssql
  - name: selenium/standalone-chrome:latest
    alias: selenium-standalone-chrome
  variables:
    ACCEPT_EULA: Y
    SA_PASSWORD: SomeStrongPW
    MSSQL_DB: db
    MSSQL_USER: Dev
    MSSQL_PASSWORD: DatabasPW
    TEST_BROWSER: Chrome
  script:
    - dotnet test

# Firefox测试任务
test:firefox:
  tags:
    - pro
  stage: test
  services:
  - name: mcmoe/mssqldocker:v2017.CU24.0
    alias: mssql
  - name: selenium/standalone-firefox:latest
    alias: selenium-standalone-firefox
  variables:
    ACCEPT_EULA: Y
    SA_PASSWORD: SomeStrongPW
    MSSQL_DB: db
    MSSQL_USER: Dev
    MSSQL_PASSWORD: DatabasPW
    TEST_BROWSER: Firefox
  script:
    - dotnet test

额外说明

你提到的wdio.conf.js是前端JS栈的WebdriverIO测试框架的配置文件,C#技术栈不需要使用,不需要额外关注。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 11:45:03