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

使用gulp-angular-protractor做E2E测试遇WebDriverError报错求助

解决 WebDriverError: Cannot define class using reflection 问题(gulp-angular-protractor + Protractor 环境)

我之前帮不少开发者排查过这个问题,这个错误大概率是ChromeDriver与Chrome浏览器版本不兼容导致的——你用的Protractor 5.1.2属于比较旧的版本,而Ubuntu系统里的Chrome通常会自动更新,新版本Chrome的内部API变化会让旧版ChromeDriver无法识别,从而抛出反射相关的错误。结合你的环境信息,给你几个具体的解决步骤:

1. 先确认Chrome和ChromeDriver的版本匹配情况

首先得搞清楚当前Vagrant虚拟机内的Chrome版本(不是宿主机):

# 先进入Vagrant虚拟机
vagrant ssh
# 查看Chrome版本
google-chrome --version

然后查看当前webdriver-manager安装的ChromeDriver版本:

webdriver-manager status

如果两者版本差距较大(比如Chrome是80+,而ChromeDriver是2.45左右),那肯定是版本不兼容的问题。

2. 安装与Chrome匹配的ChromeDriver版本

根据你查到的Chrome版本,安装对应的ChromeDriver:
比如如果你的Chrome是79.0.3945.x,就安装同系列的ChromeDriver:

webdriver-manager update --chrome --versions.chrome=79.0.3945.36

之后可以再次用webdriver-manager status确认安装成功。

3. 在Protractor配置中指定ChromeDriver路径(可选)

如果gulp-angular-protractor没有自动找到正确的ChromeDriver,可以在protractor.conf.js里手动指定路径:

exports.config = {
  // ...其他已有配置
  chromeDriver: './node_modules/protractor/node_modules/webdriver-manager/selenium/chromedriver_79.0.3945.36',
  // 注意替换成你实际安装的ChromeDriver文件名
  capabilities: {
    'browserName': 'chrome',
    // 可选:添加Chrome参数,避免一些兼容性问题
    'chromeOptions': {
      'args': ['--no-sandbox', '--disable-dev-shm-usage']
    }
  }
};

4. 确保gulp任务先执行webdriver更新

检查你的gulp任务配置,确保在运行Protractor测试前,先执行webdriver-manager的更新操作:

var gulp = require('gulp');
var protractor = require('gulp-angular-protractor');

// 定义webdriver更新任务
gulp.task('webdriver-update', protractor.webdriver_update);

// 让Protractor任务依赖webdriver-update任务
gulp.task('e2e-test', ['webdriver-update'], function(callback) {
  gulp.src(['./e2e/**/*.spec.js'])
    .pipe(protractor({
      configFile: 'protractor.conf.js',
      args: ['--baseUrl', 'http://localhost:3000'] // 替换成你的应用地址
    }))
    .on('error', function(err) {
      console.error('测试失败:', err);
      throw err;
    })
    .on('end', callback);
});

5. 极端情况:调整包版本(谨慎操作)

如果上面的方法都不行,你可以考虑:

  • 升级Protractor:比如升级到5.4.x版本(兼容Node 6.x),它支持更高版本的ChromeDriver,但注意升级后要重新更新webdriver-manager
  • 降级Chrome:如果不想动Protractor版本,可以在Vagrant虚拟机里安装对应版本的Chrome deb包,确保和现有ChromeDriver兼容

内容的提问来源于stack exchange,提问作者bijin-ab

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:17:09