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

Selenium Grid4.2.1运行测试报无法找到POST /session处理程序异常

异常产生原因
  • 触发Unable to find handler for (POST) /session的核心原因是Selenium Grid请求地址配置错误。Selenium Grid 4.x 采用分布式组件架构,5555是Node节点的内部通信端口,仅用于节点与Hub/Router之间的状态上报、事件同步,不对外提供WebDriver会话服务;所有测试侧的请求(包括创建会话的POST /session接口)必须发送给Router组件的监听端口,Grid 4默认Router端口为4444。当前代码直接将请求发送到Node的5555端口,该端口没有对应路径的请求处理器,直接抛出该异常。
  • 现有代码还存在两处会导致后续执行失败的隐患:
    • pytest fixture未将初始化完成的driver实例注入测试上下文,用例中调用self.driver时会直接抛出属性不存在错误
    • 代码使用的DesiredCapabilities.CHROME传参方式在新版Selenium客户端中已被标记为废弃,存在版本兼容问题
排查解决步骤
  • 修正Grid连接地址
    将代码中grid_url的端口从Node的5555改为Grid Router的监听端口(默认4444),地址格式为http://<Hub部署机器的IP>:4444。

    地址校验技巧:在浏览器访问http://<HubIP>:4444/ui,能正常打开Grid控制台页面就说明Router地址和端口连通正常。

  • 修复fixture的实例传递逻辑
    在fixture中通过request.cls将driver绑定到测试类实例上,保证测试用例可以通过self.driver正常获取驱动对象。
  • 替换废弃的配置写法
    弃用旧的DesiredCapabilities传参方式,改用ChromeOptions传递浏览器配置,兼容新版Selenium客户端与Grid版本。

修正后的conftest.py代码如下:

import pytest
from selenium import webdriver
from selenium.webdriver.chrome.options import Options


@pytest.fixture()
def setup(request):
    # 替换为实际部署的Grid Router地址
    grid_url = "http://192.168.88.189:4444"
    chrome_options = Options()
    # 可按需添加启动参数,比如无头模式、禁用沙箱等
    driver = webdriver.Remote(
        command_executor=grid_url,
        options=chrome_options
    )
    driver.maximize_window()
    # 绑定driver到测试类实例
    request.cls.driver = driver
    yield driver
    # quit方法会自动完成驱动、连接的资源释放,无需额外调用close、stop_client
    driver.quit()

如果修正地址后仍然报错,可以先在Grid控制台确认Chrome节点是否处于正常可用的已注册状态,再检查测试执行机器与Hub机器的4444端口是否存在防火墙、安全组拦截,保证网络连通。

内容的提问来源于stack exchange,提问作者Łukasz Kaznodzieja

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 09:12:30