可通过Docker容器运行Selenium自动化测试,核心是打包浏览器、WebDriver和测试代码以提升可移植性与CI/CD兼容性;推荐使用selenium/standalone-chrome官方镜像或自定义Python镜像,注意Chromium与ChromeDriver版本匹配,并配置--shm-size=2g;测试脚本需通过Remote连接Selenium Hub(如http://selenium-hub:4444/wd/hub),启用headless及--no-sandbox等参数;Docker Compose编排建议分离selenium-hub与test-runner服务,挂载脚本并设置网络依赖;调试时可用ping、logs、VNC等方式排查问题,脚本应加入显式等待与异常处理。

可以通过 Docker 容器运行 Selenium 自动化测试脚本,核心是把浏览器(如 Chrome)、WebDriver 和你的测试代码打包进容器,避免本地环境依赖问题,提升可移植性和 CI/CD 兼容性。
准备带浏览器和 WebDriver 的基础镜像
Selenium 官方提供了 selenium/standalone-chrome 镜像,已预装 Chrome 浏览器、ChromeDriver 和 Selenium Server,适合快速启动。你也可以基于 python:3.11-slim 自定义构建,安装 selenium、chromium 和 chromium-driver(Debian/Ubuntu 系)或对应包(Alpine 用 chromium + chromedriver)。
- 使用官方镜像时,无需额外配置 WebDriver 路径,Selenium 会自动发现
- 自定义镜像需注意 Chromium 版本与 chromedriver 版本严格匹配,否则启动失败
- 推荐添加
--shm-size=2g启动参数,防止 Chrome 因共享内存不足崩溃
编写兼容容器环境的测试脚本
脚本需适配无图形界面(headless)和远程 WebDriver 模式。不要用 webdriver.Chrome() 直连本地浏览器,而应通过 Remote 连接容器内或同网络的 Selenium Server。
- 连接地址写成
http://selenium-hub:4444/wd/hub(Docker Compose 场景)或http://localhost:4444/wd/hub(单容器调试) - 启用 headless 模式:
options.add_argument('--headless=new')(Chrome 116+ 推荐) - 添加必要参数避免容器中启动失败:
--no-sandbox、--disable-dev-shm-usage、--disable-gpu - 示例初始化方式:
driver = webdriver.Remote(command_executor='http://selenium-hub:4444/wd/hub',options=options)
用 Docker Compose 编排测试环境
这是最常用、最清晰的方式:一个容器跑 Selenium Hub(或 Standalone),另一个容器挂载并运行你的测试脚本。
- 在
docker-compose.yml中定义selenium-hub和test-runner两个服务 -
test-runner使用 Python 镜像,volumes挂载本地测试脚本和requirements.txt - 设置
depends_on和同一network,确保test-runner能解析selenium-hub主机名 - 启动后自动执行
python test_login.py,输出日志直接可见
运行与调试技巧
首次运行建议加 -it 参数进入交互模式,便于排查连接超时、元素找不到等常见问题。
- 检查容器间网络连通性:
docker exec -it test-runner ping selenium-hub - 查看 Selenium Hub 日志:
docker logs selenium-hub,确认 session 创建成功 - 临时开启 GUI 调试:给 standalone-chrome 加
-e SE_NODE_OVERRIDE_MAX_SESSIONS=1并映射 VNC 端口(5900),用 VNC 客户端查看浏览器行为 - 测试脚本建议加上显式等待和异常捕获,避免因页面加载慢导致容器内测试随机失败

















