如何在作为Windows服务运行的Jenkins上以无头模式运行Selenium测试(C#,.NET)

我正在尝试设置Jenkins(版本2.117)并使用Selenium在Windows 10中的.NET堆栈上运行自动化测试,Jenkins作为Windows服务运行。

我正在尝试使用Firefox 56的Firefox Web驱动程序,它支持无头模式。

机器和软件

  • Windows 10专业版
  • jenkins2.117
  • Selenium Webdriver(截至此问题的最新版本)
  • Firefox 56,32位
  • GeckoDriver v0.16.1
  • Visual Studio 2017企业版

selenium测试

[TestClass] public class SeleniumTest { [TestMethod] [TestProperty("Selenium", "Google")] public void GoToGoogle() { var options = new FirefoxOptions(); options.AddArgument("-headless"); var driver = new FirefoxDriver(options); driver.Navigate().GoToUrl("https://www.google.com"); StringAssert.Contains(driver.PageSource, "Google"); } } 

我可以通过Visual Studio进行测试,但在Jenkins构建期间失败了。

用于运行测试的命令:

 "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\Extensions\TestPlatform\vstest.console.exe" C:\Jenkins\workspace\WorkSpaceName\Tests\bin\ContinuousIntegration\Tests.dll /tests:Google /logger:trx 

jenkins构建输出

以下是构建日志的缩写输出:

 "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\Extensions\TestPlatform\vstest.console.exe" C:\Jenkins\workspace\WorkSpaceName\Tests\bin\ContinuousIntegration\Tests.dll /tests:Google /logger:trx Microsoft (R) Test Execution Command Line Tool Version 15.6.1 Copyright (c) Microsoft Corporation. All rights reserved. Starting test discovery, please wait... 1525798591265 geckodriver INFO Listening on 127.0.0.1:58807 1525798592565 geckodriver::marionette INFO Starting browser \\?\C:\Program Files (x86)\Mozilla Firefox\firefox.exe with args ["-marionette", "-headless"] *** You are running in headless mode. 1525798592835 addons.xpi WARN Error parsing extensions state: [Exception... "Component returned failure code: 0x80520012 (NS_ERROR_FILE_NOT_FOUND) [amIAddonManagerStartup.readStartupData]" nsresult: "0x80520012 (NS_ERROR_FILE_NOT_FOUND)" location: "JS frame :: resource://gre/modules/addons/XPIProvider.jsm :: loadExtensionState :: line 1554" data: no] Stack trace: loadExtensionState()@resource://gre/modules/addons/XPIProvider.jsm:1554 < getInstallState()@resource://gre/modules/addons/XPIProvider.jsm:1589 < checkForChanges()@resource://gre/modules/addons/XPIProvider.jsm:3109 < startup()@resource://gre/modules/addons/XPIProvider.jsm:2188 < callProvider()@resource://gre/modules/AddonManager.jsm:269 < _startProvider()@resource://gre/modules/AddonManager.jsm:739 < startup()@resource://gre/modules/AddonManager.jsm:906 < startup()@resource://gre/modules/AddonManager.jsm:3090  System.Net.WebException: The request was aborted: The operation has timed out. Stack Trace: at System.Net.HttpWebRequest.GetResponse() at OpenQA.Selenium.Remote.HttpCommandExecutor.MakeHttpRequest(HttpRequestInfo requestInfo) --- End of inner exception stack trace --- at OpenQA.Selenium.Remote.HttpCommandExecutor.MakeHttpRequest(HttpRequestInfo requestInfo) at OpenQA.Selenium.Remote.HttpCommandExecutor.Execute(Command commandToExecute) at OpenQA.Selenium.Remote.DriverServiceCommandExecutor.Execute(Command commandToExecute) at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters) at OpenQA.Selenium.Remote.RemoteWebDriver.StartSession(ICapabilities desiredCapabilities) at OpenQA.Selenium.Remote.RemoteWebDriver..ctor(ICommandExecutor commandExecutor, ICapabilities desiredCapabilities) at OpenQA.Selenium.Firefox.FirefoxDriver..ctor(FirefoxOptions options) at StateOfMichigan.DisabilityServices.BusinessResources.Tests.UnitTests.SeleniumTest.GoToGoogle() in C:\Jenkins\workspace\MiBRS-22944-02\Tests\UnitTests\SeleniumTest.cs:line 16 Total tests: 1. Passed: 0. Failed: 1. Skipped: 0. Test Run Failed. Test execution time: 1.0295 Minutes 

浏览到它在日志输出中提到的URL( http:// localhost:58807 / session )时,我收到以下响应:

 { "value": { "error": "unknown command", "message": "GET /session did not match a known command", "stacktrace": "stack backtrace:\n 0: 0x489f6f - \n 1: 0x48ad59 - \n 2: 0x43a15d - \n 3: 0x42ec0f - \n 4: 0x423c30 - \n 5: 0x4078fa - \n 6: 0x6bc939 - \n 7: 0x415d0d - \n 8: 0x6b6e43 - \n 9: 0x7fff56fe8364 - BaseThreadInitThunk" } } 

现在上面的响应可能是由于浏览器发出GET请求而不是POST

jenkins服务属性

我已经为Jenkins服务尝试了几次配置迭代:

默认配置

  1. 使用“本地系统”帐户
  2. 没有与桌面交互

结果:与上述相同

调整本地系统帐户

  1. 使用“本地系统”帐户
  2. 允许服务与桌面交互是标记的

结果:与上述相同

使用本地“Jenkins”用户

结果:在初始化阶段无法找到活动目录BEAN的exception

使用我的Active Directory用户

  1. 我自己的用户和密码
  2. 我在机器上有管理员权限

结果:与上面的原始问题相同

在将Jenkins作为Windows服务运行时,如何在Firefox无头模式下运行Selenium测试?


更新1:看起来我的Firefox版本(v56)或GeckoDriver(v0.16.1)可能存在问题切换到Chrome 66和ChromeDriver 2.38.552522似乎工作正常。