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
Make sure to edit the config.json with your BrowserStack username and access key.
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(browser, cb) {
browser.title(function(err, title) {
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 BrowserStack
- browsers: On which browsers to launch every test
- concurrency: How many tests a browser can launch in parallel
config.json
{
"remoteCfg": {
"host": "hub.browserstack.com",
"port": 80
},
"browsers": [{
"browserName": "internet explorer",
"version": "10.0",
"browserstack.user": "<browserstack.user>",
"browserstack.key": "<browserstack.key>"
}, {
"browserName": "chrome",
"version": "22.0",
"browserstack.user": "<browserstack.user>",
"browserstack.key": "<browserstack.key>"
}],
"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: {url: 'http://', browser: {browserName: '', version: }}
function testCallback(err, context) {
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
You should get 4 test callbacks and one end callback
A test finished { '0': null,
'1':
{ url: 'http://www.google.com',
browser: { browserName: 'internet explorer', version: '9' } } }
A test finished { '0': null,
'1':
{ url: 'http://www.google.com',
browser: { browserName: 'chrome', version: 'latest' } } }
A test finished { '0': [Error: UH OH Title is not ok! Are you on google.com?],
'1':
{ url: 'http://www.yahoo.com',
browser: { browserName: 'chrome', version: 'latest' } } }
A test finished { '0': [Error: UH OH Title is not ok! Are you on google.com?],
'1':
{ url: 'http://www.yahoo.com',
browser: { browserName: 'internet explorer', version: '9' } } }
All tests ended { '0': null }