量角器-黄瓜-JS-未定义步骤

时间:2019-09-20 00:46:49

标签: javascript protractor webdriver cucumberjs

我正面临着量角器中的黄瓜问题(使用Webstorm)

当我尝试运行我拥有的唯一功能时,它会显示下一条消息(我已经在类中定义了步骤)

 Undefined. Implement with the following snippet:

     Given('I open the url {string}', function (string) {
       // Write code here that turns the phrase above into concrete actions
       return 'pending';
     });
...
1 scenario (1 undefined)
4 steps (4 undefined)
0m00.000s

Process finished with exit code 1

这是我的配置文件(conf.js)

exports.config = {

framework: 'custom',
frameworkPath: require.resolve('protractor-cucumber-framework'),
seleniumAddress: 'http://localhost:4444/wd/hub',
baseUrl: 'https://www.afphabitat.cl/portalPrivado_FIXWeb/public/login.htm',
ignoreSynchronization: true,
getPageTimeout: 60000,
allScriptsTimeout: 50000,
defaultTimeoutInterval: 30000,

specs: ['features/*.feature'],
cucumberOpts: {
    compiler: [],
    require: ['step_defs/*.js'],
    dryRun  : false,
    tags: ['@wip'],
    monochrome: true,
    strict: true,
    plugin: "json",
    format: 'json:reports/cucumber-report.json',
    resultJsonOutputFile: 'reports/cucumber-report.json'
},

multiCapabilities:
    [{
        'browserName': 'chrome',
        chromeOptions: {
            binary: process.env.CHROME_BIN,
            args: ['--no-sandbox', '--start-maximized']
        }
    },
        {
            'browserName': 'firefox',
            args: ['--no-sandbox','--start-maximized']
        }],
jasmineNodeOpts: {
    showColors: true,
    defaultTimeoutInterval: 30000,
}
}

下一个是我的步骤定义文件(step_defs_Login.js)

import { Given, Then, When } from "cucumber";
import { browser, by, element, } from 'protractor';

    Given('I open the url {string}', function (string) {
        browser.get(string);
        //    callback();
    });

    When('proceed to enter my username as {string}', function (string1) {
        let username = element(by.id('j_username_input')).clear();
        username = element(by.id('j_username_input')).sendKeys(string1);
        //    callback();
    });

    When('proceed to enter my password as {string}', function (string2) {
        let password = element(by.id('j_password')).clear();
        password = element(by.id('j_password')).sendKeys(string2);
        //    callback();
    });

    Then('I have been logged in successfully', function () {
        element(by.id('button')).click();
        //   callback();
    });

别忘了 JSON文件(package.json)

    {
  "name": "package",
  "version": "1.0.0",
  "description": "First Protractor Cucumber project",
  "main": "conf.js",
  "scripts": {
    "test": "cucumberjs"
  },
  "keywords": [
    "TAE"
  ],
  "author": "zzz",
  "license": "ISC",
  "devDependencies": {
    "cucumber": "^5.1.0",
    "selenium-webdriver": "^4.0.0-alpha.5"
  },
  "dependencies": {
    "protractor": "latest"
  }
}

我不知道这是否必要,但这是我的 Hooks文件(hooks.js)

let {defineSupportCode} = require('cucumber');
defineSupportCode (function ({After, Before}){

    Before(function () {
     //   return this.driver.manage().window().maximize()
     return this.browser.manage().window().maximize();
    })

    After(function () {
        return this.driver.quit()
    })

});

我已经安装了下一个:

Protractor version 5.4.2 
Node version 10.16.3 
NPM 6.9.0

这是项目结构:

Project Structure

这是运行配置

Run Configurations

有人可以帮我吗?

3 个答案:

答案 0 :(得分:0)

尝试

require: ['../step_defs/*.js']

require: ['./step_defs/*.js']

在cucumberOpts对象中

答案 1 :(得分:0)

在功能文件中传递的字符串中是否包含有“双引号”?

I open the url "myUrl"

答案 2 :(得分:0)

看起来您正在使用Webstrom来处理这个黄瓜框架。据我所知,Webstrom将自动为该步骤找到相应的步骤定义。来到这个问题,

1)打开功能文件,并检查特定步骤是否显示为已实施 2)尝试用正则表达式(。*)替换{string},该表达式将接受任何类型的数据并检查功能文件中的同一步骤-步骤

检查以上两种情况