【问题标题】: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
【解决方案2】:
码头工人
Docker 是一个软件容器平台,提供来自os 的虚拟化。在 Docker 中,所有软件部分都组织为容器,包括操作系统、软件、依赖项、环境变量等。容器可以在不同的用户之间共享,实现软件和服务的快速安装和运行,使 Docker 对用户友好以实现自动化测试,因为相关容器可以作为自动化测试的一部分下载并运行。 Docker 也是安全的,因为它在主机上作为独立进程运行。
需要注意的是,Docker 是隔离的、安全的和可移植的。但是,它没有 GUI,也不能以裸机速度运行。
先决条件
- Python,与 Selenium WebDriver 绑定
- 一个测试框架,例如PyTest、Nose 或 JUnit。
- ChromeDriver、GeckoDriver
- Docker(来自installation 位置)
- CI 工具,例如Jenkins 或 TeamCity。
- 可选插件,例如GitHub 用于存储库连接,Allure 用于报告或BlazeMeter 用于性能测试等。
回答您的问题:
要以可视方式查看结果,您可以使用如下所示的 Allure 报告:
结尾
How To Run Selenium WebDriver With Docker?
【解决方案3】:
我的结论是,这样做的规范方法是在 Docker 容器上使用轻量级桌面环境(例如 LXDE)运行 X。然后您可以使用 VNC 客户端连接到它。无法在主机上使用浏览器。
有关其他选项,请参阅其他答案。
【解决方案4】:
- 您可以这样做:
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 中的无头浏览器,但效果是一样的。
- 有关如何使用 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。