@testim/testim-cli
Version:
Command line interface for running Testing on you CI
94 lines (74 loc) • 8.73 kB
JavaScript
/**
* Works just like execute, only you can use selectors to pass html elements to
* the function you wish to execute in the browser.
*
* The function fn will receive every resolved selector as an array of html elements,
* even if there is only one result, or no result.
* These arrays are the first arguments the function fn receives.
* If you pass an array of selectors, the resulting html element arrays are returned in the same order.
*
* All arguments you append after function fn are added as the arguments after the html arrays.
* You can use any JSON value or a function as such an argument.
*
* <example>
:selectorExecute.js
client.selectorExecute("//div", function(divs, message) {
return divs.length + message;
}, " divs on the page").then(function(res) {
console.log(res); // returns, for example, "68 divs on the page"
});
client.selectorExecute(["//div", "=Read Post"], function(divs, links) {
var message = 'There are ';
message += divs.length + ' divs on the page';
message += ' and ';
message += links.length + ' links with an link text "' + links[0].text + '"';
return message;
}).then(function(res) {
console.log(res); // returns, for example, "There are 68 divs on the page and 42 links with an link text 'Read Post'"
});
* </example>
*
* @param {String|Array.<String>} selectors single selector or array of selectors
* @param {Function} script function to get executed in the browser
* @param {...*} [argument1,...,argumentN] arguments added to fn. Can be any JSON value or function
*
* @uses protocol/execute
* @type action
*/
;
var _interopRequireDefault = require('babel-runtime/helpers/interop-require-default')['default'];
Object.defineProperty(exports, '__esModule', {
value: true
});
var _helpersEnsureClientSideSelectorSupport = require('../helpers/ensureClientSideSelectorSupport');
var _helpersEnsureClientSideSelectorSupport2 = _interopRequireDefault(_helpersEnsureClientSideSelectorSupport);
var _scriptsCreateSelectorScript = require('../scripts/createSelectorScript');
var _scriptsCreateSelectorScript2 = _interopRequireDefault(_scriptsCreateSelectorScript);
var _utilsErrorHandler = require('../utils/ErrorHandler');
var selectorExecute = function selectorExecute() {
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
var selector = args.shift();
var script = args.shift();
if (typeof selector === 'string') {
selector = [selector];
}
if (!Array.isArray(selector)) {
throw new _utilsErrorHandler.CommandError('Argument \'selector\' must be string or array of strings.');
}
if (!/string|function/.test(typeof script)) {
throw new _utilsErrorHandler.CommandError('Argument \'script\' must be a function or string.');
}
var fullScript = _scriptsCreateSelectorScript2['default'].call(this, script, selector, args);
return _helpersEnsureClientSideSelectorSupport2['default'].call(this).execute(fullScript).then(function (res) {
var result = res && res.value;
if (result && result.message === 'NoSuchElement') {
throw new _utilsErrorHandler.CommandError(7);
}
return result;
});
};
exports['default'] = selectorExecute;
module.exports = exports['default'];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jb21tYW5kcy9zZWxlY3RvckV4ZWN1dGUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztzREF5QzRDLDRDQUE0Qzs7OzsyQ0FDdkQsaUNBQWlDOzs7O2lDQUNyQyx1QkFBdUI7O0FBRXBELElBQUksZUFBZSxHQUFHLFNBQWxCLGVBQWUsR0FBc0I7c0NBQU4sSUFBSTtBQUFKLFlBQUk7OztBQUNuQyxRQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUE7QUFDM0IsUUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFBOztBQUV6QixRQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsRUFBRTtBQUM5QixnQkFBUSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUE7S0FDeEI7O0FBRUQsUUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7QUFDMUIsY0FBTSxnR0FBMkUsQ0FBQTtLQUNwRjtBQUNELFFBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxNQUFNLENBQUMsRUFBRTtBQUN4QyxjQUFNLHdGQUFtRSxDQUFBO0tBQzVFOztBQUVELFFBQUksVUFBVSxHQUFHLHlDQUFxQixJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUE7QUFDeEUsV0FBTyxvREFBZ0MsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBQyxHQUFHLEVBQUs7QUFDaEYsWUFBSSxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUE7O0FBRTdCLFlBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxPQUFPLEtBQUssZUFBZSxFQUFFO0FBQzlDLGtCQUFNLG9DQUFpQixDQUFDLENBQUMsQ0FBQTtTQUM1Qjs7QUFFRCxlQUFPLE1BQU0sQ0FBQTtLQUNoQixDQUFDLENBQUE7Q0FDTCxDQUFBOztxQkFFYyxlQUFlIiwiZmlsZSI6InNlbGVjdG9yRXhlY3V0ZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogV29ya3MganVzdCBsaWtlIGV4ZWN1dGUsIG9ubHkgeW91IGNhbiB1c2Ugc2VsZWN0b3JzIHRvIHBhc3MgaHRtbCBlbGVtZW50cyB0b1xuICogdGhlIGZ1bmN0aW9uIHlvdSB3aXNoIHRvIGV4ZWN1dGUgaW4gdGhlIGJyb3dzZXIuXG4gKlxuICogVGhlIGZ1bmN0aW9uIGZuIHdpbGwgcmVjZWl2ZSBldmVyeSByZXNvbHZlZCBzZWxlY3RvciBhcyBhbiBhcnJheSBvZiBodG1sIGVsZW1lbnRzLFxuICogZXZlbiBpZiB0aGVyZSBpcyBvbmx5IG9uZSByZXN1bHQsIG9yIG5vIHJlc3VsdC5cbiAqIFRoZXNlIGFycmF5cyBhcmUgdGhlIGZpcnN0IGFyZ3VtZW50cyB0aGUgZnVuY3Rpb24gZm4gcmVjZWl2ZXMuXG4gKiBJZiB5b3UgcGFzcyBhbiBhcnJheSBvZiBzZWxlY3RvcnMsIHRoZSByZXN1bHRpbmcgaHRtbCBlbGVtZW50IGFycmF5cyBhcmUgcmV0dXJuZWQgaW4gdGhlIHNhbWUgb3JkZXIuXG4gKlxuICogQWxsIGFyZ3VtZW50cyB5b3UgYXBwZW5kIGFmdGVyIGZ1bmN0aW9uIGZuIGFyZSBhZGRlZCBhcyB0aGUgYXJndW1lbnRzIGFmdGVyIHRoZSBodG1sIGFycmF5cy5cbiAqIFlvdSBjYW4gdXNlIGFueSBKU09OIHZhbHVlIG9yIGEgZnVuY3Rpb24gYXMgc3VjaCBhbiBhcmd1bWVudC5cbiAqXG4gKiA8ZXhhbXBsZT5cbiAgICA6c2VsZWN0b3JFeGVjdXRlLmpzXG4gICAgY2xpZW50LnNlbGVjdG9yRXhlY3V0ZShcIi8vZGl2XCIsIGZ1bmN0aW9uKGRpdnMsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIGRpdnMubGVuZ3RoICsgbWVzc2FnZTtcbiAgICB9LCBcIiBkaXZzIG9uIHRoZSBwYWdlXCIpLnRoZW4oZnVuY3Rpb24ocmVzKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKHJlcyk7IC8vIHJldHVybnMsIGZvciBleGFtcGxlLCBcIjY4IGRpdnMgb24gdGhlIHBhZ2VcIlxuICAgIH0pO1xuXG4gICAgY2xpZW50LnNlbGVjdG9yRXhlY3V0ZShbXCIvL2RpdlwiLCBcIj1SZWFkIFBvc3RcIl0sIGZ1bmN0aW9uKGRpdnMsIGxpbmtzKSB7XG4gICAgICAgIHZhciBtZXNzYWdlID0gJ1RoZXJlIGFyZSAnO1xuXG4gICAgICAgIG1lc3NhZ2UgKz0gZGl2cy5sZW5ndGggKyAnIGRpdnMgb24gdGhlIHBhZ2UnO1xuICAgICAgICBtZXNzYWdlICs9ICcgYW5kICc7XG4gICAgICAgIG1lc3NhZ2UgKz0gbGlua3MubGVuZ3RoICsgJyBsaW5rcyB3aXRoIGFuIGxpbmsgdGV4dCBcIicgKyBsaW5rc1swXS50ZXh0ICsgJ1wiJztcblxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uKHJlcykge1xuICAgICAgICBjb25zb2xlLmxvZyhyZXMpOyAvLyByZXR1cm5zLCBmb3IgZXhhbXBsZSwgXCJUaGVyZSBhcmUgNjggZGl2cyBvbiB0aGUgcGFnZSBhbmQgNDIgbGlua3Mgd2l0aCBhbiBsaW5rIHRleHQgJ1JlYWQgUG9zdCdcIlxuICAgIH0pO1xuICogPC9leGFtcGxlPlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfEFycmF5LjxTdHJpbmc+fSBzZWxlY3RvcnMgICAgICAgICAgICAgICAgICBzaW5nbGUgc2VsZWN0b3Igb3IgYXJyYXkgb2Ygc2VsZWN0b3JzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSAgICAgICAgICAgICAgc2NyaXB0ICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gdG8gZ2V0IGV4ZWN1dGVkIGluIHRoZSBicm93c2VyXG4gKiBAcGFyYW0gey4uLip9ICAgICAgICAgICAgICAgICAgW2FyZ3VtZW50MSwuLi4sYXJndW1lbnROXSAgYXJndW1lbnRzIGFkZGVkIHRvIGZuLiBDYW4gYmUgYW55IEpTT04gdmFsdWUgb3IgZnVuY3Rpb25cbiAqXG4gKiBAdXNlcyBwcm90b2NvbC9leGVjdXRlXG4gKiBAdHlwZSBhY3Rpb25cbiAqL1xuXG5pbXBvcnQgZW5zdXJlQ2xpZW50U2lkZVNlbGVjdG9yU3VwcG9ydCBmcm9tICcuLi9oZWxwZXJzL2Vuc3VyZUNsaWVudFNpZGVTZWxlY3RvclN1cHBvcnQnXG5pbXBvcnQgY3JlYXRlU2VsZWN0b3JTY3JpcHQgZnJvbSAnLi4vc2NyaXB0cy9jcmVhdGVTZWxlY3RvclNjcmlwdCdcbmltcG9ydCB7IENvbW1hbmRFcnJvciB9IGZyb20gJy4uL3V0aWxzL0Vycm9ySGFuZGxlcidcblxubGV0IHNlbGVjdG9yRXhlY3V0ZSA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgbGV0IHNlbGVjdG9yID0gYXJncy5zaGlmdCgpXG4gICAgbGV0IHNjcmlwdCA9IGFyZ3Muc2hpZnQoKVxuXG4gICAgaWYgKHR5cGVvZiBzZWxlY3RvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgc2VsZWN0b3IgPSBbc2VsZWN0b3JdXG4gICAgfVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHNlbGVjdG9yKSkge1xuICAgICAgICB0aHJvdyBuZXcgQ29tbWFuZEVycm9yKGBBcmd1bWVudCAnc2VsZWN0b3InIG11c3QgYmUgc3RyaW5nIG9yIGFycmF5IG9mIHN0cmluZ3MuYClcbiAgICB9XG4gICAgaWYgKCEvc3RyaW5nfGZ1bmN0aW9uLy50ZXN0KHR5cGVvZiBzY3JpcHQpKSB7XG4gICAgICAgIHRocm93IG5ldyBDb21tYW5kRXJyb3IoYEFyZ3VtZW50ICdzY3JpcHQnIG11c3QgYmUgYSBmdW5jdGlvbiBvciBzdHJpbmcuYClcbiAgICB9XG5cbiAgICBsZXQgZnVsbFNjcmlwdCA9IGNyZWF0ZVNlbGVjdG9yU2NyaXB0LmNhbGwodGhpcywgc2NyaXB0LCBzZWxlY3RvciwgYXJncylcbiAgICByZXR1cm4gZW5zdXJlQ2xpZW50U2lkZVNlbGVjdG9yU3VwcG9ydC5jYWxsKHRoaXMpLmV4ZWN1dGUoZnVsbFNjcmlwdCkudGhlbigocmVzKSA9PiB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZXMgJiYgcmVzLnZhbHVlXG5cbiAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQubWVzc2FnZSA9PT0gJ05vU3VjaEVsZW1lbnQnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ29tbWFuZEVycm9yKDcpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgfSlcbn1cblxuZXhwb3J0IGRlZmF1bHQgc2VsZWN0b3JFeGVjdXRlXG4iXX0=