UNPKG

@testim/testim-cli

Version:

Command line interface for running Testing on you CI

93 lines (74 loc) 9 kB
/** * Works just like execute, only you can use Selenium selector strategies to pass html elements to * the asynchronous function you wish to execute in the browser. * * The asynchronous 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> :selectorExecuteAsync.js client.selectorExecuteAsync("//div", function(divs, message, callback) { callback(divs.length + message); }, " divs on the page").then(function(msg){ console.log(msg); // returns, for example, "68 divs on the page" }); client.selectorExecuteAsync(["//div", "=Read Post"], function(divs, links, callback) { var message = 'There are '; message += divs.length + ' divs on the page'; message += ' and '; message += links.length + ' links with an link text "' + links[0].text + '"'; callback(message); }).then(function(msg){ console.log(msg); // 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 asynchronous 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 */ 'use strict'; 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 selectorExecuteAsync = function selectorExecuteAsync() { 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).executeAsync(fullScript).then(function (res) { var result = res && res.value; if (result && result.message === 'NoSuchElement') { throw new _utilsErrorHandler.CommandError(7); } return result; }); }; exports['default'] = selectorExecuteAsync; module.exports = exports['default']; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jb21tYW5kcy9zZWxlY3RvckV4ZWN1dGVBc3luYy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3NEQXlDNEMsNENBQTRDOzs7OzJDQUN2RCxpQ0FBaUM7Ozs7aUNBQ3JDLHVCQUF1Qjs7QUFFcEQsSUFBSSxvQkFBb0IsR0FBRyxTQUF2QixvQkFBb0IsR0FBc0I7c0NBQU4sSUFBSTtBQUFKLFlBQUk7OztBQUN4QyxRQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUE7QUFDM0IsUUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFBOztBQUV6QixRQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsRUFBRTtBQUM5QixnQkFBUSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUE7S0FDeEI7QUFDRCxRQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtBQUMxQixjQUFNLGdHQUEyRSxDQUFBO0tBQ3BGO0FBQ0QsUUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLE1BQU0sQ0FBQyxFQUFFO0FBQ3hDLGNBQU0sd0ZBQW1FLENBQUE7S0FDNUU7O0FBRUQsUUFBSSxVQUFVLEdBQUcseUNBQXFCLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQTtBQUN4RSxXQUFPLG9EQUFnQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFDLEdBQUcsRUFBSztBQUNyRixZQUFJLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQTs7QUFFN0IsWUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLE9BQU8sS0FBSyxlQUFlLEVBQUU7QUFDOUMsa0JBQU0sb0NBQWlCLENBQUMsQ0FBQyxDQUFBO1NBQzVCOztBQUVELGVBQU8sTUFBTSxDQUFBO0tBQ2hCLENBQUMsQ0FBQTtDQUNMLENBQUE7O3FCQUVjLG9CQUFvQiIsImZpbGUiOiJzZWxlY3RvckV4ZWN1dGVBc3luYy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogV29ya3MganVzdCBsaWtlIGV4ZWN1dGUsIG9ubHkgeW91IGNhbiB1c2UgU2VsZW5pdW0gc2VsZWN0b3Igc3RyYXRlZ2llcyB0byBwYXNzIGh0bWwgZWxlbWVudHMgdG9cbiAqIHRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb24geW91IHdpc2ggdG8gZXhlY3V0ZSBpbiB0aGUgYnJvd3Nlci5cbiAqXG4gKiBUaGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGZuIHdpbGwgcmVjZWl2ZSBldmVyeSByZXNvbHZlZCBzZWxlY3RvciBhcyBhbiBhcnJheSBvZiBodG1sIGVsZW1lbnRzLFxuICogZXZlbiBpZiB0aGVyZSBpcyBvbmx5IG9uZSByZXN1bHQsIG9yIG5vIHJlc3VsdC5cbiAqIFRoZXNlIGFycmF5cyBhcmUgdGhlIGZpcnN0IGFyZ3VtZW50cyB0aGUgZnVuY3Rpb24gZm4gcmVjZWl2ZXMuXG4gKiBJZiB5b3UgcGFzcyBhbiBhcnJheSBvZiBzZWxlY3RvcnMsIHRoZSByZXN1bHRpbmcgaHRtbCBlbGVtZW50IGFycmF5cyBhcmUgcmV0dXJuZWQgaW4gdGhlIHNhbWUgb3JkZXIuXG4gKlxuICogQWxsIGFyZ3VtZW50cyB5b3UgYXBwZW5kIGFmdGVyIGZ1bmN0aW9uIGZuIGFyZSBhZGRlZCBhcyB0aGUgYXJndW1lbnRzIGFmdGVyIHRoZSBodG1sIGFycmF5cy5cbiAqIFlvdSBjYW4gdXNlIGFueSBKU09OIHZhbHVlIG9yIGEgZnVuY3Rpb24gYXMgc3VjaCBhbiBhcmd1bWVudC5cbiAqXG4gKiA8ZXhhbXBsZT5cbiA6c2VsZWN0b3JFeGVjdXRlQXN5bmMuanNcbiAgICBjbGllbnQuc2VsZWN0b3JFeGVjdXRlQXN5bmMoXCIvL2RpdlwiLCBmdW5jdGlvbihkaXZzLCBtZXNzYWdlLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayhkaXZzLmxlbmd0aCArIG1lc3NhZ2UpO1xuICAgIH0sIFwiIGRpdnMgb24gdGhlIHBhZ2VcIikudGhlbihmdW5jdGlvbihtc2cpe1xuICAgICAgICBjb25zb2xlLmxvZyhtc2cpOyAvLyByZXR1cm5zLCBmb3IgZXhhbXBsZSwgXCI2OCBkaXZzIG9uIHRoZSBwYWdlXCJcbiAgICB9KTtcblxuICAgIGNsaWVudC5zZWxlY3RvckV4ZWN1dGVBc3luYyhbXCIvL2RpdlwiLCBcIj1SZWFkIFBvc3RcIl0sIGZ1bmN0aW9uKGRpdnMsIGxpbmtzLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgbWVzc2FnZSA9ICdUaGVyZSBhcmUgJztcblxuICAgICAgICBtZXNzYWdlICs9IGRpdnMubGVuZ3RoICsgJyBkaXZzIG9uIHRoZSBwYWdlJztcbiAgICAgICAgbWVzc2FnZSArPSAnIGFuZCAnO1xuICAgICAgICBtZXNzYWdlICs9IGxpbmtzLmxlbmd0aCArICcgbGlua3Mgd2l0aCBhbiBsaW5rIHRleHQgXCInICsgbGlua3NbMF0udGV4dCArICdcIic7XG5cbiAgICAgICAgY2FsbGJhY2sobWVzc2FnZSk7XG4gICAgfSkudGhlbihmdW5jdGlvbihtc2cpe1xuICAgICAgICBjb25zb2xlLmxvZyhtc2cpOyAvLyByZXR1cm5zLCBmb3IgZXhhbXBsZSwgXCJUaGVyZSBhcmUgNjggZGl2cyBvbiB0aGUgcGFnZSBhbmQgNDIgbGlua3Mgd2l0aCBhbiBsaW5rIHRleHQgJ1JlYWQgUG9zdCdcIlxuICAgIH0pO1xuICogPC9leGFtcGxlPlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfEFycmF5LjxTdHJpbmc+fSBzZWxlY3RvcnMgICAgICAgICAgICAgICAgICBzaW5nbGUgc2VsZWN0b3Igb3IgYXJyYXkgb2Ygc2VsZWN0b3JzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSAgICAgICAgICAgICAgc2NyaXB0ICAgICAgICAgICAgICAgICAgICAgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGdldCBleGVjdXRlZCBpbiB0aGUgYnJvd3NlclxuICogQHBhcmFtIHsuLi4qfSAgICAgICAgICAgICAgICAgIFthcmd1bWVudDEsLi4uLGFyZ3VtZW50Tl0gIGFyZ3VtZW50cyBhZGRlZCB0byBmbi4gQ2FuIGJlIGFueSBKU09OIHZhbHVlIG9yIGZ1bmN0aW9uXG4gKlxuICogQHVzZXMgcHJvdG9jb2wvZXhlY3V0ZVxuICogQHR5cGUgYWN0aW9uXG4gKi9cblxuaW1wb3J0IGVuc3VyZUNsaWVudFNpZGVTZWxlY3RvclN1cHBvcnQgZnJvbSAnLi4vaGVscGVycy9lbnN1cmVDbGllbnRTaWRlU2VsZWN0b3JTdXBwb3J0J1xuaW1wb3J0IGNyZWF0ZVNlbGVjdG9yU2NyaXB0IGZyb20gJy4uL3NjcmlwdHMvY3JlYXRlU2VsZWN0b3JTY3JpcHQnXG5pbXBvcnQgeyBDb21tYW5kRXJyb3IgfSBmcm9tICcuLi91dGlscy9FcnJvckhhbmRsZXInXG5cbmxldCBzZWxlY3RvckV4ZWN1dGVBc3luYyA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgbGV0IHNlbGVjdG9yID0gYXJncy5zaGlmdCgpXG4gICAgbGV0IHNjcmlwdCA9IGFyZ3Muc2hpZnQoKVxuXG4gICAgaWYgKHR5cGVvZiBzZWxlY3RvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgc2VsZWN0b3IgPSBbc2VsZWN0b3JdXG4gICAgfVxuICAgIGlmICghQXJyYXkuaXNBcnJheShzZWxlY3RvcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IENvbW1hbmRFcnJvcihgQXJndW1lbnQgJ3NlbGVjdG9yJyBtdXN0IGJlIHN0cmluZyBvciBhcnJheSBvZiBzdHJpbmdzLmApXG4gICAgfVxuICAgIGlmICghL3N0cmluZ3xmdW5jdGlvbi8udGVzdCh0eXBlb2Ygc2NyaXB0KSkge1xuICAgICAgICB0aHJvdyBuZXcgQ29tbWFuZEVycm9yKGBBcmd1bWVudCAnc2NyaXB0JyBtdXN0IGJlIGEgZnVuY3Rpb24gb3Igc3RyaW5nLmApXG4gICAgfVxuXG4gICAgbGV0IGZ1bGxTY3JpcHQgPSBjcmVhdGVTZWxlY3RvclNjcmlwdC5jYWxsKHRoaXMsIHNjcmlwdCwgc2VsZWN0b3IsIGFyZ3MpXG4gICAgcmV0dXJuIGVuc3VyZUNsaWVudFNpZGVTZWxlY3RvclN1cHBvcnQuY2FsbCh0aGlzKS5leGVjdXRlQXN5bmMoZnVsbFNjcmlwdCkudGhlbigocmVzKSA9PiB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZXMgJiYgcmVzLnZhbHVlXG5cbiAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQubWVzc2FnZSA9PT0gJ05vU3VjaEVsZW1lbnQnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ29tbWFuZEVycm9yKDcpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgfSlcbn1cblxuZXhwb3J0IGRlZmF1bHQgc2VsZWN0b3JFeGVjdXRlQXN5bmNcbiJdfQ==