0

我在 Cucumber 中使用量角器,首先,在没有 Cucumber 的情况下,我成功运行了测试,但是当我通过 npm 添加了 Cucumber 支持后,我得到了未定义测试的结果,见下文:

1 scenario (1 undefined)
3 steps (3 undefined)
0m00.000s
[15:04:58] I/launcher - 0 instance(s) of WebDriver still running
[15:04:58] I/launcher - chrome #01 passed
Process finished with exit code 0

这意味着 chromeDriver 启动并在几秒钟后关闭,我在两个项目上尝试过,一个在 git 上: https ://github.com/eis95/CucumberProtractorExample

所以你可以看到我是如何定义配置的,还有 packages.js 文件, 包文件:

{
  "name": "uiautomation-v2.0",
  "version": "0.0.0",
  "description": "UIAutomationV2.0",
  "main": "app.js",
  "author": {
    "name": "Eyal.Cohen"
  },
  "devDependencies": {
    "cucumber": "^2.3.1",
    "protractor-cucumber-framework": "^3.1.2"
  },
  "dependencies": {
    "@types/jasmine": "^2.5.53",
    "protractor": "latest"
  }
}


And the conf.js file:

    
        exports.config = {
    
          specs: ['features/**/*.feature'],
          //seleniumServerJar:'./node_modules/protractor/selenium/selenium-server-standalone-2.52.0.jar',
          //chromeDriver: './node_modules/protractor/selenium/chromedriver_2.21',
          seleniumAddress: 'http://localhost:4444/wd/hub',
    
          capabilities: {
            'browserName': 'chrome'
          },
    
          framework: 'custom',
          frameworkPath: require.resolve('protractor-cucumber-framework'),
    
          cucumberOpts: {
            tags: [],
            require: ['features/step_definitions/newGameSteps.js'], //'features/specSetup.js','features/**/step_definitions/**/*Steps.js'
            format: 'pretty'
          }
        };

规格:

defineSupportCode(function({Given, When, Then}) {
    Given(/^Navigate to studio url$/, function(callback) {
        //callback(null, 'pending');
        navigationSteps.navigateToStudio(data.server).then(function() {
            loginPage.userName.isDisplyed();
        })
        callback();
    });
When(/^Login with username and pass$/, function(callback) {

    navigationSteps.loginToStudio(data.username, data.password).then(function () {
        navigationSteps.navigateUrl(data.server + '/studio/#/sxp?isautomation=true').then(function () {

        })
        callback();
    });
});

Then(/^Welcome page is displayed$/, function(callback) {

    sxpSteps.sendSxp(testData.requestNewTaskSxp).then(function () {

        navigationSteps.navigateToUrl(data.server + '/studio/#/schedule').then(callback)
    });
    callback();
});

});

感谢您的帮助 谢谢

4

1 回答 1

0

根据您提供的信息,出了点问题:

  • 你的包裹说你正在使用 CucumberJS ^0.10.3
  • 您的步骤实现表明您正在使用 CucumberJS 2.x

所以请在您提供的信息中解决这个问题;-)。

话虽如此,您描述/传递承诺的问题可能与您需要在返回callback或之间进行选择的事实promises有关,请参见下面的代码示例。

在步骤之间传递值是不明智的,您应该将值保持在相同的范围内。

// With callbacks
Then(/^Submit Button is disabled$/, function(done) {
  var searchButton = element(by.buttonText('Search'));
  return expect(searchButton.isEnabled()).to.eventually.equal(false).and.notify(done);
});

// With Promises
Then(/^Submit Button is disabled$/, function() {
  var searchButton = element(by.buttonText('Search'));
  return expect(searchButton.isEnabled()).to.eventually.equal(false);
});

于 2017-07-17T10:26:47.843 回答