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

GitHub Action中Selenium启动Chrome报错:用户数据目录被占用

Selenium Chrome SessionNotCreatedException: 用户数据目录已被占用(未指定--user-data-dir)

问题场景

在GitHub Action环境中,启动Nginx、MySQL、Java容器后运行pytest自动化测试,未手动配置--user-data-dir参数,却触发如下错误:

probably user data directory is already in use, please specify a unique value for --user-data-dir argument, or don't use --user-data-dir

错误指向conftest.py中初始化WebDriver的代码:

@pytest.fixture(scope="module")
def driver(request):
    browser = request.config.getoption("browser")
    if browser == "chrome":
        option = chromeOptions()
        option.add_argument("--headless")
        option.add_argument("--no-sandbox")
        option.add_argument("--disable-dev-shm-usage")
>       driver = webdriver.Chrome(options=option)
test/conftest.py:16: 

完整报错栈:

E       selenium.common.exceptions.SessionNotCreatedException: Message: session not created: probably user data directory is already in use, please specify a unique value for --user-data-dir argument, or don't use --user-data-dir
E       Stacktrace:
E       #0 0x55c68db847ca <unknown>
E       #1 0x55c68d67c2f0 <unknown>
E       #2 0x55c68d6b3063 <unknown>
E       #3 0x55c68d6af8c6 <unknown>
E       #4 0x55c68d6fcbc9 <unknown>
E       #5 0x55c68d6fc216 <unknown>
E       #6 0x55c68d6f0753 <unknown>
E       #7 0x55c68d6bdbaa <unknown>
E       #8 0x55c68d6bedfe <unknown>
E       #9 0x55c68db4f38b <unknown>
E       #10 0x55c68db53307 <unknown>
E       #11 0x55c68db3be7c <unknown>
E       #12 0x55c68db53ec7 <unknown>
E       #13 0x55c68db2024f <unknown>
E       #14 0x55c68db732f8 <unknown>
E       #15 0x55c68db734c0 <unknown>
E       #16 0x55c68db83646 <unknown>
E       #17 0x7f4489294ac3 <unknown>

环境版本信息:

  • Google Chrome for Testing 132.0.6834.83
  • ChromeDriver 132.0.6834.83

已尝试的无效方案:

  • 添加固定路径的--user-data-dir=/tmp/chrome-user-data参数
  • 将Ubuntu从24降级到22
  • 校验Chrome与ChromeDriver版本一致性

解决方案

1. 动态生成唯一临时用户数据目录

固定路径仍可能因残留进程或并行执行冲突,改用Python的tempfile生成唯一临时目录,每个测试模块使用独立目录,用完自动清理:

import tempfile
from selenium.webdriver.chrome.options import Options as chromeOptions
from selenium import webdriver

@pytest.fixture(scope="module")
def driver(request):
    browser = request.config.getoption("browser")
    if browser == "chrome":
        option = chromeOptions()
        option.add_argument("--headless")
        option.add_argument("--no-sandbox")
        option.add_argument("--disable-dev-shm-usage")
        # 生成唯一临时目录
        with tempfile.TemporaryDirectory() as temp_dir:
            option.add_argument(f"--user-data-dir={temp_dir}")
            driver = webdriver.Chrome(options=option)
            yield driver
            driver.quit()

2. 添加额外隔离参数增强环境独立性

补充以下参数进一步隔离Chrome实例,避免环境干扰:

option.add_argument("--incognito")  # 无痕模式,避免缓存和会话共享
option.add_argument("--single-process")  # 单进程模式,减少进程间资源冲突
option.add_argument("--disable-gpu")  # 禁用GPU,无头模式下无需GPU加速

3. GitHub Action前置清理残留进程

在测试步骤前添加清理操作,确保没有残留的Chrome进程或目录:

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      # ... 其他步骤:拉代码、启动容器等
      - name: Cleanup Chrome residues
        run: |
          sudo pkill -f chrome || true
          sudo rm -rf /tmp/*chrome* || true
      - name: Run pytest
        run: pytest

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 01:05:14