node package manager

cucumberjs-chromedriver

integrating chromedriver with cucumberjs so you don't have to

cucumberjs-chromedriver

Making local BDD easier.

Getting started

npm install cucumberjs -g
npm install cucumberjs-chromedriver --save-dev

create a feature ./example.feature

Feature: Example feature
  As a user of cucumber.js
  I want to have documentation on cucumber
  So that I can concentrate on building awesome applications
 
  Scenario: Reading documentation
    When I am on the Cucumber.js GitHub repository
    Then I should see "cucumber" in the page title

create a world file ./local-world.js

module.exports = require('cucumberjs-chromedriver');

this injects cucumberjs-chromedriver into the necessary hooks to start and stop the chromedriver. See Api for more advanced topics.

create a step file ./example.steps.js

var chai = require("chai"),
    chaiAsPromised = require('chai-as-promised');
 
chai.should();
 
chai.use(chaiAsPromised);
 
module.exports = function () {
    this.When(/^I am on the Cucumber.js GitHub repository$/, function () {
        return this.browser.get('./');
    });
 
    this.Then(/^I should see "(.*)" in the page title$/, function (title) {
        return this.browser.title().should.eventually.contain(title);
  });
};

notice this is requiring more npm installs (but you don't have to use chai if you don't want to)

npm install chai --save-dev
npm install chai-as-promised --save-dev

And run your tests...

cucumberjs example.feature -r local-world.js -r example.steps.js --contentPath=http://github.com/cucumber/cucumber-js/

cucumberjs has conventions so you don't have to be so explicity, but I find them to confuse more than help...

Api

What is injected into the World?

property description
browser this is a browser instance from wd.js
browser.pause() returns a promise that will never resolve. This makes it easy to stop a test at a certain point in the workflow to manually inspect in the chromedriver browser. Ctr+C to kill the process.
browser.SPECIAL_KEYS wd Special Keys so you don't need to require wd just for the keys

How do I debug what webdriver is doing?

Pass debug through the CLI --debug when starting cucumberjs and it will output webdriver debugging.

How do I extend the world?

module.exports = function(){
    // you can pass `contentPath` or `debug` through here instead of the CLI if you want 
    require('cucumberjs-chromedriver').call(this, { contentPath : 'http://localhost:8001' });
 
    // cache the World factory provided by `cucumberjs-chromedriver` 
    var chromeDriverWorldFactory = this.World;
    // create a new WorldFactory 
     this.World = function(callback){
      // now you can do stuff before 
         chromeDriverWorldFactory(function(theirWorld){
             // or after, like extending the world 
             var myWorld = Object.create(theirWorld);
             myWorld.jon = 'hoguet';
             // finally pass the world to the callback (which becomes the `this` for all scenarios) 
             callback(myWorld);
         });
     };
};

Running Locally

npm install
npm test