在VSTS托管代理

时间:2018-02-20 14:08:09

标签: c# google-chrome selenium azure-devops azure-pipelines-release-pipeline

是否可以在无头模式下使用Chrome驱动程序在Visual Studio Team Services构建/发布中的托管代理上运行Selenium C#测试?

我看到过相互矛盾的信息表明这是当前不可能的。此用户语音提示似乎表明Chrome已预先安装在托管代理上:

https://visualstudio.uservoice.com/forums/330519-visual-studio-team-services/suggestions/19387174-install-headless-chrome-on-hosted-build-servers

当前设置

作为我的测试设置的一部分(在代码中),我表示我希望Chrome驱动程序在无头模式下运行,并且在VS的本地实例中运行时会这样做。

示例:

var options = new ChromeOptions();
options.AddArgument("headless");
options.AddArgument("disable-gpu");

var driver = new ChromeDriver(options);

当测试作为VSTS中发布定义的一部分运行时,会引发以下错误:

2018-02-20T13:21:10.7954002Z Error Message:
2018-02-20T13:21:10.7954156Z  unknown error: cannot find Chrome binary
2018-02-20T13:21:10.7954340Z   (Driver info: chromedriver=2.35.528161 (5b82f2d2aae0ca24b877009200ced9065a772e73),platform=Windows NT 10.0.14393 x86_64)
2018-02-20T13:21:10.7954487Z Stack Trace:
2018-02-20T13:21:10.7954620Z System.InvalidOperationException: unknown error: cannot find Chrome binary
2018-02-20T13:21:10.7955947Z   (Driver info: chromedriver=2.35.528161 (5b82f2d2aae0ca24b877009200ced9065a772e73),platform=Windows NT 10.0.14393 x86_64)
2018-02-20T13:21:10.7956136Z    at OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse)
2018-02-20T13:21:10.7956387Z    at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
2018-02-20T13:21:10.7956557Z    at OpenQA.Selenium.Remote.RemoteWebDriver.StartSession(ICapabilities desiredCapabilities)
2018-02-20T13:21:10.7956729Z    at OpenQA.Selenium.Remote.RemoteWebDriver..ctor(ICommandExecutor commandExecutor, ICapabilities desiredCapabilities)
2018-02-20T13:21:10.7956927Z    at OpenQA.Selenium.Chrome.ChromeDriver..ctor(ChromeDriverService service, ChromeOptions options, TimeSpan commandTimeout)
2018-02-20T13:21:10.7957106Z    at OpenQA.Selenium.Chrome.ChromeDriver..ctor(String chromeDriverDirectory, ChromeOptions options)

我确保已将 chromedriver.exe 复制到 bin 目录,并且包含在发布过程正在使用的构建工件中。< / p>

替代

我知道您可以设置私有代理来运行这些测试,但我希望尽可能避免这样做,并在VSTS中使用托管代理。

我还成功使用VSTS中的PhantomJS驱动程序成功运行测试,但我们希望能够在可能的情况下专门针对Chrome浏览器进行测试。

更新

根据下面接受的答案(Bernard Vander Beken),我设法通过插入额外的发布任务来安装Chrome静默和通过PowerShell脚本无人值守来解决这个问题。在测试运行之前,显然需要执行此任务(显然),以便浏览器可以在Selenium测试中以无头模式使用。

Release Definition Example

3 个答案:

答案 0 :(得分:1)

应该可以,请参阅https://github.com/Microsoft/vsts-agent/issues/1378

  

托管代理程序作为管理员运行,因此您应该能够安装   只要chrome无人值守,就可以将chrome作为构建的一部分   安装模式。

答案 1 :(得分:1)

我遇到了同样的问题。这个问题主要是由于版本兼容性所致,我尝试了一些组合并使其起作用。之前我使用的是ChromeDriver的最新版本,即76.*.*.*,但是Hosted Agent的任何版本均不支持此功能(截至撰写本答案之日),我正在使用Win 1803。后来我将ChromeDriver的版本更改为72.*.*.*,将Hosted Agent的版本更改为VS2017-Win2016,现在可以正常使用了。它也可以与Windows2019一起使用。

因此,结论是DevOps需要一些时间才能为最新版本提供支持。根据您的项目环境尝试各种组合。

答案 2 :(得分:0)

在最近的Hosted VS Agents中,例如Hosted VS2017,Web浏览器甚至Selenium驱动程序已经安装。您可以在Azure Piplelines Image Generation Github Repo上查看托管代理的文档。例如,here is the reference to Chrome being present on the VS2017 agent

点击管道顶部的Agent Phase标题。然后在Agent pool下选择Hosted VS2017,而不是普通的Hosted池。 (Windows 2019 with VS 2019最近也可用)。