Docker容器中运行behave/selenium测试启动失败求助
解决Docker中Chromium/ChromeDriver启动失败(DevToolsActivePort不存在)问题
1. 优先修复ChromeDriver与Chromium版本不兼容问题
ChromeDriver必须与Chromium的主版本完全匹配,你当前使用的ChromeDriver 114.0.5735.90和Chromium 122.0.6261.128版本差距过大,这是启动失败的核心原因之一。
- 方案1:将Chromium降级至114.x版本,与现有ChromeDriver匹配
- 方案2:将ChromeDriver升级至122.0.6261.x版本,与现有Chromium匹配
示例Dockerfile中安装对应版本ChromeDriver:# 下载与Chromium 122.0.6261.128匹配的ChromeDriver RUN wget https://chromedriver.storage.googleapis.com/122.0.6261.128/chromedriver_linux64.zip && \ unzip chromedriver_linux64.zip && \ mv chromedriver /usr/local/bin/ && \ chmod +x /usr/local/bin/chromedriver && \ rm chromedriver_linux64.zip
2. 配置Chrome适配Docker环境的启动参数
在environment.py中为ChromeOptions添加无头模式及Docker专属参数,解决DevToolsActivePort文件不存在的问题:
from selenium import webdriver from selenium.webdriver.chrome.options import Options def before_all(context): chrome_options = Options() # 新版无头模式,兼容性更强 chrome_options.add_argument("--headless=new") # 禁用沙箱模式(Docker环境下必须) chrome_options.add_argument("--no-sandbox") # 禁用/dev/shm使用,避免Docker内存限制导致的崩溃 chrome_options.add_argument("--disable-dev-shm-usage") # 指定调试端口,强制生成DevToolsActivePort文件 chrome_options.add_argument("--remote-debugging-port=9222") # 可选:禁用GPU加速(部分无头环境需要) chrome_options.add_argument("--disable-gpu") # 初始化WebDriver context.driver = webdriver.Chrome(options=chrome_options) def after_all(context): if hasattr(context, 'driver'): context.driver.quit()
3. 避免以Root用户运行测试
Chrome默认禁止Root用户启动,即使加了--no-sandbox也可能出现异常。在Dockerfile中创建普通用户并切换:
RUN useradd -m selenium-user USER selenium-user
4. 确保安装Chromium依赖库
Oracle Linux 9中缺少图形依赖库会导致Chromium启动失败,在Dockerfile中添加依赖安装:
RUN dnf install -y chromium libX11 libXext libXrender libXtst libXss && \ dnf clean all
5. 检查启动脚本bdds.sh
确保脚本中没有设置多余的环境变量(如DISPLAY),并正确切换到测试目录:
#!/bin/bash # 切换到测试文件所在目录 cd /opt/behave-tests # 启动behave测试 behave features/
内容的提问来源于stack exchange,提问作者avalon20
相关产品推荐
相关产品推荐

