Created
March 18, 2015 12:53
-
-
Save mistakster/26fc3d1e7b429953e434 to your computer and use it in GitHub Desktop.
Node.js + mocha + selenium-webdriver
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var SeleniumServer = require('selenium-webdriver/remote').SeleniumServer; | |
var webdriver = require('selenium-webdriver'); | |
var promise = webdriver.promise; | |
var path = require('path'); | |
var SELENIUM_SERVER_JAR = path.resolve(__dirname, 'selenium-server-standalone-2.45.0.jar'); | |
function DriverProvider() { | |
this._server = null; | |
this._driver = null; | |
} | |
DriverProvider.prototype = { | |
startServer: function () { | |
this._server = new SeleniumServer(SELENIUM_SERVER_JAR, {port: 4444}); | |
return this._server.start(); | |
}, | |
stopServer: function () { | |
return this._server.stop(); | |
}, | |
buildDriver: function () { | |
this._driver = new webdriver.Builder() | |
.usingServer(this._server.address()) | |
.forBrowser(webdriver.Browser.FIREFOX) | |
.build(); | |
if (!this._driver) { | |
throw new Error('Unable to build driver'); | |
} | |
return promise.fulfilled(this._driver); | |
}, | |
destroyDriver: function () { | |
return this._driver ? | |
this._driver.quit() : | |
promise.rejected(new Error('No driver was found')); | |
}, | |
getDriver: function () { | |
return this._driver; | |
}, | |
startUp: function () { | |
var flow = promise.controlFlow(); | |
return promise.all([ | |
flow.execute(this.startServer.bind(this)), | |
flow.execute(this.buildDriver.bind(this)) | |
]); | |
}, | |
tearDown: function () { | |
var flow = promise.controlFlow(); | |
return promise.all([ | |
flow.execute(this.destroyDriver.bind(this)), | |
flow.execute(this.stopServer.bind(this)) | |
]); | |
} | |
}; | |
module.exports = exports = DriverProvider; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var DriverProvider = require('./driver-provider'); | |
var test = require('selenium-webdriver/testing'); | |
test.describe('Page', function () { | |
var driverProvider = new DriverProvider(); | |
test.before(function () { | |
return driverProvider.startUp(); | |
}); | |
test.after(function () { | |
return driverProvider.tearDown(); | |
}); | |
test.it('should be valid', function () { | |
var driver = driverProvider.getDriver(); | |
// ...actual tests here | |
}); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@mekdev, sorry for my late reply.
These methods are binded to the DriverProvider instance. This instance can handle only one server and one driver instance. If you want to run 2 (or more) browser then you need more complicated logic in the
buildDriver()
andgetDriver()
methods.