是否可以在无头模式下使用Chrome驱动程序在Visual Studio Team Services构建/发布中的托管代理上运行Selenium C#测试?
我看到过相互矛盾的信息表明这是当前不可能的。此用户语音提示似乎表明Chrome已预先安装在托管代理上:
当前设置
作为我的测试设置的一部分(在代码中),我表示我希望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测试中以无头模式使用。
答案 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
最近也可用)。