Search code examples
protractorcucumbercucumberjs

Why protractor cucumber is not able to locate step file with latest version of Cucumber in Protractor Cucumber framework


I'm working with protractor cucumber framework and since from the long time i observed is cucumber is not able to find the spec file in the project. I have used the cucumber latest version 6.0.3 it is not able to find the spec file but same code i have run using the cucumber 1.3.3.. can any body tell me what's the difference with this versions? is there any thing i need to update for 6.0.3

Cucumber Dependency - 1.3.3

"cucumber": {
      "version": "1.3.3",
      "resolved": "https://registry.npmjs.org/cucumber/-/cucumber-1.3.3.tgz",
      "integrity": "sha1-Za+2Xy+T9y2teN8qterPFGCf7C8=",
      "requires": {
        "camel-case": "^3.0.0",
        "cli-table": "^0.3.1",
        "co": "^4.6.0",
        "colors": "^1.1.2",
        "commander": "^2.9.0",
        "duration": "^0.2.0",
        "figures": "1.7.0",
        "gherkin": "^4.1.0",
        "glob": "^7.0.0",
        "is-generator": "^1.0.2",
        "lodash": "^4.0.0",
        "stack-chain": "^1.3.5",
        "stacktrace-js": "^1.3.0"
      }

Cucumber Dependency 6.0.3 Latest


"cucumber": {
      "version": "6.0.3",
      "resolved": "https://registry.npmjs.org/cucumber/-/cucumber-6.0.3.tgz",
      "integrity": "sha512-FSx7xdAQfFjcxp/iRBAuCFSXp2iJP1tF2Q5k/a67YgHiYbnwsD9F+UNv9ZG90LFHNsNQhb+67AmVxHkp4JRDpg==",
      "dev": true,
      "requires": {
        "assertion-error-formatter": "^3.0.0",
        "bluebird": "^3.4.1",
        "cli-table3": "^0.5.1",
        "colors": "^1.1.2",
        "commander": "^3.0.1",
        "cucumber-expressions": "^8.0.1",
        "cucumber-tag-expressions": "^2.0.2",
        "duration": "^0.2.1",
        "escape-string-regexp": "^2.0.0",
        "figures": "^3.0.0",
        "gherkin": "5.0.0",
        "glob": "^7.1.3",
        "indent-string": "^4.0.0",
        "is-generator": "^1.0.2",
        "is-stream": "^2.0.0",
        "knuth-shuffle-seeded": "^1.0.6",
        "lodash": "^4.17.14",
        "mz": "^2.4.0",
        "progress": "^2.0.0",
        "resolve": "^1.3.3",
        "serialize-error": "^4.1.0",
        "stack-chain": "^2.0.0",
        "stacktrace-js": "^2.0.0",
        "string-argv": "^0.3.0",
        "title-case": "^2.1.1",
        "util-arity": "^1.0.2",
        "verror": "^1.9.0"
      }

StepDef

module.exports=function(){
    this.Given(/^Open the browser and Load the URL$/,async function(){
        await firstBrowser.get(properties.get("url1"));
        browser.logger.info("Title of the window is :"+await browser.getTitle());
        //screenshots.takesScreenshot("filename");
    });
    
    this.When(/^User entered the text in the search box$/,async function(){
        firstBrowser.sleep(3000);
        await page1.email().sendKeys(testData.Login.CM[0].Username);
        browser.sleep(3000);
        await page1.password().sendKeys(testData.Login.CM[0].Password);
    });
}

Config File

exports.config = {

//seleniumAddress: 'http://localhost:4444/wd/hub',
getPageTimeout: 60000,
allScriptsTimeout: 500000,
directConnect:true,

framework: 'custom',
// path relative to the current config file
frameworkPath: require.resolve('protractor-cucumber-framework'),
capabilities: {
    'browserName': 'chrome'
},
ignoreUncaughtExceptions:true,
// Spec patterns are relative to this directory.
specs: [
    'H:\\workspace\\Protractor_Cucumber\\src\\FeatureFiles\\Test.feature'
],

cucumberOpts: {
    require: 'H:\\workspace\\Protractor_Cucumber\\src\\StepDefFiles\\*.js',
    tags: false,
    profile: false,
    'no-source': true
},
 onPrepare: function () {
     browser.waitForAngularEnabled(false);
const {Given, Then, When, Before} = require('cucumber');

  }
};

i didn't used any cucumber hooks in my test scripts.. What makes them to work different, can some help in this?


Solution

  • One reason is Then/When/Given usage change in cucumber 6.x, you can change few step functions to verify this.

    For 1.x step function file looks like

    module.exports = function () {
    
      this.Then(/^Then the response status is (.*)$/, function (status) {
        assert.equal(this.responseStatus, status)
      });
      this.When(//, ...)
    }
    

    For 6.x step function file looks like

    const { Then, When } = require('cucumber');
    
    Then(/^the response status is (.*)$/, function (status) {
      assert.equal(this.responseStatus, status)
    });
    
    When(//,...)
    

    Another possible reason is need to upgrade protractor-cucumber-framework version which is compatible with the [email protected]