webdriverio-selenium-harness
Version:
A WebdriverIO and Selenium Test Harness. Useful for bolting on integration test suite.
60 lines (49 loc) • 1.52 kB
JavaScript
var Promise = require('es6-promise').Promise
var webdriverio = require('webdriverio')
var seleniumHelper = require('./helpers/selenium')
var seleniumStub = { kill: function () {}}
function setup (opts) {
opts = formatOptions(opts)
var remoteSelenium = opts.custom.remoteSelenium
if (remoteSelenium) { return build(opts.webdriverio, seleniumStub) }
return seleniumHelper
.setup(opts.selenium)
.then(function (child) { return build(opts.webdriverio, child) })
}
function teardown (state) {
return state.browser.end().then(function () {
return seleniumHelper.teardown(state.selenium)
})
}
function build(opts, child) {
var client = makeClient(opts.remote, opts.init)
var state = makeHarnessState(client, child)
return validateState(state)
}
function formatOptions (opts) {
opts = opts || {}
opts.custom = opts.custom || {}
opts.selenium = opts.selenium || {}
opts.webdriverio = opts.webdriverio || {}
opts.webdriverio.remote = opts.webdriverio.remote || {}
opts.webdriverio.init = opts.webdriverio.init || {}
return opts
}
function makeClient (remote, init) {
return webdriverio
.remote(remote)
.init(init)
}
function makeHarnessState (client, child) {
return { browser: client, selenium: child }
}
function validateState (state) {
return state.browser
.then(function () { return state })
.catch(function (err) {
return teardown(state)
.then(function () { Promise.reject(err) })
})
}
exports.setup = setup
exports.teardown = teardown