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

使用Protractor5.2.2+Cucumber3.2.0运行cucumber-js遇browser未定义错误

解决Protractor + Cucumber中"browser is not defined"的问题

这个问题的核心原因有两个:一是你可能直接用cucumber-js命令运行测试,而非通过Protractor启动;二是Cucumber 3.x默认不会自动将Protractor的全局browser变量注入到它的步骤执行上下文中。下面是具体的解决步骤:

1. 用Protractor命令启动测试(关键)

不要直接运行cucumber-js,因为这样不会触发Protractor的初始化流程,自然不会加载browser等全局变量。正确的做法是通过Protractor配置文件启动:

protractor your-protractor-config.js

你的Protractor配置文件(比如protractor.conf.js)需要指定使用protractor-cucumber-framework作为测试框架,示例配置如下:

exports.config = {
  seleniumAddress: 'http://localhost:4444/wd/hub',
  framework: 'custom',
  // 指定cucumber框架的路径
  frameworkPath: require.resolve('protractor-cucumber-framework'),
  // 指向你的feature文件
  specs: ['./features/**/*.feature'],
  cucumberOpts: {
    // 指向你的步骤定义文件
    require: ['./step-definitions/**/*.js'],
    // 可选:添加cucumber的其他参数,比如格式化输出
    format: 'pretty'
  }
};

2. 让步骤定义能访问browser变量

有两种常用的方式可以实现:

方式一:手动引入Protractor的browser

直接在你的步骤定义文件顶部引入Protractor的browser对象,这样就能在步骤里直接使用:

var { defineSupportCode } = require('cucumber');
// 手动引入browser
const { browser } = require('protractor');

defineSupportCode(function ({ setDefaultTimeout, When }) {
  setDefaultTimeout(60 * 1000);
  When(/^I go to "(.*)"$/, function (url, callback) {
    browser.get(url).then(callback);
  });
});

方式二:通过Cucumber World对象注入(推荐)

这种方式更符合Cucumber的设计模式,把browser附加到自定义的World对象中,所有步骤都可以通过this.browser访问:

首先创建一个world.js文件:

const { setWorldConstructor } = require('cucumber');
const { browser } = require('protractor');

class CustomWorld {
  constructor() {
    this.browser = browser;
  }
}

setWorldConstructor(CustomWorld);

然后在Protractor配置的cucumberOpts.require里添加这个文件:

cucumberOpts: {
  require: ['./world.js', './step-definitions/**/*.js'],
  // 其他参数...
}

最后修改步骤定义,使用this.browser:

var { defineSupportCode } = require('cucumber');

defineSupportCode(function ({ setDefaultTimeout, When }) {
  setDefaultTimeout(60 * 1000);
  When(/^I go to "(.*)"$/, function (url, callback) {
    this.browser.get(url).then(callback);
  });
});

3. 检查依赖是否安装完整

确保你已经安装了所有必要的依赖:

npm install protractor cucumber protractor-cucumber-framework --save-dev

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:51:40