C# 固定和#x27;无法在上启动驱动程序服务http://localhost: ... 已在使用';将Blazor的E2E测试与Gitlab CI中的硒集成时

C# 固定和#x27;无法在上启动驱动程序服务http://localhost: ... 已在使用';将Blazor的E2E测试与Gitlab CI中的硒集成时,c#,selenium,gitlab-ci,e2e-testing,blazor-server-side,C#,Selenium,Gitlab Ci,E2e Testing,Blazor Server Side,我对CI比较陌生,我正在尝试将selenium集成到gitlab CI中,用于一个带有c#的dotnet blazor项目。 硒的e2e测试正在我的机器上进行。我必须为firefox和chrome编写它们。 我使用了Program.CreateHostBuilder(新字符串[0]).Build().RunAsync()在nunit中的[SetUp]上启动应用程序进行e2e测试 我正在阅读不同的连接字符串,因为与 if(String.CompareOrdinal(Environment.Mach

我对CI比较陌生,我正在尝试将selenium集成到gitlab CI中,用于一个带有c#的dotnet blazor项目。 硒的e2e测试正在我的机器上进行。我必须为firefox和chrome编写它们。 我使用了
Program.CreateHostBuilder(新字符串[0]).Build().RunAsync()
在nunit中的
[SetUp]
上启动应用程序进行e2e测试

我正在阅读不同的连接字符串,因为与

if(String.CompareOrdinal(Environment.MachineName,“runner”)==0)
{
返回配置.GetConnectionString(“管道”);
}
返回配置.GetConnectionString(“本地”);
这就是我的
.gitlab ci.yml
当前的样子:

image:mcr.microsoft.com/dotnet/sdk:5.0
阶段:
-建造
-试验
在脚本之前:
-“cd项目/团队01”
-“dotnet还原”
建造:
标签:
-专业的
阶段:建造
脚本:
-“dotnet构建”
测试:
标签:
-专业的
阶段:测试
服务:
-名称:mcmoe/mssqldocker:v2017.CU24.0
别名:mssql
-硒/铬
-selenium/standalone firefox
变量:
接受_EULA:Y
sau密码:SomeStrongPW
MSSQL_DB:DB
MSSQL_用户:Dev
MSSQL_密码:DatabasPW
脚本:
-“网络测试”
当我运行管道时,所有e2e都出现故障,并显示以下错误消息:

OpenQA.Selenium.WebDriverException : Cannot start the driver service on http://localhost:43471/
TearDown : System.NullReferenceException : Object reference not set to an instance of an object.
Stack Trace:
     at OpenQA.Selenium.DriverService.Start()
   at OpenQA.Selenium.Remote.DriverServiceCommandExecutor.Execute(Command commandToExecute)
   at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
...

当我再向下滚动一点时,我发现以下内容:

Unable to start Kestrel.
       System.IO.IOException: Failed to bind to address http://127.0.0.1:5000: address already in use.
        ---> Microsoft.AspNetCore.Connections.AddressInUseException: Address already in use
        ---> System.Net.Sockets.SocketException (98): Address already in use
          at System.Net.Sockets.Socket.UpdateStatusAfterSocketErrorAndThrowException(SocketError error, String callerName)
当我看到我发现的第一条错误消息时,虽然没有连接到CI,但很遗憾。 看起来可能是安装正确的webdriver时出错,或者其他配置设置不正确。 我还想知道为什么这个地址应该已经被使用了,因为我看不到任何正在使用它的东西

对于设置配置,我主要发现它很有用,可以查看并作为参考

  • 对于gitlab文档,我无法理解如何使用
    wdio.conf.js
    ,将其放置在何处,以及如何连接信心检查以在测试阶段使用
  • 从上面的一篇文章来看,似乎很混乱,因为有很多配置,我无法理解每一行需要什么。
    • 这同样适用于使用,因为它与ruby连接非常紧密,我也找不到任何关于如何在其他浏览器上使用它的线索
  • 我看到很多细节我都不明白,我很难为其他车手使用它,尽管在我看来这似乎是最重要的
我觉得有点卡住了,因为我在真正具体的案例中只看到了一半的烘焙答案,我不确定blazor和c#的最佳实践是什么,因为大多数答案都是指其他编程语言

如果你需要任何进一步的细节,请告诉我。提前谢谢!任何提示或解决方案都将不胜感激

更新1
  • 我试着使用npm,虽然我意识到我不能同时使用图像
  • 在ap启动时将本地主机定义为端口4444
但我仍然会犯同样的错误,我改为

-名称:selenium/standalone chrome:最新版本
-名称:selenium/standalone firefox:最新版本
在我的yml里。我想知道如何传递有关端口的不同参数

更新2 我试图将以下内容添加到gitlab ci.yml:

安装:
图片:码头工人:稳定
脚本:
-docker run-d-p 4444:4444-v/dev/shm:/dev/shm selenium/standalone firefox:4.0.0-beta-4-prerelease-20210527
-docker run-d-p 4444:4444-v/dev/shm:/dev/shm selenium/standalone chrome:4.0.0-beta-4-prerelease-20210527
人工产品:
路径:
-试验

我从中得到的,也将dotnet的图像移到了其他阶段。

为什么端口号不同(43471和5000)?客户端和服务器不能同时使用相同的IP地址(或本地主机)。在一些机器上,本地主机设置为127.0.0.1)环回(loopback),而其他机器则设置为机器IP地址。因此,复制示例代码并不总是有效的。侦听器/服务器应使用127.0.0.1,客户端应连接到计算机IP地址。好的,但如何在CI中实现这一点?我还没有在我的
.gitlab ci.yml
中设置任何关于ip的内容。您解决了这个问题吗?您当前遇到了哪些错误?服务器和客户端现在使用相同的端口号吗?遗憾的是,这两个更新仍然没有解决相同的错误。我将服务器ip设置回5001,因为它会导致一些其他错误。在ci yml中将其设置为5001也没有帮助,您可能有多个问题。客户端和服务器必须使用相同的端口号。5月改为5001端口解决了第一个问题,现在我们需要了解如何解决第二个问题。