/**
* 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
*/
'use strict';
Object.defineProperty(exports, '__esModule', {
value: true
});
// istanbul ignore next
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9jaHJpc3RpYW5icm9tYW5uL1NpdGVzL1dlYnByb2pla3RlL3dlYmRyaXZlcmpzL0RFVi9saWIvY29tbWFuZHMvc2VsZWN0b3JFeGVjdXRlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3NEQXlDNEMsNENBQTRDOzs7OzJDQUN2RCxpQ0FBaUM7Ozs7aUNBQ3JDLHVCQUF1Qjs7QUFFcEQsSUFBSSxlQUFlLEdBQUcsU0FBbEIsZUFBZSxHQUFzQjtzQ0FBTixJQUFJO0FBQUosWUFBSTs7O0FBQ25DLFFBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQTtBQUMzQixRQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUE7O0FBRXpCLFFBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxFQUFFO0FBQzlCLGdCQUFRLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQTtLQUN4Qjs7QUFFRCxRQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtBQUMxQixjQUFNLGdHQUEyRSxDQUFBO0tBQ3BGO0FBQ0QsUUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLE1BQU0sQ0FBQyxFQUFFO0FBQ3hDLGNBQU0sd0ZBQW1FLENBQUE7S0FDNUU7O0FBRUQsUUFBSSxVQUFVLEdBQUcseUNBQXFCLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQTtBQUN4RSxXQUFPLG9EQUFnQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFDLEdBQUcsRUFBSztBQUNoRixZQUFJLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQTs7QUFFN0IsWUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLE9BQU8sS0FBSyxlQUFlLEVBQUU7QUFDOUMsa0JBQU0sb0NBQWlCLENBQUMsQ0FBQyxDQUFBO1NBQzVCOztBQUVELGVBQU8sTUFBTSxDQUFBO0tBQ2hCLENBQUMsQ0FBQTtDQUNMLENBQUE7O3FCQUVjLGVBQWUiLCJmaWxlIjoiL1VzZXJzL2NocmlzdGlhbmJyb21hbm4vU2l0ZXMvV2VicHJvamVrdGUvd2ViZHJpdmVyanMvREVWL2xpYi9jb21tYW5kcy9zZWxlY3RvckV4ZWN1dGUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFdvcmtzIGp1c3QgbGlrZSBleGVjdXRlLCBvbmx5IHlvdSBjYW4gdXNlIHNlbGVjdG9ycyB0byBwYXNzIGh0bWwgZWxlbWVudHMgdG9cbiAqIHRoZSBmdW5jdGlvbiB5b3Ugd2lzaCB0byBleGVjdXRlIGluIHRoZSBicm93c2VyLlxuICpcbiAqIFRoZSBmdW5jdGlvbiBmbiB3aWxsIHJlY2VpdmUgZXZlcnkgcmVzb2x2ZWQgc2VsZWN0b3IgYXMgYW4gYXJyYXkgb2YgaHRtbCBlbGVtZW50cyxcbiAqIGV2ZW4gaWYgdGhlcmUgaXMgb25seSBvbmUgcmVzdWx0LCBvciBubyByZXN1bHQuXG4gKiBUaGVzZSBhcnJheXMgYXJlIHRoZSBmaXJzdCBhcmd1bWVudHMgdGhlIGZ1bmN0aW9uIGZuIHJlY2VpdmVzLlxuICogSWYgeW91IHBhc3MgYW4gYXJyYXkgb2Ygc2VsZWN0b3JzLCB0aGUgcmVzdWx0aW5nIGh0bWwgZWxlbWVudCBhcnJheXMgYXJlIHJldHVybmVkIGluIHRoZSBzYW1lIG9yZGVyLlxuICpcbiAqIEFsbCBhcmd1bWVudHMgeW91IGFwcGVuZCBhZnRlciBmdW5jdGlvbiBmbiBhcmUgYWRkZWQgYXMgdGhlIGFyZ3VtZW50cyBhZnRlciB0aGUgaHRtbCBhcnJheXMuXG4gKiBZb3UgY2FuIHVzZSBhbnkgSlNPTiB2YWx1ZSBvciBhIGZ1bmN0aW9uIGFzIHN1Y2ggYW4gYXJndW1lbnQuXG4gKlxuICogPGV4YW1wbGU+XG4gICAgOnNlbGVjdG9yRXhlY3V0ZS5qc1xuICAgIGNsaWVudC5zZWxlY3RvckV4ZWN1dGUoXCIvL2RpdlwiLCBmdW5jdGlvbihkaXZzLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiBkaXZzLmxlbmd0aCArIG1lc3NhZ2U7XG4gICAgfSwgXCIgZGl2cyBvbiB0aGUgcGFnZVwiKS50aGVuKGZ1bmN0aW9uKHJlcykge1xuICAgICAgICBjb25zb2xlLmxvZyhyZXMpOyAvLyByZXR1cm5zLCBmb3IgZXhhbXBsZSwgXCI2OCBkaXZzIG9uIHRoZSBwYWdlXCJcbiAgICB9KTtcblxuICAgIGNsaWVudC5zZWxlY3RvckV4ZWN1dGUoW1wiLy9kaXZcIiwgXCI9UmVhZCBQb3N0XCJdLCBmdW5jdGlvbihkaXZzLCBsaW5rcykge1xuICAgICAgICB2YXIgbWVzc2FnZSA9ICdUaGVyZSBhcmUgJztcblxuICAgICAgICBtZXNzYWdlICs9IGRpdnMubGVuZ3RoICsgJyBkaXZzIG9uIHRoZSBwYWdlJztcbiAgICAgICAgbWVzc2FnZSArPSAnIGFuZCAnO1xuICAgICAgICBtZXNzYWdlICs9IGxpbmtzLmxlbmd0aCArICcgbGlua3Mgd2l0aCBhbiBsaW5rIHRleHQgXCInICsgbGlua3NbMF0udGV4dCArICdcIic7XG5cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfSkudGhlbihmdW5jdGlvbihyZXMpIHtcbiAgICAgICAgY29uc29sZS5sb2cocmVzKTsgLy8gcmV0dXJucywgZm9yIGV4YW1wbGUsIFwiVGhlcmUgYXJlIDY4IGRpdnMgb24gdGhlIHBhZ2UgYW5kIDQyIGxpbmtzIHdpdGggYW4gbGluayB0ZXh0ICdSZWFkIFBvc3QnXCJcbiAgICB9KTtcbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ3xBcnJheS48U3RyaW5nPn0gc2VsZWN0b3JzICAgICAgICAgICAgICAgICAgc2luZ2xlIHNlbGVjdG9yIG9yIGFycmF5IG9mIHNlbGVjdG9yc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gICAgICAgICAgICAgIHNjcmlwdCAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHRvIGdldCBleGVjdXRlZCBpbiB0aGUgYnJvd3NlclxuICogQHBhcmFtIHsuLi4qfSAgICAgICAgICAgICAgICAgIFthcmd1bWVudDEsLi4uLGFyZ3VtZW50Tl0gIGFyZ3VtZW50cyBhZGRlZCB0byBmbi4gQ2FuIGJlIGFueSBKU09OIHZhbHVlIG9yIGZ1bmN0aW9uXG4gKlxuICogQHVzZXMgcHJvdG9jb2wvZXhlY3V0ZVxuICogQHR5cGUgYWN0aW9uXG4gKi9cblxuaW1wb3J0IGVuc3VyZUNsaWVudFNpZGVTZWxlY3RvclN1cHBvcnQgZnJvbSAnLi4vaGVscGVycy9lbnN1cmVDbGllbnRTaWRlU2VsZWN0b3JTdXBwb3J0J1xuaW1wb3J0IGNyZWF0ZVNlbGVjdG9yU2NyaXB0IGZyb20gJy4uL3NjcmlwdHMvY3JlYXRlU2VsZWN0b3JTY3JpcHQnXG5pbXBvcnQgeyBDb21tYW5kRXJyb3IgfSBmcm9tICcuLi91dGlscy9FcnJvckhhbmRsZXInXG5cbmxldCBzZWxlY3RvckV4ZWN1dGUgPSBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgIGxldCBzZWxlY3RvciA9IGFyZ3Muc2hpZnQoKVxuICAgIGxldCBzY3JpcHQgPSBhcmdzLnNoaWZ0KClcblxuICAgIGlmICh0eXBlb2Ygc2VsZWN0b3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHNlbGVjdG9yID0gW3NlbGVjdG9yXVxuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShzZWxlY3RvcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IENvbW1hbmRFcnJvcihgQXJndW1lbnQgJ3NlbGVjdG9yJyBtdXN0IGJlIHN0cmluZyBvciBhcnJheSBvZiBzdHJpbmdzLmApXG4gICAgfVxuICAgIGlmICghL3N0cmluZ3xmdW5jdGlvbi8udGVzdCh0eXBlb2Ygc2NyaXB0KSkge1xuICAgICAgICB0aHJvdyBuZXcgQ29tbWFuZEVycm9yKGBBcmd1bWVudCAnc2NyaXB0JyBtdXN0IGJlIGEgZnVuY3Rpb24gb3Igc3RyaW5nLmApXG4gICAgfVxuXG4gICAgbGV0IGZ1bGxTY3JpcHQgPSBjcmVhdGVTZWxlY3RvclNjcmlwdC5jYWxsKHRoaXMsIHNjcmlwdCwgc2VsZWN0b3IsIGFyZ3MpXG4gICAgcmV0dXJuIGVuc3VyZUNsaWVudFNpZGVTZWxlY3RvclN1cHBvcnQuY2FsbCh0aGlzKS5leGVjdXRlKGZ1bGxTY3JpcHQpLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVzICYmIHJlcy52YWx1ZVxuXG4gICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0Lm1lc3NhZ2UgPT09ICdOb1N1Y2hFbGVtZW50Jykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IENvbW1hbmRFcnJvcig3KVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH0pXG59XG5cbmV4cG9ydCBkZWZhdWx0IHNlbGVjdG9yRXhlY3V0ZVxuIl19 |