123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- /*
- * This is an implementation of the Local Driver Provider.
- * It is responsible for setting up the account object, tearing
- * it down, and setting up the driver correctly.
- *
- * TODO - it would be nice to do this in the launcher phase,
- * so that we only start the local selenium once per entire launch.
- */
- const fs = require("fs");
- const path = require("path");
- const q = require("q");
- const exitCodes_1 = require("../exitCodes");
- const logger_1 = require("../logger");
- const driverProvider_1 = require("./driverProvider");
- const SeleniumConfig = require('webdriver-manager/built/lib/config').Config;
- const remote = require('selenium-webdriver/remote');
- let logger = new logger_1.Logger('local');
- class Local extends driverProvider_1.DriverProvider {
- constructor(config) {
- super(config);
- this.server_ = null;
- }
- /**
- * Helper to locate the default jar path if none is provided by the user.
- * @private
- */
- addDefaultBinaryLocs_() {
- if (!this.config_.seleniumServerJar) {
- logger.debug('Attempting to find the SeleniumServerJar in the default ' +
- 'location used by webdriver-manager');
- try {
- let updateJson = path.resolve(SeleniumConfig.getSeleniumDir(), 'update-config.json');
- let updateConfig = JSON.parse(fs.readFileSync(updateJson).toString());
- this.config_.seleniumServerJar = updateConfig.standalone.last;
- }
- catch (err) {
- throw new exitCodes_1.BrowserError(logger, 'No update-config.json found.' +
- ' Run \'webdriver-manager update\' to download binaries.');
- }
- }
- if (!fs.existsSync(this.config_.seleniumServerJar)) {
- throw new exitCodes_1.BrowserError(logger, 'No selenium server jar found at ' + this.config_.seleniumServerJar +
- '. Run \'webdriver-manager update\' to download binaries.');
- }
- if (this.config_.capabilities.browserName === 'chrome') {
- if (!this.config_.chromeDriver) {
- logger.debug('Attempting to find the chromedriver binary in the default ' +
- 'location used by webdriver-manager');
- try {
- let updateJson = path.resolve(SeleniumConfig.getSeleniumDir(), 'update-config.json');
- let updateConfig = JSON.parse(fs.readFileSync(updateJson).toString());
- this.config_.chromeDriver = updateConfig.chrome.last;
- }
- catch (err) {
- throw new exitCodes_1.BrowserError(logger, 'No update-config.json found. ' +
- 'Run \'webdriver-manager update\' to download binaries.');
- }
- }
- // Check if file exists, if not try .exe or fail accordingly
- if (!fs.existsSync(this.config_.chromeDriver)) {
- if (fs.existsSync(this.config_.chromeDriver + '.exe')) {
- this.config_.chromeDriver += '.exe';
- }
- else {
- throw new exitCodes_1.BrowserError(logger, 'Could not find chromedriver at ' + this.config_.chromeDriver +
- '. Run \'webdriver-manager update\' to download binaries.');
- }
- }
- }
- if (this.config_.capabilities.browserName === 'firefox') {
- if (!this.config_.geckoDriver) {
- logger.debug('Attempting to find the gecko driver binary in the default ' +
- 'location used by webdriver-manager');
- try {
- let updateJson = path.resolve(SeleniumConfig.getSeleniumDir(), 'update-config.json');
- let updateConfig = JSON.parse(fs.readFileSync(updateJson).toString());
- this.config_.geckoDriver = updateConfig.gecko.last;
- }
- catch (err) {
- throw new exitCodes_1.BrowserError(logger, 'No update-config.json found. ' +
- 'Run \'webdriver-manager update\' to download binaries.');
- }
- }
- // Check if file exists, if not try .exe or fail accordingly
- if (!fs.existsSync(this.config_.geckoDriver)) {
- if (fs.existsSync(this.config_.geckoDriver + '.exe')) {
- this.config_.geckoDriver += '.exe';
- }
- else {
- throw new exitCodes_1.BrowserError(logger, 'Could not find gecko driver at ' + this.config_.geckoDriver +
- '. Run \'webdriver-manager update\' to download binaries.');
- }
- }
- }
- }
- /**
- * Configure and launch (if applicable) the object's environment.
- * @public
- * @return {q.promise} A promise which will resolve when the environment is
- * ready to test.
- */
- setupDriverEnv() {
- this.addDefaultBinaryLocs_();
- logger.info('Starting selenium standalone server...');
- let serverConf = this.config_.localSeleniumStandaloneOpts || {};
- // If args or port is not set use seleniumArgs and seleniumPort
- // for backward compatibility
- if (serverConf.args === undefined) {
- serverConf.args = this.config_.seleniumArgs || [];
- }
- if (serverConf.jvmArgs === undefined) {
- serverConf.jvmArgs = this.config_.jvmArgs || [];
- }
- else {
- if (!Array.isArray(serverConf.jvmArgs)) {
- throw new exitCodes_1.ConfigError(logger, 'jvmArgs should be an array.');
- }
- }
- if (serverConf.port === undefined) {
- serverConf.port = this.config_.seleniumPort;
- }
- // configure server
- if (this.config_.chromeDriver) {
- serverConf.jvmArgs.push('-Dwebdriver.chrome.driver=' + this.config_.chromeDriver);
- }
- if (this.config_.geckoDriver) {
- serverConf.jvmArgs.push('-Dwebdriver.gecko.driver=' + this.config_.geckoDriver);
- }
- this.server_ = new remote.SeleniumServer(this.config_.seleniumServerJar, serverConf);
- let deferred = q.defer();
- // start local server, grab hosted address, and resolve promise
- this.server_.start(this.config_.seleniumServerStartTimeout)
- .then((url) => {
- logger.info('Selenium standalone server started at ' + url);
- return this.server_.address();
- })
- .then((address) => {
- this.config_.seleniumAddress = address;
- deferred.resolve();
- })
- .catch((err) => {
- deferred.reject(err);
- });
- return deferred.promise;
- }
- /**
- * Teardown and destroy the environment and do any associated cleanup.
- * Shuts down the drivers and server.
- *
- * @public
- * @override
- * @return {q.promise} A promise which will resolve when the environment
- * is down.
- */
- teardownEnv() {
- return super.teardownEnv().then(() => {
- logger.info('Shutting down selenium standalone server.');
- return this.server_.stop();
- });
- }
- }
- exports.Local = Local;
- //# sourceMappingURL=local.js.map
|