You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium镜像及4.0版本发布后Pytest运行测试无限挂起问题求助

问题根因

Selenium 4.0 正式版配套的最新 standalone 系列 Docker 镜像存在两处核心变更,和旧版代码兼容性不足:

  • 镜像默认开启跨域请求校验,未配置允许来源的请求会被直接挂起,无错误返回
  • 旧版 DesiredCapabilities 类已被官方废弃,新镜像无法正确解析旧格式的参数,导致连接初始化超时无响应
  • 部分版本的镜像默认启用VNC服务的端口校验,未匹配端口规则的连接会被拦截

可行解决方案

方案1:固定镜像版本(最稳妥,无需改代码)

直接在docker-compose.yml中指定已验证可用的镜像版本,避免拉取latest标签的不稳定更新,示例配置:

selenium:
  image: selenium/standalone-chrome:4.0.0-20211025 # 替换为你确认可用的15天前对应版本号即可
  ports:
    - 4444:4444

方案2:新增镜像启动参数适配新版本

在docker-compose.yml的selenium服务配置中添加环境变量,关闭跨域校验,示例配置:

selenium:
  image: selenium/standalone-chrome:latest
  ports:
    - 4444:4444
  environment:
    SE_OPTS: "--allow-origins *"
    SE_START_VNC: "false" # 不需要VNC可关闭,进一步降低资源占用

方案3:更新代码适配Selenium 4.0新规范

替换废弃的DesiredCapabilities写法,改用官方推荐的Options类配置,同时将browser.close()替换为browser.quit()避免会话泄漏,示例代码:

from selenium.webdriver.chrome.options import Options

@pytest.fixture()
def browser():
    chrome_options = Options()
    # 基础沙箱配置,适配容器运行环境
    chrome_options.add_argument("--no-sandbox")
    chrome_options.add_argument("--disable-dev-shm-usage")
    chrome_options.add_argument("--headless=new") # 不需要可视化可开启无头模式
    browser = webdriver.Remote(
        command_executor="http://selenium:4444/wd/hub",
        options=chrome_options
    )
    browser.implicitly_wait(5)
    yield browser
    browser.quit() # 完全关闭会话,释放远程资源

方案4:固定本地Selenium版本

如果不需要使用Selenium 4.0的新特性,直接将本地依赖固定为3.x稳定版即可:

pip install selenium==3.141.0

关于collect阶段挂起的说明

Pytest在测试收集阶段会预初始化全局fixture,此时会触发Selenium远程连接请求,新镜像收到不兼容请求后不会返回错误响应,只会保持连接挂起,因此没有任何报错输出。

内容的提问来源于stack exchange,提问作者shadow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 10:54:04