selenium-runner

Run a [{url+JSTest}, ..] combo in selenium grid, in parallel, in multiple browsers

selenium-runner

Run a [{url+JSTest}, ..] combo in selenium grid, in parallel, in multiple browsers.

Basically, this module will launch a set of tests, in the browsers you want. A test is defined by a URL to visit and a JavaScript callback to execute when the page is ready.

npm install
node example

We want to check the <title> of http://www.google.com in multiple browsers. We will run the same test on http://www.yahoo.com and it will fail because the title is different.

Write your test file, it's a callback that will get a ready browser object.

check-title.js

module.exports = function checkTitle(browsercb) {
  browser.title(function(errtitle) {
    if (err !== null) cb(err);
 
    if (title === 'Google') {
      cb(null);
    } else {
      cb(new Error('UH OH Title is not ok! Are you on google.com?'));
    }
  });
}
  • remoteCfg: Where is the selenium grid, you can also use saucelabs
  • browsers: On which browsers to launch every test
  • concurrency: How many tests a browser can launch in parallel

config.json

{
  "remoteCfg": {
    "host": "127.0.0.1",
    "port": 4444
  },
  "browsers": [{
    "browserName": "internet explorer",
    "version": "9"
  }, {
    "browserName": "chrome",
    "version": "latest"
  }],
  "concurrency": 2
}

launcher.js

var seleniumRunner = require('selenium-runner');
 
// tests to run 
var tests = [{
  url: 'http://www.google.com',
  exec: require('./check-title.js')
}, {
  url: 'http://www.yahoo.com',
  exec: require('./check-title.js')
}];
 
var config = require('./config.json');
 
// launch tests 
seleniumRunner(config, tests, testCallback, endCallback);
 
// For each browser, you get the result of calling your test (check-title) here 
// You always get the context: browser + called url 
function testCallback(errcontext) {
  console.log('A test finished', arguments);
}
 
// Called when all tests have finished/or an error popped while connecting to the grid 
// It will not get called when an error is emitted from a test 
function endCallback(err) {
  console.log('All tests ended', arguments);
}
-> % node example
A test finished { '0': null,
  '1': 'http://www.google.com on {"browserName":"chrome","version":"latest"}' }
A test finished { '0': [Error: UH OH Title is not ok! Are you on google.com?],
  '1': 'http://www.yahoo.com on {"browserName":"chrome","version":"latest"}' }
A test finished { '0': null,
  '1': 'http://www.google.com on {"browserName":"internet explorer","version":"8"}' }
A test finished { '0': [Error: UH OH Title is not ok! Are you on google.com?],
  '1': 'http://www.yahoo.com on {"browserName":"internet explorer","version":"8"}' }
All tests ended { '0': null }