【问题标题】:How can I run Selenium tests in a docker container with a visible browser?如何在带有可见浏览器的 docker 容器中运行 Selenium 测试?
【发布时间】:2020-05-25 22:10:01
【问题描述】:

如果我想在带有可见(非无头)浏览器的 Docker 容器中运行 Selenium 测试,我有哪些选择?

  • 是否需要使用 VNC 等远程显示查看器?
  • 是否可以在主机上使用浏览器? (即不在 Docker 容器中的浏览器)。这是如何工作的?
  • 还有其他选择吗?

【问题讨论】:

标签: docker selenium selenium-webdriver docker-compose dockerfile


【解决方案1】:

请考虑使用 Zalenium (https://opensource.zalando.com/zalenium/)。 Zalenium 的标题是 - 基于 Selenium Grid 的灵活且可扩展的容器,具有视频录制、实时预览、基本身份验证和仪表板。

如上所述,您可以查看在浏览器上运行的测试用例的实时预览。

P.S.:- Zalenium 是建立在 Selenium Grid 之上的包装器

【讨论】:

    【解决方案2】:

    码头工人

    Docker 是一个软件容器平台,提供来自 的虚拟化。在 Docker 中,所有软件部分都组织为容器,包括操作系统、软件、依赖项、环境变量等。容器可以在不同的用户之间共享,实现软件和服务的快速安装和运行,使 Docker 对用户友好以实现自动化测试,因为相关容器可以作为自动化测试的一部分下载并运行。 Docker 也是安全的,因为它在主机上作为独立进程运行。

    需要注意的是,Docker 是隔离的、安全的和可移植的。但是,它没有 GUI,也不能以裸机速度运行。


    先决条件

    • Python,与 Selenium WebDriver 绑定
    • 一个测试框架,例如PyTest、Nose 或 JUnit。
    • ChromeDriver、GeckoDriver
    • Docker(来自installation 位置)
    • CI 工具,例如JenkinsTeamCity
    • 可选插件,例如GitHub 用于存储库连接,Allure 用于报告或BlazeMeter 用于性能测试等。

    回答您的问题:

    • 我需要使用 VNC 等远程显示查看器吗?:根据文章 GUIdock-VNC: using a graphical desktop sharing system to provide a browser-based interface for containerized software Docker 可以在 Linux 主机上本地运行,而需要一个小型 Linux VM 来提供虚拟化Mac OS 和 Windows 系统上的服务。在非 Linux 系统上,单个 Docker 容器由 mini-VM、Docker 软件层和软件容器组成。但最近,Windows 和 Mac OS 增加了对操作系统级虚拟化的支持。适用于 Windows 和 Mac OS 的 Docker 测试版现已推出,允许 Docker 在本地运行。

    • 是否可以在主机上使用浏览器?:不,因为没有 UI。但是,为了直观地查看您的测试执行情况,您可以安装 X Server Display

      这样你就可以看到结果了:

    要以可视方式查看结果,您可以使用如下所示的 Allure 报告:

    • 还有其他选择吗?:还有其他一些选择。

    结尾

    How To Run Selenium WebDriver With Docker?

    【讨论】:

      【解决方案3】:

      我的结论是,这样做的规范方法是在 Docker 容器上使用轻量级桌面环境(例如 LXDE)运行 X。然后您可以使用 VNC 客户端连接到它。无法在主机上使用浏览器。

      有关其他选项,请参阅其他答案。

      【讨论】:

        【解决方案4】:
        1. 您可以这样做:

        Google Chrome 开发者工具(或 DevTools)前端是作为 HTML + CSS + JavaScript Web 应用程序实现的。它使用序列化的消息通道来与被检查的页面进行通信。最初,我们正在努力建立这种序列化的异步交互,以便将 DevTools 前端从被检查的页面进程中取出。但是一旦完成,我们可以更进一步,在浏览器之外运行 DevTools 前端。以下是您可以尝试的方法: 使用远程调试命令行开关运行您将要远程调试的 Chrome 实例:chrome.exe --remote-debugging-port=9222 --user-data-dir=remote-profile。您必须为远程会话使用不同的 Chrome 实例,这就是我们使用 --user-data-dir 参数运行它的原因。 导航到您要调试的页面。 现在运行一个常规(客户端)Chrome 实例并导航到那里的 http://localhost:9222。 您将看到许多链接,这些链接会将您带到相应页面的远程调试会话。点击它们,享受在线调试您的 Chrome 页面的乐趣

        source

        这意味着您只需启动一个打开调试端口的无头 chrome,然后您就可以从另一个 chrome 浏览器连接到该无头 chrome!

        这是一种作弊,因为您只是将主机浏览器连接到 docker-machine 中的无头浏览器,但效果是一样的。

        1. 有关如何使用 Rails 应用执行此操作的不同示例,请参阅这篇文章:

        https://avdi.codes/run-rails-6-system-tests-in-docker-using-a-host-browser/

        可以使用任意语言/框架重新创建这些步骤。

        但这确实允许您的 dockerized 应用程序控制您的主机浏览器。

        【讨论】:

          【解决方案5】:

          我需要使用 VNC 等远程显示查看器吗?

          是的。

          是否可以在主机上使用浏览器? (即浏览器是 不在 Docker 容器中)。这是如何工作的?

          没有

          我想在一个可见的 Docker 容器中运行 Selenium 测试 (非无头)浏览器,我有什么选择?

          您可以使用 Docker-Compose 来描述这样的环境。简而言之:

          • Selenium 测试在 docker 容器中运行
          • 浏览器在 docker 容器中运行,VNC 服务器可通过已发布的端口访问 Docker 主机。
          • 网站在 docker 容器中运行。
          • Selenium 测试使用映射到网站容器的主机名访问网站。

          有关工作演示,请参阅 this

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-11-12
            • 2014-12-27
            • 2011-09-16
            • 1970-01-01
            • 2016-08-21
            • 2012-08-03
            • 2019-08-25
            • 1970-01-01
            相关资源
            最近更新 更多