在VSTS托管代理上以Chrome(无头模式)运行Selenium测试

7

能否在Visual Studio Team Services构建/发布的托管代理中使用Chrome驱动程序的无头模式来运行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 目录中,并包含在构建产物中,被发布过程所使用。 替代方案 我知道您可以设置私有代理来运行这些测试,但如果可能的话,我想避免这样做,并利用VSTS中托管的代理。
我还成功地使用PhantomJS驱动程序在VSTS中运行了测试,但是我们仍然希望尽可能地专门针对Chrome浏览器进行测试。 更新 根据下面接受的答案(由Bernard Vander Beken),我成功通过插入一个额外的发布任务来使用PowerShell脚本静默和无人值守地安装Chrome来解决了这个问题。显然,该任务需要在测试运行之前执行,以便在Selenium测试中以无头模式使用浏览器。 Release Definition Example
3个回答

1

我在 VS 2017 中没有看到任何“代理池”标题或者“代理阶段”的设置。我看到了一个任务标题,上面写着“在代理上运行”。当我选择它时,我可以选择要使用哪个部署队列,需要哪些需求,是否并行在多个代理上运行,部署超时时间,是否跳过构件下载,并且是否允许脚本访问 OAuth 令牌。没有“代理池”选项,也没有下拉值说“Hosted”或“Hosted VS2017”。你在哪里看到这些?我还查看了你的链接,但是它们没有任何帮助。 - pabrams

1
我遇到了相同的问题。这个问题主要是由于版本兼容性引起的,我尝试了一些组合并使其工作。早期我使用了最新版本的ChromeDriver76.*.*.*,但是任何托管代理都不支持它(截至撰写本答案的日期),我当时使用的是Win 1803。后来我将我的ChromeDriver版本更改为72.*.*.*托管代理更改为VS2017-Win2016,现在它正常工作了。它也适用于Windows2019

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


1

1
做到了!我最终将下载和安装Chrome(无人值守)作为发布过程的一部分插入了一个新任务,然后测试就可以运行了。感谢您的回复。 - smd
你能在这里分享细节吗? - Bernard Vander Beken
1
我已经在原问题中更新了解决方案。 - smd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接