升级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
相关产品推荐
相关产品推荐

