var createBrowserStackTunnel = function (logger, config, emitter) { const log = logger.create('launcher.browserstack') const bsConfig = config.browserStack || {} if (bsConfig.startTunnel === false) { return Q() } const bsAccesskey = process.env.BROWSERSTACK_ACCESS_KEY || process.env.BROWSER_STACK_ACCESS_KEY || bsConfig.accessKey const bsLocal = new browserstack.Local() const bsLocalArgs = { key: bsAccesskey } const deferred = Q.defer() log.debug('Starting BrowserStackLocal') bsLocal.start(bsLocalArgs, function () { log.debug('Started BrowserStackLocal') deferred.resolve() }) emitter.on('exit', function (done) { log.debug('Shutting down BrowserStackLocal') bsLocal.stop(function () { log.debug('Stopped BrowserStackLocal') done() }) }) return deferred.promise }
bs_local.start(bs_local_args, function(error) { if (error) { console.log(error); } else { console.log('browserstack-local connected.'); child = childProcess.execSync('./node_modules/.bin/nightwatch -c browserstack-local.conf.js -e chrome', { stdio: [ 0, 0, 0 ] }); if(child) { child.on('exit', function() { if(bs_local) { bs_local.stop(function() {}); } exit(0); }); } } if(bs_local) { bs_local.stop(function() {}); } process.on('exit', function (code) { bs_local.stop(function() { console.log("closing browserstack-local."); }); }); });
child.on('exit', function() { if(bs_local) { bs_local.stop(function() {}); } exit(0); });
emitter.on('exit', function (done) { log.debug('Shutting down BrowserStackLocal') bsLocal.stop(function () { log.debug('Stopped BrowserStackLocal') done() }) })
it('should reject if local.start throws an error', () => { const service = new BrowserstackLauncher() Browserstack.Local.mockImplementationOnce(function () { this.start = jest.fn().mockImplementationOnce((options, cb) => cb(error)) }) return expect(service.onPrepare(config, caps)).rejects.toThrow(error) .then(() => expect(service.browserstackLocal.start).toHaveBeenCalled()) })
child.on('exit', function() { if(bs_local) { bs_local.stop(function() { console.log('Stopped browserstack'); }); instance.close(); process.exit(0); } });
openTunnel: () => new Promise(resolve => { tunnel.start({}, error => { if (error) { console.error("Failed to open tunnel"); console.error(error); throw error; } resolve(); }); }),
process.on('SIGINT', function() { if (bs_local !== null) { bs_local.stop(function(error) { if (error) { console.log(error); } else { console.log('BrowserStackLocal Disconnected'); process.exit(); } }); } });
tunnel: function () { const Tunnel = require('browserstack-local').Local; const tunnel = new Tunnel(); return { openTunnel: () => new Promise(resolve => { tunnel.start({}, error => { if (error) { console.error("Failed to open tunnel"); console.error(error); throw error; } resolve(); }); }), closeTunnel: () => denodeify(tunnel.stop.bind(tunnel))() }; },
const instance = app.listen(PORT, function(err) { if (err) { console.error(err); } console.log(`Serving ${BUILD_PATH} at port ${PORT}`); bs_local.start(bs_local_args, function(error) { if (error) { console.log(error); } else { console.log('Connected to Browserstack. Now testing...'); const child = childProcess.spawn( path.resolve(__dirname, '../node_modules/.bin/protractor'), ['./config/protractor.bs.conf.js'] ); if (child) { child.stdout.on('data', (data) => { if(`${data}`.trim()) { console.log(`${data}`); } }); child.stderr.on('data', (data) => { if(`${data}`.trim()) { console.log(`${data}`); } }); child.on('exit', function() { if(bs_local) { bs_local.stop(function() { console.log('Stopped browserstack'); }); instance.close(); process.exit(0); } }); } } }); });
#!/usr/bin/env node var Nightwatch = require('nightwatch'); var browserstack = require('browserstack-local'); var bs_local; try { process.mainModule.filename = "./node_modules/.bin/nightwatch" // Code to start browserstack local before start of test console.log("Connecting local"); Nightwatch.bs_local = bs_local = new browserstack.Local(); bs_local.start({'key': process.env.BROWSERSTACK_ACCESS_KEY }, function(error) { if (error) throw error; console.log('Connected. Now testing...'); Nightwatch.cli(function(argv) { Nightwatch.CliRunner(argv) .setup(null, function(){ // Code to stop browserstack local after end of parallel test bs_local.stop(function(){}); }) .runTests(function(){ // Code to stop browserstack local after end of single test bs_local.stop(function(){}); }); }); }); } catch (ex) { console.log('There was an error while starting the test runner:\n\n'); process.stderr.write(ex.stack + '\n');
e => { return [ e.browser, e.browser_version, e.os, e.os_version ].join('_').replace(/\./g, '-').replace(/ /g, '_'); } ); try { process.mainModule.filename = './node_modules/.bin/nightwatch'; // Code to start browserstack local before start of test console.log('Connecting localhost to Browserstack...'); Nightwatch.bs_local = bs_local = new browserstack.Local(); bs_local.start({ 'key': process.env.BROWSERSTACK_ACCESS_KEY }, function (error) { if (error) throw new Error(error); console.log('Connected. Running tests...'); console.log('Go to https://www.browserstack.com/automate to view tests in progress.'); Nightwatch.cli(function (argv) { var envString = environment_names.join(','); argv.e = envString; argv.env = envString; Nightwatch.CliRunner(argv) .setup(null, function () { // Code to stop browserstack local after end of parallel test bs_local.stop(function () {}); }) .runTests(function () {
process.on('exit', function (code) { bs_local.stop(function() { console.log("closing browserstack-local."); }); });
#!/usr/bin/env node if(process.argv[2]){ process.kill(process.argv[2], 'SIGINT'); process.exit(0); } var browserstack = require('browserstack-local'); var fs = require('fs'); var pidFile = 'browserstack-local.pid'; var bs_local = new browserstack.Local(); var bs_local_args = { 'key': process.env.BROWSERSTACK_ACCESS_KEY, 'forcelocal': true, 'v': true }; process.on('SIGINT', function() { if (bs_local !== null) { bs_local.stop(function(error) { if (error) { console.log(error); } else { console.log('BrowserStackLocal Disconnected'); process.exit(); } }); } });