GitLab CI/CD流水线Selenium Chrome驱动启动异常退出问题求助
问题核心原因
- Docker executor默认无图形渲染环境,原生Chrome启动依赖GUI组件,直接运行就会触发崩溃报错
- 之前使用的headless模式配置不全才会导致测试失败,remote模式是服务地址/配置错误无法连接
修复方案
方案一:补全Headless模式参数(最省事,无需修改CI runner配置)
不要仅开启headless,需要同时关闭沙箱、共享内存限制适配Docker无GUI环境,代码修改如下:
import chromedriver_autoinstaller from selenium import webdriver from selenium.webdriver.chrome.options import Options driver = chromedriver_autoinstaller.install() options = Options() # 核心适配Docker无GUI环境的参数 options.add_argument("--headless=new") # 采用Chrome新版headless模式,兼容性更强 options.add_argument("--no-sandbox") # 关闭沙箱,Docker无root权限环境下必须配置 options.add_argument("--disable-dev-shm-usage") # 禁用/dev/shm使用,解决Docker共享内存不足导致的崩溃问题 options.add_argument("--disable-gpu") # 禁用GPU加速,无图形环境下无需开启 # 保留原有下载配置 prefs = {'profile.default_content_setting_values.automatic_downloads': 1} options.add_experimental_option("prefs", prefs) # 若使用的joyzoursky/python-chromedriver镜像已内置chromedriver和Chrome,可去掉autoinstaller直接指定路径避免版本冲突 # options.binary_location = '/usr/bin/google-chrome' # driver = webdriver.Chrome(options=options, executable_path='/usr/local/bin/chromedriver') driver = webdriver.Chrome(options=options)
如果仍有测试失败,基本是页面元素加载超时问题,补充隐式等待或显式等待即可,headless模式的页面渲染逻辑和普通模式完全一致,不存在功能差异。
方案二:修复Remote Driver配置
之前remote模式报错是因为未配置服务依赖,需要先在.gitlab-ci.yml中加入selenium standalone chrome服务,再补充ChromeOptions适配参数:
- 修改
.gitlab-ci.yml配置,添加服务声明:
your-test-job: image: python:3.8 services: - name: selenium/standalone-chrome:latest alias: selenium-standalone-chrome # 注意别名不要使用双下划线,之前填写的selenium__standalone-chrome属于地址错误 variables: SELENIUM_REMOTE_URL: http://selenium-standalone-chrome:4444/wd/hub script: - pip install selenium - python your_test_script.py
- 修改Remote Driver代码:
elif self.browser == 'remote': options = webdriver.ChromeOptions() # 同样添加适配参数 options.add_argument("--no-sandbox") options.add_argument("--disable-dev-shm-usage") options.add_argument("--headless=new") driver = webdriver.Remote(options=options, command_executor='http://selenium-standalone-chrome:4444/wd/hub')
方案三:自定义GitLab Runner(仅当上述两个方案无法满足需求时使用)
如果必须使用GUI模式运行测试,可以自行搭建带图形环境的GitLab runner,采用shell executor部署在安装了桌面环境、Chrome的物理机/虚拟机上,无需Docker环境可直接运行本地原始代码,但维护成本更高。
内容的提问来源于stack exchange,提问作者simond
相关产品推荐
相关产品推荐

