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

升级Firefox 59及Selenium 3.11.0后Protractor测试遇循环对象值错误求助

解决Firefox 59 + Selenium 3.11.0 + Protractor的"cyclic object value"错误

嘿,这个问题我之前帮团队踩过坑!升级Firefox 59搭配Selenium 3.11.0时确实容易遇到这个循环对象值的错误,大概率是GeckoDriver兼容性或者配置的问题,给你几个实测有效的解决方向:

  • 检查并匹配GeckoDriver版本
    Selenium 3.11.0和Firefox 59的适配需要特定版本的GeckoDriver,推荐使用v0.20.1(这个版本专门修复了不少循环引用相关的bug)。你可以先在终端运行geckodriver --version确认当前版本,如果不对的话:

    • 手动下载对应版本替换到你的webdriver目录
    • 或者用Protractor自带的webdriver-manager更新:
      webdriver-manager update --gecko --versions.gecko=0.20.1
      
  • 调整Protractor的Firefox配置
    在你的protractor.conf.js里显式配置Firefox的Marionette驱动和相关参数,避免默认配置的兼容性问题:

    exports.config = {
      // ...其他配置
      capabilities: {
        browserName: 'firefox',
        marionette: true, // 显式启用Marionette(Selenium 3.x默认启用,但显式设置更稳妥)
        'moz:firefoxOptions': {
          args: ['--no-sandbox', '--disable-gpu'], // 解决Linux环境下的权限或渲染问题
          prefs: {
            'dom.disable_open_during_load': false // 避免某些DOM加载时的循环引用问题
          }
        }
      }
    };
    
  • 优化测试代码的元素调用方式
    有时候链式调用元素方法会触发循环引用问题,建议把元素定位和方法调用分开写:

    // 不推荐:链式调用
    element(by.css('.submit-btn')).click().then(() => {
      // 后续操作
    });
    
    // 推荐:分开定位和调用
    const submitBtn = element(by.css('.submit-btn'));
    submitBtn.click().then(() => {
      // 后续操作
    });
    

    如果用了自定义的元素定位器(by.xxx的自定义实现),也要检查是否返回了带有循环引用的对象。

  • 临时降级Firefox(备选方案)
    如果上面的方法都没解决,可以暂时把Firefox降级到57或58版本,这两个版本和Selenium 3.11.0的兼容性更稳定,等后续GeckoDriver更新后再尝试升级Firefox。

另外,你可以开启详细日志排查更具体的问题,在capabilities里添加日志配置:

loggingPrefs: {
  browser: 'ALL',
  driver: 'ALL'
}

这样能看到浏览器和驱动的详细日志,帮你定位到底是哪个环节出现了循环引用。

内容的提问来源于stack exchange,提问作者Eddie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:42:54