修复Blazor集成Selenium E2E测试到GitLab CI的端口占用错误
核心问题根因
你遇到的两个报错都是CI环境和本地运行环境的差异导致的:
- 5000端口占用:Selenium服务默认占用4444端口,你同时启动两个Selenium standalone服务会互相抢占4444端口,此外你修改应用端口为4444也会和Selenium冲突,部分dotnet镜像默认的自带服务也可能占用5000端口。
- 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
相关产品推荐
相关产品推荐

