使用Codeception+CakePHP4测试时更换Chromium遇未知驱动错误求助
解决Codeception + CakePHP4切换到Chromium时的驱动未知错误
问题根源
你的配置存在以下关键问题:
- 安装了amd64架构的Chrome,与aarch64(ARM64)系统不兼容
- ChromeDriver和Selenium Server版本过旧,无法适配现代Chromium
- Selenium在镜像构建阶段启动,而非容器运行阶段,导致测试时无可用服务
步骤1:修正Dockerfile配置
替换原有的浏览器、驱动及Selenium安装代码,改为ARM64兼容方案:
# 安装基础依赖与ARM64版Chromium RUN apt-get update && apt-get install -y --no-install-recommends \ chromium \ chromium-driver \ openjdk-11-jre-headless \ unzip \ wget \ && rm -rf /var/lib/apt/lists/* # 下载支持ARM64的Selenium Server 4.x(示例为4.11.0版本) RUN wget -O /etc/selenium-server.jar https://github.com/SeleniumHQ/selenium/releases/download/selenium-4.11.0/selenium-server-4.11.0.jar # 创建运行时启动脚本(启动Selenium和cron) RUN echo '#!/bin/bash' > /start-services.sh && \ echo 'java -jar /etc/selenium-server.jar --port 9515 &' >> /start-services.sh && \ echo 'crond &' >> /start-services.sh && \ echo 'exec "$@"' >> /start-services.sh && \ chmod +x /start-services.sh WORKDIR $APP_HOME COPY . $APP_HOME # 安装项目依赖 RUN composer install -n # 设置容器入口点 ENTRYPOINT ["/start-services.sh"] CMD ["apache2-foreground"] # 替换为你的应用启动命令,如php-fpm等
步骤2:调整acceptance.suite.yml配置
明确指定Chromium的二进制路径,确保WebDriver正确识别:
actor: AcceptanceTester modules: enabled: - WebDriver: url: http://foo.bar port: 9515 browser: chrome capabilities: "goog:chromeOptions": binary: "/usr/bin/chromium" # 指定Chromium执行文件路径 args: ["--headless", "--disable-gpu", "--no-sandbox", "--disable-dev-shm-usage"] wait: 15 - \Helper\Acceptance - Asserts - \Helper\AcceptanceHelper
验证要点
- 容器运行后,执行
docker exec <container-id> chromium --version确认Chromium正常安装 - 执行
docker exec <container-id> chromedriver --version验证驱动版本与Chromium匹配 - 检查Selenium服务端口监听:
docker exec <container-id> netstat -tulpn | grep 9515
内容的提问来源于stack exchange,提问作者hassan
相关产品推荐
相关产品推荐

