如何在作为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服务尝试了几次配置迭代:
默认配置
- 使用“本地系统”帐户
- 没有与桌面交互
结果:与上述相同
调整本地系统帐户
- 使用“本地系统”帐户
- 允许服务与桌面交互是标记的
结果:与上述相同
使用本地“Jenkins”用户
结果:在初始化阶段无法找到活动目录BEAN的exception
使用我的Active Directory用户
- 我自己的用户和密码
- 我在机器上有管理员权限
结果:与上面的原始问题相同
在将Jenkins作为Windows服务运行时,如何在Firefox无头模式下运行Selenium测试?
更新1:看起来我的Firefox版本(v56)或GeckoDriver(v0.16.1)可能存在问题切换到Chrome 66和ChromeDriver 2.38.552522似乎工作正常。