将Selenium服务器和ChromeDriver作为Windows服务运行

ntjbwcob  于 2023-01-26  发布在  Windows
关注(0)|答案(8)|浏览(225)

因此,我们可以执行前后Web UI测试,我们使用Selenium和ChromeDriver来自动化页面加载/交互,作为我们测试包的一部分。
在开发人员测试期间(在开发人员的本地计算机上),这是按照预期的方式进行的,但是我们正在努力将这些检查作为持续集成构建的一部分来执行。
我们的服务器工厂是基于 *NIX的,我们所有的CI基础设施都在这些机器上运行。因此,我们可以在Windows(我们的交付机制)下测试Chrome,我们配置了一个Selenium网格。当CI测试运行时,它们访问网格,以便定位要在其上运行测试的Windows节点。
我们仅为运行这些测试而配置了一个Windows桌面。这包含我们的标准企业版Windows 7。此计算机将根据IT部门的更新策略定期重新启动。
为了确保Selenium服务器始终运行,我们添加了Selenium服务器(以“节点”模式运行)作为Windows服务,Selenium服务器配置为启动ChromeDriver以调用模拟的用户交互。
但是,当从CI运行测试时,测试会由于超时而失败。我们的工作原理是,运行服务的系统用户无法创建交互式窗口。Web搜索提到了“会话0”问题,但几乎没有关于如何继续的建设性建议。
从交互式会话手动启动Selenium Server进程不是一个可行的解决方案,因为这会导致脆弱的测试--这些测试失败是由于基础设施问题,而不是真正的测试回归。
每当系统重新启动时,我们如何通过Windows服务启动Selenium服务器的示例,该示例能够启动Chrome示例?

dgtucam1

dgtucam11#

使用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

将nssm的目标添加到PATH变量中,并以admin身份从控制台运行

更新2021年4月

NSSM不支持超过3年。所以请考虑其他选项,如winsw或任何其他。WinSW做同样的工作作为NSSM,并允许保持运行配置在xml中。

yjghlzjz

yjghlzjz2#

从WindowsVista开始,你就不能把SeleniumGrid作为一个Windows服务来运行。微软称之为“会话0隔离”。你可以在Windows2000或XP中这样做,但自从Vista出现后,微软不再允许Grid与桌面交互(或任何其他UI程序)。不管你仍然看到那个“与桌面交互”复选框的事实,它都是一个红鲱鱼。所以,您必须在该服务器的前台运行Selenium Grid,以便它能够访问会话。如果它运行的是Windows Server,则理论上您可以有多个会话,并让Grid在其中一个非零用户会话的前台运行。

mw3dktmi

mw3dktmi3#

现在你不能帮助它-它曾经在会话0中工作得很好,但在过去几天后, chrome 更新只适用于交互式会话。
相关错误:
https://code.google.com/p/selenium/issues/detail?id=8029https://code.google.com/p/chromium/issues/detail?id=422218

vc9ivgsu

vc9ivgsu4#

我对这个问题的首选解决方案(也是我默认的将SeleniumGrid作为服务运行的选择)是使用一个叫做AlwaysUp的简单工具,它有30天的免费试用期。
该怎么办:

这样,节点将作为服务运行,在机器重新启动后继续运行,并与最新版本的Chrome一起工作。
如果您用来登录计算机的用户帐户与您指定用来将节点作为服务运行的用户帐户不同,那么您将不会看到浏览器在桌面上弹出,因为它们是在不同的用户会话中运行的。最终结果是,它几乎与作为正常服务运行相同,但绕过了会话0的问题。

ogq8wdun

ogq8wdun5#

是的,你应该使用NSSM。重要的是,你在“登录”选项卡中添加你的Windows帐户,或者任何其他有效的帐户。如果你用“本地系统帐户”选项运行你的节点,你会得到会话0的问题。用一个正常的用户会话,节点在后台运行平稳不可见:)

zynd9foi

zynd9foi6#

我们没有使用 selenium 网格,我们对它的稳定性感到失望。2我们使用“Jenkins网格”,即各种服务器上的Jenkins从节点。
从属服务器是带有与桌面交互标志的服务。它们作为带有NSSM和SERVICE_INTERACTIVE_PROCESS标志的服务运行。确保NoInteractiveProcess设置为1(cf https://learn.microsoft.com/en-us/windows/desktop/services/interactive-services)。
我们没有网格的花哨特性(即根据浏览器类型插槽进行平衡)。相反,我们让Jenkins使用一个从节点或另一个节点来平衡测试作业。最初我们没有使用与桌面交互标志,让浏览器在没有“真实的”显示的情况下运行,但行为不是很稳定(特别是使用调整大小命令)。希望这能有所帮助。

5kgi1eie

5kgi1eie7#

正如我在this thread上所解释的,我发现使用一个小型付费工具FireDaemon Pro节省了我大量的时间,使我不必再尝试配置NSSM和其他免费工具。
它在后台运行良好,并随服务器沿着重新启动Selenium,这是我将Selenium Standalone Server作为Windows服务运行的主要要求。

ngynwnxp

ngynwnxp8#

这个免费的工具可能会做到这一点:http://yajsw.sourceforge.net/
要使其工作,您需要一个wrapper.conf文件和一个脚本来运行YAJSW Package 器。我花时间阅读文档,但它是一个免费的解决方案。
我编写了一个示例shared here,它将JBoss7作为Windows服务安装。
当然,你可以把我的例子简化很多。

相关问题