From ca2dfa33054d1e5582204282165b24a9c1dfa2e3 Mon Sep 17 00:00:00 2001 From: sebv Date: Mon, 17 Mar 2014 19:39:32 +0800 Subject: [PATCH] feat: migrated to wd promise api --- lib/sauce_launcher.js | 75 +++++++++++++++++++++++++------------------ package.json | 2 +- 2 files changed, 44 insertions(+), 33 deletions(-) diff --git a/lib/sauce_launcher.js b/lib/sauce_launcher.js index 5761ca4..bd061c7 100644 --- a/lib/sauce_launcher.js +++ b/lib/sauce_launcher.js @@ -17,9 +17,19 @@ var SauceLauncher = function(args, sauceConnect, /* config.sauceLabs */ config, (args.platform ? ' (' + args.platform + ')' : ''); var startConnect = config.startConnect !== false; var log = logger.create('launcher.sauce'); + var driverLog = logger.create('wd'); var self = this; - var driver = wd.remote('ondemand.saucelabs.com', 80, username, accessKey); + var driver = wd.promiseChainRemote('ondemand.saucelabs.com', 80, username, accessKey); + driver.on('status', function(info) { + driverLog.debug(info.cyan); + }); + driver.on('command', function(eventType, command, response) { + driverLog.debug(' > ' + eventType.cyan, command, (response || '').grey); + }); + driver.on('http', function(meth, path, data) { + driverLog.debug(' > ' + meth.magenta, path, (data || '').grey); + }); var pendingCancellations = 0; var sessionIsReady = false; @@ -41,7 +51,7 @@ var SauceLauncher = function(args, sauceConnect, /* config.sauceLabs */ config, var heartbeat = function() { pendingHeartBeat = setTimeout(function() { log.debug('Heartbeat to Sauce Labs (%s) - fetching title', browserName); - driver.title(); + driver.title().done(); heartbeat(); }, 60000); }; @@ -75,32 +85,37 @@ var SauceLauncher = function(args, sauceConnect, /* config.sauceLabs */ config, } } - driver.init(options, function(err, jobId) { - if (pendingCancellations > 0) { - pendingCancellations--; - return; - } - - if (err) { - log.error('Can not start %s\n %s', browserName, formatSauceError(err)); - return self._done('failure'); - } - - // Record the job details, so we can access it later with the reporter - jobMapping[self.id] = { - jobId: jobId, - credentials: { - username: username, - password: accessKey + driver + .init(options) + .then( + function(jobId) { + if (pendingCancellations > 0) { + pendingCancellations--; + return; + } + // Record the job details, so we can access it later with the reporter + jobMapping[self.id] = { + jobId: jobId, + credentials: { + username: username, + password: accessKey + } + }; + + sessionIsReady = true; + + log.info('%s session at https://saucelabs.com/tests/%s', browserName, driver.sessionID); + log.debug('WebDriver channel for %s instantiated, opening %s', browserName, url); + return driver.get(url).then(heartbeat); + }, function(err) { + if (pendingCancellations > 0) { + pendingCancellations--; + return; + } + log.error('Can not start %s\n %s', browserName, formatSauceError(err)); + return self._done('failure'); } - }; - - sessionIsReady = true; - - log.info('%s session at https://saucelabs.com/tests/%s', browserName, driver.sessionID); - log.debug('WebDriver channel for %s instantiated, opening %s', browserName, url); - driver.get(url, heartbeat); - }); + ).done(); }; this.on('start', function(url) { @@ -141,10 +156,7 @@ var SauceLauncher = function(args, sauceConnect, /* config.sauceLabs */ config, log.debug('Shutting down the %s driver', browserName); // workaround - navigate to other page to avoid re-connection - driver.get('about:blank', function() { - driver.quit(allDone); - }); - + driver.get('about:blank').catch().quit().nodeify(allDone); sessionIsReady = false; } else { pendingCancellations++; @@ -153,5 +165,4 @@ var SauceLauncher = function(args, sauceConnect, /* config.sauceLabs */ config, }); }; - module.exports = SauceLauncher; diff --git a/package.json b/package.json index 1fcadd5..8418be1 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ ], "author": "Vojta Jina ", "dependencies": { - "wd": "~0.2.8", + "wd": "~0.2.12", "sauce-connect-launcher": "~0.3.0", "q": "~0.9.6", "saucelabs": "~0.1.0"