Docker环境下使用Selenium运行Behat测试的配置问题排查
问题分析与解决方案
从你给出的报错信息来看,这个问题大概率和Behat的Selenium客户端配置以及browser容器的Selenium服务配置不匹配有关,XpiDriverService的错误提示说明Behat尝试使用旧版的Firefox驱动(XPI格式)来连接,但Selenium 3.8.1已经需要使用GeckoDriver来驱动Firefox了。下面是具体的排查和修复步骤:
1. 检查Behat配置文件(通常是behat.yml)的Selenium部分
你的当前配置大概率存在不兼容的问题,正确的配置应该明确指定浏览器驱动类型,并启用Marionette(Selenium 3+驱动Firefox的必要参数)。示例配置如下:
default: extensions: Behat\MinkExtension: base_url: 'http://drupalfront' # 指向你的Drupal站点容器地址 sessions: selenium: selenium2: wd_host: 'http://browser:4444/wd/hub' browser: firefox capabilities: extra_capabilities: marionette: true # 必须开启,适配Selenium 3+的Firefox驱动
- 重点确认项:
browser字段是否明确设置为firefox(如果你的browser容器用的是Firefox)- 是否添加了
marionette: true配置,这是解决XpiDriverService错误的核心 wd_host地址是否与你使用的一致:http://browser:4444/wd/hub
2. 验证browser容器的Selenium服务是否包含正确驱动
如果你的browser容器使用的是官方Selenium镜像,要确保是预装GeckoDriver的版本(比如selenium/standalone-firefox,而非仅带旧版XPI驱动的镜像)。可以进入容器验证:
# 进入browser容器 docker exec -it browser bash # 检查GeckoDriver是否存在 which geckodriver
如果未找到该驱动,建议更换为对应版本的官方镜像:
docker run -d --name browser selenium/standalone-firefox:3.8.1
3. 检查Behat扩展版本兼容性
确保behat/mink-selenium2-driver版本与Selenium 3.8.1兼容,旧版本可能不支持Marionette驱动。可以通过Composer更新到适配版本:
composer require behat/mink-selenium2-driver:^1.4
4. 测试容器间的网络连通性
从drupalfront容器内部测试是否能正常访问browser的Selenium hub,排除网络问题:
# 进入drupalfront容器 docker exec -it drupalfront bash # 用curl测试连通性 curl http://browser:4444/wd/hub/status
如果返回JSON格式的状态信息,说明网络连通正常;如果无法访问,需确认两个容器是否在同一个Docker网络中。
内容的提问来源于stack exchange,提问作者Potney Switters
相关产品推荐
相关产品推荐

