【问题标题】:Running Selenium Server & ChromeDriver as a Windows Service将 Selenium Server 和 ChromeDriver 作为 Windows 服务运行
【发布时间】:2014-12-15 04:34:54
【问题描述】:

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

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

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

我们有一个专门用于运行这些测试的 Windows 桌面。这包含我们的标准企业版 Windows 7。这台机器将根据 IT 部门的更新政策定期重启。

为了确保 Selenium 服务器始终运行,我们将 Selenium 服务器(以“节点”模式运行)添加为 Windows 服务。 selenium 服务器配置为启动 ChromeDriver 以调用模拟的用户交互。

但是,当从 CI 运行测试时,它们会因超时而失败。我们的工作原理是,运行服务的系统用户不能创建交互式窗口。网络搜索提到了“会话 0”问题,但几乎没有关于如何前进的建设性建议。

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


我们如何在系统重新启动时通过 Windows 服务启动 Selenium Server 实例,从而能够启动 Chrome 实例?

【问题讨论】:

    标签: selenium selenium-webdriver webdriver


    【解决方案1】:

    使用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 变量并以管理员身份从控制台运行


    更新 2021 年 4 月

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

    【讨论】:

    • 当我弄清楚 NSSM 代表什么时,我笑了。
    • 它成功了,但现在截图看起来像黑屏。
    • 看起来这是 IE 问题
    • 嗨!这是一个非常古老的问题,但我遇到了同样的问题,我收到错误“开始:系统找不到指定的文件”。 .请帮忙。我尝试了我在互联网上看到的所有内容,但似乎没有任何效果。谢谢。
    • @SMDC 如果您能提供更多详细信息,我相信您会得到帮助
    【解决方案2】:

    现在你无能为力 - 它曾经在会话 0 中运行良好,但在 chrome 更新后的过去几天里,它仅适用于交互式会话。

    相关错误:

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

    【讨论】:

    • 您是否知道某个特定版本的 Chrome 可在会话 0 中使用?如果我可以简单地降级,那么这将是一个选择。
    • Chrome 38 之前的版本都可以作为 Windows 服务正常工作。从版本 38 开始 - 我的带有 selenium 的 Windows 服务不起作用。降级 Chrome 为我解决了问题
    • 我可以确认@razon 在说什么。 Chrome 37 是在服务下运行时工作的最后一个已知版本。
    • 距离上次对此发表评论已经有一段时间了。更高版本的 chrome 仍然无法使用吗?
    【解决方案3】:

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

    【讨论】:

    • 同意 :( 您可以使用 nssm 将集线器作为服务启动,但如果节点作为服务启动,您将无法“看到”浏览器。对某些人来说可能不是问题但它适合我。所以节点作为批处理文件运行。要开始自动将其添加到“启动”文件夹中或创建一个更棘手的任务计划程序。
    • FWIW 我一直在使用 Selenium Grid,集线器和节点使用 WinSW github.com/winsw/winsw 作为 Windows 服务运行。自 2014 年以来一直在为 2 个不同的团队执行此操作。 Chrome 仍然只是无头运行,而不是在 GUI 模式下运行。我已经尝试了 Windows 服务的所有权限组合,但它从未作为 GUI 启动。
    【解决方案4】:

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

    做什么:

    这样,节点将作为服务运行,在机器重新启动后仍然可以使用最新版本的 Chrome。

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

        我们不使用 selenium GRID,我们对其稳定性感到失望。我们使用一个“Jenkins Grid”,即各种服务器上的 jenkins slaves 节点。

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

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

        【讨论】:

          【解决方案7】:

          正如我在this thread 中解释的那样,我发现使用小型付费工具FireDaemon Pro 为我节省了大量尝试配置 NSSM 和其他免费工具的时间。

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

          【讨论】:

            【解决方案8】:

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

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

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

            当然,你可以大大简化我的例子。

            【讨论】:

            • 欢迎提供解决方案的链接,但请确保您的答案在没有它的情况下有用:add context around the link 这样您的其他用户就会知道它是什么以及为什么会出现,然后引用最相关的内容您链接到的页面的一部分,以防目标页面不可用。 Answers that are little more than a link may be deleted.
            • 当然,我会更新,但这个线程中的其他答案也有同样的问题。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-08-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多