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
相关产品推荐
相关产品推荐

