1
0
Fork 0
mirror of https://github.com/openstf/stf synced 2025-10-05 02:29:26 +02:00
OpenSTF/res/test/e2e/helpers/gulp-protractor-adv.js
Gunther Brunner 30bbf430d3 - Forked gulp-protractor .
Changes:
 - Added debug support
 - Added suites support
 - Added element explorer support
2014-08-27 16:36:37 +09:00

175 lines
4.3 KiB
JavaScript

/* This is a fork of https://github.com/mllrsohn/gulp-protractor
Changes:
- Added debug support
- Added suites support
- Added element explorer support
*/
var es = require('event-stream')
var fs = require('fs')
var path = require('path')
var child_process = require('child_process')
var async = require('async')
var PluginError = require('gulp-util').PluginError
var winExt = /^win/.test(process.platform) ? ".cmd" : ""
// optimization: cache for protractor binaries directory
var protractorDir = null
function getProtractorDir() {
if (protractorDir) {
return protractorDir
}
var result = require.resolve("protractor")
if (result) {
// result is now something like
// c:\\Source\\gulp-protractor\\node_modules\\protractor\\lib\\protractor.js
protractorDir =
path.resolve(path.join(path.dirname(result), "..", "..", ".bin"))
return protractorDir
}
throw new Error("No protractor installation found.")
}
var protractor = function (options) {
var files = [],
child, args
options = options || {}
args = options.args || []
if (!options.configFile) {
this.emit('error', new PluginError('gulp-protractor',
'Please specify the protractor config file'))
}
return es.through(function (file) {
files.push(file.path)
}, function () {
var stream = this
// Enable debug mode
if (options.debug) {
args.push('debug')
}
// Enable test suits
if (options.suite) {
args.push('--suite')
args.push(options.suite)
}
// Attach Files, if any
if (files.length) {
args.push('--specs')
args.push(files.join(','))
}
// Pass in the config file
args.unshift(options.configFile)
child =
child_process.spawn(path.resolve(getProtractorDir() + '/protractor' +
winExt), args, {
stdio: 'inherit',
env: process.env
}).on('exit', function (code) {
if (child) {
child.kill()
}
if (stream) {
if (code) {
stream.emit('error', new PluginError('gulp-protractor',
'protractor exited with code ' + code))
}
else {
stream.emit('end')
}
}
})
})
}
var webdriver_update = function (opts, cb) {
var callback = (cb ? cb : opts)
var options = (cb ? opts : null)
var args = ["update", "--standalone"]
if (options) {
if (options.browsers) {
options.browsers.forEach(function (element, index, array) {
args.push("--" + element)
})
}
}
child_process.spawn(path.resolve(getProtractorDir() + '/webdriver-manager' +
winExt), args, {
stdio: 'inherit'
}).once('close', callback)
}
var webdriver_update_specific = function (opts) {
return webdriver_update.bind(this, opts)
}
webdriver_update.bind(null, ["ie", "chrome"])
var webdriver_standalone = function (cb) {
var child = child_process.spawn(path.resolve(getProtractorDir() +
'/webdriver-manager' + winExt), ['start'], {
stdio: 'inherit'
}).once('close', cb)
}
var protractorExplorerDir = null
function getProtractorExplorerDir() {
if (protractorExplorerDir) {
return protractorExplorerDir
}
var result = require.resolve("protractor")
if (result) {
// result is now something like
// c:\\Source\\gulp-protractor\\node_modules\\protractor\\lib\\protractor.js
protractorExplorerDir =
path.resolve(path.join(path.dirname(result), "..", "bin"))
return protractorExplorerDir
}
throw new Error("No protractor installation found.")
}
var protractor_explorer = function (opts, cb) {
var callback = (cb ? cb : opts)
var options = (cb ? opts : null)
var url = 'https://angularjs.org/'
if (options) {
if (options.configFile) {
var configFile = require(options.configFile)
if (configFile.config && configFile.config.baseUrl) {
url = configFile.config.baseUrl
}
}
if (options.url) {
url = options.url
}
if (!options.launchWebDriver) {
}
}
child_process.spawn(path.resolve(getProtractorExplorerDir() +
'/elementexplorer.js'), [url], {
stdio: 'inherit'
}).once('close', callback)
}
module.exports = {
getProtractorDir: getProtractorDir,
protractor: protractor,
webdriver_standalone: webdriver_standalone,
webdriver_update: webdriver_update,
webdriver_update_specific: webdriver_update_specific,
protractor_explorer: protractor_explorer
}