运行Selenium Server& ChromeDriver作为Windows服务

时间:2014-10-20 08:36:39

标签: selenium selenium-webdriver webdriver

为了我们可以执行从前到后的Web UI测试,我们使用Selenium和ChromeDriver来自动化页面加载/交互,作为我们测试包的一部分。

这在开发人员测试期间(在开发人员的本地计算机上)表现得如预期,但我们正在努力执行这些检查,作为我们持续集成构建的一部分。

我们的服务器工厂基于* NIX,我们所有的CI基础架构都在这些机器上运行。因此我们可以在Windows(我们的交付机制)下测试Chrome,我们已经配置了Selenium Grid。当CI测试运行时,他们访问网格,以便找到一个Windows节点来运行测试。

我们已经配置了Windows桌面,仅用于运行这些测试。这包含我们标准的Windows 7企业版本。该机器将定期重新启动,与IT部门的更新策略一致。

为了确保Selenium服务器始终运行,我们已将Selenium Server(在" node"模式下运行)添加为Windows服务。 selenium Server配置为启动ChromeDriver以调用模拟的用户交互。

但是,从CI运行测试时,由于超时而失败。我们的工作原理是,运行服务的系统用户无法创建交互式窗口。网络搜索引发了对#0;会话0"问题,但对于如何向前推进几乎没有建设性意见。

从交互式会话手动启动Selenium Server进程并不是一个可行的解决方案,因为这会导致脆弱的测试 - 由于基础架构问题而导致失败,而不是真正的测试回归。


如果系统重新启动,我们怎样才能通过Windows服务启动Selenium Server实例,该实例能够启动Chrome实例?

8 个答案:

答案 0 :(得分:18)

可以使用NSSM轻松完成。 服务的安装如下:

nssm install seleniumhub java -jar C:\selenium\selenium-server-standalone-2.45.0.jar -role hub -hubConfig C:\selenium\hub.json
nssm install seleniumnode java -jar C:\selenium\selenium-server-standalone-2.45.0.jar -role node -nodeConfig C:\selenium\node.json

如果需要,它可以轻松地删除服务:

nssm remove seleniumnode confirm

将目的地添加到您的PATH变量nssm并从控制台以管理员身份运行

答案 1 :(得分:6)

现在你无法帮助它 - 它曾经在会话0中正常工作,但在Chrome更新后的过去几天仅适用于交互式会话。

相关错误:

https://code.google.com/p/selenium/issues/detail?id=8029 https://code.google.com/p/chromium/issues/detail?id=422218

答案 2 :(得分:4)

自Windows Vista以来,您无法将Selenium Grid作为Windows服务运行。微软称之为“会话0隔离"”。您可以在Windows 2000或XP中执行此操作,但自Vista发布以来,Microsoft不再让Grid与桌面(或任何其他UI程序)进行交互。无论您是否仍然看到"与桌面互动"复选框,它是一个红鲱鱼。因此,您必须在该服务器上的前台运行Selenium Grid,以便它能够访问该会话。如果它运行的是Windows Server,理论上你可以有多个会话,并在其中一个非零用户会话中让Grid在前台运行。

答案 3 :(得分:4)

我对此问题的首选解决方案(以及将Selenium Grid作为服务运行的默认选择)是使用名为AlwaysUp的简单工具。它有30天的免费试用版。

怎么做:

通过这种方式,该节点将作为服务运行,在机器重新启动后可以使用最新版本的Chrome。

如果您用于登录计算机的用户帐户与您指定用于将节点作为服务运行的用户帐户不同,那么您将看不到桌面上弹出的浏览器,因为它们在不同的用户会话中运行。最终结果是,它几乎与作为普通服务运行相同,但绕过Session 0问题。

答案 4 :(得分:1)

是的,你应该使用NSSM。重要的是,您在"登录"中添加了您的Windows帐户。标签或任何其他有效帐户。如果您使用"本地系统帐户运行您的节点"选项,您将得到会话0问题。使用普通用户会话,节点在后台平滑运行:)

答案 5 :(得分:0)

我们不使用硒GRID,它的稳定性令我们感到失望。我们使用“ Jenkins网格”,即各种服务器上的jenkins从节点。

从属是具有与桌面交互标志的服务。它们通过NSSM和SERVICE_INTERACTIVE_PROCESS标志作为服务运行。确保将NoInteractiveProcess设置为1(cf https://docs.microsoft.com/en-us/windows/desktop/services/interactive-services)。

我们没有网格的精美功能(即根据浏览器类型的插槽进行平衡)。相反,我们让詹金斯使用从属节点或另一个从属节点来平衡测试作业。 最初,我们没有使用“与桌面进行交互”标志,而是让浏览器在没有“真实”显示的情况下运行,但是行为不是很稳定(尤其是使用resize命令)。 希望这会有所帮助。

答案 6 :(得分:-1)

正如我在this thread上所作的解释,我发现使用小型付费工具FireDaemon Pro为尝试配置NSSM和其他免费工具节省了很多时间。

它在后台运行良好,并与服务器一起重新启动Selenium,这是将Selenium Standalone Server作为Windows Service运行的主要要求。

答案 7 :(得分:-1)

这个免费工具可能会做到: http://yajsw.sourceforge.net/

要使其正常工作,您需要一个wrapper.conf文件和一个脚本来运行YAJSW包装器。我花时间阅读the documentation,但这是一个免费的解决方案。

我写了一个示例shared here,该示例将JBoss7安装为Windows服务。

当然,您可以大大简化我的示例。