"use strict"; /** * This is a base driver provider class. * It is responsible for setting up the account object, tearing * it down, and setting up the driver correctly. */ var q = require("q"); var selenium_webdriver_1 = require("selenium-webdriver"); var DriverProvider = (function () { function DriverProvider(config) { this.config_ = config; this.drivers_ = []; } /** * Get all existing drivers. * * @public * @return array of webdriver instances */ DriverProvider.prototype.getExistingDrivers = function () { return this.drivers_.slice(); // Create a shallow copy }; /** * Create a new driver. * * @public * @return webdriver instance */ DriverProvider.prototype.getNewDriver = function () { var builder = new selenium_webdriver_1.Builder() .usingServer(this.config_.seleniumAddress) .usingWebDriverProxy(this.config_.webDriverProxy) .withCapabilities(this.config_.capabilities); if (this.config_.disableEnvironmentOverrides === true) { builder.disableEnvironmentOverrides(); } var newDriver = builder.build(); this.drivers_.push(newDriver); return newDriver; }; /** * Quit a driver. * * @public * @param webdriver instance */ DriverProvider.prototype.quitDriver = function (driver) { var driverIndex = this.drivers_.indexOf(driver); if (driverIndex >= 0) { this.drivers_.splice(driverIndex, 1); } var deferred = q.defer(); if (driver.getSession() === undefined) { deferred.resolve(); } else { driver.getSession() .then(function (session_) { if (session_) { driver.quit().then(function () { deferred.resolve(); }); } else { deferred.resolve(); } }) .catch(function (err) { deferred.resolve(); }); } return deferred.promise; }; /** * Default update job method. * @return a promise */ DriverProvider.prototype.updateJob = function (update) { return q.fcall(function () { }); }; ; /** * Default setup environment method. * @return a promise */ DriverProvider.prototype.setupEnv = function () { return q.fcall(function () { }); }; ; /** * Teardown and destroy the environment and do any associated cleanup. * Shuts down the drivers. * * @public * @return {q.promise} A promise which will resolve when the environment * is down. */ DriverProvider.prototype.teardownEnv = function () { var _this = this; return q.all(this.drivers_.map(function (driver) { return _this.quitDriver(driver); })); }; return DriverProvider; }()); exports.DriverProvider = DriverProvider;