'use strict';
Object.defineProperty(exports, '__esModule', {
value: true
});
var _utilsErrorHandler = require('../utils/ErrorHandler');
var DEFAULT_SELECTOR = 'css selector';
var findStrategy = function findStrategy() {
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
var value = args[0];
var relative = args.length > 1 ? args[1] : false;
var xpathPrefix = relative ? './' : '//';
/**
* set default selector
*/
var using = DEFAULT_SELECTOR;
if (typeof value !== 'string') {
throw new _utilsErrorHandler.ProtocolError('selector needs to be typeof `string`');
}
if (args.length === 3) {
return {
using: args[0],
value: args[1]
};
}
// check value type
// use id strategy if value starts with # and doesnt contain any other CSS selector-relevant character
if (value.indexOf('#') === 0 && value.search(/(\s|>|\.|[|])/) === -1) {
using = 'id';
value = value.slice(1);
// use xPath strategy if value starts with //
} else if (value.indexOf('/') === 0 || value.indexOf('(') === 0 || value.indexOf('../') === 0 || value.indexOf('./') === 0 || value.indexOf('*/') === 0) {
using = 'xpath';
// use link text startegy if value startes with =
} else if (value.indexOf('=') === 0) {
using = 'link text';
value = value.slice(1);
// use partial link text startegy if value startes with *=
} else if (value.indexOf('*=') === 0) {
using = 'partial link text';
value = value.slice(2);
// recursive element search using the UiAutomator library (Android only)
} else if (value.indexOf('android=') === 0) {
using = '-android uiautomator';
value = value.slice(8);
// recursive element search using the UIAutomation library (iOS-only)
} else if (value.indexOf('ios=') === 0) {
using = '-ios uiautomation';
value = value.slice(4);
// recursive element search using accessibility id
} else if (value.indexOf('~') === 0) {
using = 'accessibility id';
value = value.slice(1);
// use tag name strategy if value contains a tag
// e.g. "<div>" or "<div />"
} else if (value.search(/<[a-zA-Z\-]+( \/)*>/g) >= 0) {
using = 'tag name';
value = value.replace(/<|>|\/|\s/g, '');
// use name strategy if value queries elements with name attributes
// e.g. "[name='myName']" or '[name="myName"]'
} else if (value.search(/^\[name=("|')([a-zA-z0-9\-_ ]+)("|')\]$/) >= 0) {
using = 'name';
value = value.match(/^\[name=("|')([a-zA-z0-9\-_ ]+)("|')\]$/)[2];
// any element with given text e.g. h1=Welcome
} else if (value.search(/^[a-z0-9]*=(.)+$/) >= 0) {
var query = value.split(/=/);
var tag = query.shift();
using = 'xpath';
value = '' + xpathPrefix + (tag.length ? tag : '*') + '[normalize-space() = "' + query.join('=') + '"]';
// any element containing given text
} else if (value.search(/^[a-z0-9]*\*=(.)+$/) >= 0) {
var query = value.split(/\*=/);
var tag = query.shift();
using = 'xpath';
value = '' + xpathPrefix + (tag.length ? tag : '*') + '[contains(., "' + query.join('*=') + '")]';
// any element with certian class or id + given content
} else if (value.search(/^[a-z0-9]*(\.|#)-?[_a-zA-Z]+[_a-zA-Z0-9-]*=(.)+$/) >= 0) {
var query = value.split(/=/);
var tag = query.shift();
var classOrId = tag.substr(tag.search(/(\.|#)/), 1) === '#' ? 'id' : 'class';
var classOrIdName = tag.slice(tag.search(/(\.|#)/) + 1);
tag = tag.substr(0, tag.search(/(\.|#)/));
using = 'xpath';
value = '' + xpathPrefix + (tag.length ? tag : '*') + '[contains(@' + classOrId + ', "' + classOrIdName + '") and normalize-space() = "' + query.join('=') + '"]';
// any element with certian class or id + has certain content
} else if (value.search(/^[a-z0-9]*(\.|#)-?[_a-zA-Z]+[_a-zA-Z0-9-]*\*=(.)+$/) >= 0) {
var query = value.split(/\*=/);
var tag = query.shift();
var classOrId = tag.substr(tag.search(/(\.|#)/), 1) === '#' ? 'id' : 'class';
var classOrIdName = tag.slice(tag.search(/(\.|#)/) + 1);
tag = tag.substr(0, tag.search(/(\.|#)/));
using = 'xpath';
value = xpathPrefix + (tag.length ? tag : '*') + '[contains(@' + classOrId + ', "' + classOrIdName + '") and contains(., "' + query.join('*=') + '")]';
value = '' + xpathPrefix + (tag.length ? tag : '*') + '[contains(@' + classOrId + ', "' + classOrIdName + '") and contains(., "' + query.join('*=') + '")]';
// allow to move up to the parent or select current element
} else if (value === '..' || value === '.') {
using = 'xpath';
}
return {
using: using,
value: value
};
};
exports['default'] = findStrategy;
module.exports = exports['default'];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9jaHJpc3RpYW5icm9tYW5uL1NpdGVzL1dlYnByb2pla3RlL3dlYmRyaXZlcmpzL0RFVi9saWIvaGVscGVycy9maW5kRWxlbWVudFN0cmF0ZWd5LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztpQ0FBOEIsdUJBQXVCOztBQUVyRCxJQUFNLGdCQUFnQixHQUFHLGNBQWMsQ0FBQTs7QUFFdkMsSUFBSSxZQUFZLEdBQUcsU0FBZixZQUFZLEdBQXNCO3NDQUFOLElBQUk7QUFBSixZQUFJOzs7QUFDaEMsUUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ25CLFFBQUksUUFBUSxHQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEFBQUMsQ0FBQTtBQUNsRCxRQUFJLFdBQVcsR0FBRyxRQUFRLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQTs7Ozs7QUFLeEMsUUFBSSxLQUFLLEdBQUcsZ0JBQWdCLENBQUE7O0FBRTVCLFFBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO0FBQzNCLGNBQU0scUNBQWtCLHNDQUFzQyxDQUFDLENBQUE7S0FDbEU7O0FBRUQsUUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUNuQixlQUFPO0FBQ0gsaUJBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2QsaUJBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ2pCLENBQUE7S0FDSjs7OztBQUlELFFBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtBQUNsRSxhQUFLLEdBQUcsSUFBSSxDQUFBO0FBQ1osYUFBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7OztLQUd6QixNQUFNLElB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RVYvbGliL2hlbHBlcnMvZmluZEVsZW1lbnRTdHJhdGVneS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb3RvY29sRXJyb3IgfSBmcm9tICcuLi91dGlscy9FcnJvckhhbmRsZXInXG5cbmNvbnN0IERFRkFVTFRfU0VMRUNUT1IgPSAnY3NzIHNlbGVjdG9yJ1xuXG5sZXQgZmluZFN0cmF0ZWd5ID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICBsZXQgdmFsdWUgPSBhcmdzWzBdXG4gICAgbGV0IHJlbGF0aXZlID0gKGFyZ3MubGVuZ3RoID4gMSA/IGFyZ3NbMV0gOiBmYWxzZSlcbiAgICBsZXQgeHBhdGhQcmVmaXggPSByZWxhdGl2ZSA/ICcuLycgOiAnLy8nXG5cbiAgICAvKipcbiAgICAgKiBzZXQgZGVmYXVsdCBzZWxlY3RvclxuICAgICAqL1xuICAgIGxldCB1c2luZyA9IERFRkFVTFRfU0VMRUNUT1JcblxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBQcm90b2NvbEVycm9yKCdzZWxlY3RvciBuZWVkcyB0byBiZSB0eXBlb2YgYHN0cmluZ2AnKVxuICAgIH1cblxuICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdXNpbmc6IGFyZ3NbMF0sXG4gICAgICAgICAgICB2YWx1ZTogYXJnc1sxXVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgdmFsdWUgdHlwZVxuICAgIC8vIHVzZSBpZCBzdHJhdGVneSBpZiB2YWx1ZSBzdGFydHMgd2l0aCAjIGFuZCBkb2VzbnQgY29udGFpbiBhbnkgb3RoZXIgQ1NTIHNlbGVjdG9yLXJlbGV2YW50IGNoYXJhY3RlclxuICAgIGlmICh2YWx1ZS5pbmRleE9mKCcjJykgPT09IDAgJiYgdmFsdWUuc2VhcmNoKC8oXFxzfD58XFwufFt8XSkvKSA9PT0gLTEpIHtcbiAgICAgICAgdXNpbmcgPSAnaWQnXG4gICAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMSlcblxuICAgIC8vIHVzZSB4UGF0aCBzdHJhdGVneSBpZiB2YWx1ZSBzdGFydHMgd2l0aCAvL1xuICAgIH0gZWxzZSBpZiAodmFsdWUuaW5kZXhPZignLycpID09PSAwIHx8IHZhbHVlLmluZGV4T2YoJygnKSA9PT0gMCB8fFxuICAgICAgICAgICAgICAgdmFsdWUuaW5kZXhPZignLi4vJykgPT09IDAgfHwgdmFsdWUuaW5kZXhPZignLi8nKSA9PT0gMCB8fFxuICAgICAgICAgICAgICAgdmFsdWUuaW5kZXhPZignKi8nKSA9PT0gMCkge1xuICAgICAgICB1c2luZyA9ICd4cGF0aCdcblxuICAgIC8vIHVzZSBsaW5rIHRleHQgc3RhcnRlZ3kgaWYgdmFsdWUgc3RhcnRlcyB3aXRoID1cbiAgICB9IGVsc2UgaWYgKHZhbHVlLmluZGV4T2YoJz0nKSA9PT0gMCkge1xuICAgICAgICB1c2luZyA9ICdsaW5rIHRleHQnXG4gICAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMSlcblxuICAgIC8vIHVzZSBwYXJ0aWFsIGxpbmsgdGV4dCBzdGFydGVneSBpZiB2YWx1ZSBzdGFydGVzIHdpdGggKj1cbiAgICB9IGVsc2UgaWYgKHZhbHVlLmluZGV4T2YoJyo9JykgPT09IDApIHtcbiAgICAgICAgdXNpbmcgPSAncGFydGlhbCBsaW5rIHRleHQnXG4gICAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMilcblxuICAgIC8vIHJlY3Vyc2l2ZSBlbGVtZW50IHNlYXJjaCB1c2luZyB0aGUgVWlBdXRvbWF0b3IgbGlicmFyeSAoQW5kcm9pZCBvbmx5KVxuICAgIH0gZWxzZSBpZiAodmFsdWUuaW5kZXhPZignYW5kcm9pZD0nKSA9PT0gMCkge1xuICAgICAgICB1c2luZyA9ICctYW5kcm9pZCB1aWF1dG9tYXRvcidcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5zbGljZSg4KVxuXG4gICAgLy8gcmVjdXJzaXZlIGVsZW1lbnQgc2VhcmNoIHVzaW5nIHRoZSBVSUF1dG9tYXRpb24gbGlicmFyeSAoaU9TLW9ubHkpXG4gICAgfSBlbHNlIGlmICh2YWx1ZS5pbmRleE9mKCdpb3M9JykgPT09IDApIHtcbiAgICAgICAgdXNpbmcgPSAnLWlvcyB1aWF1dG9tYXRpb24nXG4gICAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoNClcblxuICAgIC8vIHJlY3Vyc2l2ZSBlbGVtZW50IHNlYXJjaCB1c2luZyBhY2Nlc3NpYmlsaXR5IGlkXG4gICAgfSBlbHNlIGlmICh2YWx1ZS5pbmRleE9mKCd+JykgPT09IDApIHtcbiAgICAgICAgdXNpbmcgPSAnYWNjZXNzaWJpbGl0eSBpZCdcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5zbGljZSgxKVxuXG4gICAgLy8gdXNlIHRhZyBuYW1lIHN0cmF0ZWd5IGlmIHZhbHVlIGNvbnRhaW5zIGEgdGFnXG4gICAgLy8gZS5nLiBcIjxkaXY+XCIgb3IgXCI8ZGl2IC8+XCJcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnNlYXJjaCgvPFthLXpBLVpcXC1dKyggXFwvKSo+L2cpID49IDApIHtcbiAgICAgICAgdXNpbmcgPSAndGFnIG5hbWUnXG4gICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvPHw+fFxcL3xcXHMvZywgJycpXG5cbiAgICAvLyB1c2UgbmFtZSBzdHJhdGVneSBpZiB2YWx1ZSBxdWVyaWVzIGVsZW1lbnRzIHdpdGggbmFtZSBhdHRyaWJ1dGVzXG4gICAgLy8gZS5nLiBcIltuYW1lPSdteU5hbWUnXVwiIG9yICdbbmFtZT1cIm15TmFtZVwiXSdcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnNlYXJjaCgvXlxcW25hbWU9KFwifCcpKFthLXpBLXowLTlcXC1fIF0rKShcInwnKVxcXSQvKSA+PSAwKSB7XG4gICAgICAgIHVzaW5nID0gJ25hbWUnXG4gICAgICAgIHZhbHVlID0gdmFsdWUubWF0Y2goL15cXFtuYW1lPShcInwnKShbYS16QS16MC05XFwtXyBdKykoXCJ8JylcXF0kLylbMl1cblxuICAgIC8vIGFueSBlbGVtZW50IHdpdGggZ2l2ZW4gdGV4dCBlLmcuIGgxPVdlbGNvbWVcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnNlYXJjaCgvXlthLXowLTldKj0oLikrJC8pID49IDApIHtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdmFsdWUuc3BsaXQoLz0vKVxuICAgICAgICBsZXQgdGFnID0gcXVlcnkuc2hpZnQoKVxuXG4gICAgICAgIHVzaW5nID0gJ3hwYXRoJ1xuICAgICAgICB2YWx1ZSA9IGAke3hwYXRoUHJlZml4fSR7dGFnLmxlbmd0aCA/IHRhZyA6ICcqJ31bbm9ybWFsaXplLXNwYWNlKCkgPSBcIiR7cXVlcnkuam9pbignPScpfVwiXWBcblxuICAgIC8vIGFueSBlbGVtZW50IGNvbnRhaW5pbmcgZ2l2ZW4gdGV4dFxuICAgIH0gZWxzZSBpZiAodmFsdWUuc2VhcmNoKC9eW2EtejAtOV0qXFwqPSguKSskLykgPj0gMCkge1xuICAgICAgICBsZXQgcXVlcnkgPSB2YWx1ZS5zcGxpdCgvXFwqPS8pXG4gICAgICAgIGxldCB0YWcgPSBxdWVyeS5zaGlmdCgpXG5cbiAgICAgICAgdXNpbmcgPSAneHBhdGgnXG4gICAgICAgIHZhbHVlID0gYCR7eHBhdGhQcmVmaXh9JHt0YWcubGVuZ3RoID8gdGFnIDogJyonfVtjb250YWlucyguLCBcIiR7cXVlcnkuam9pbignKj0nKX1cIildYFxuXG4gICAgLy8gYW55IGVsZW1lbnQgd2l0aCBjZXJ0aWFuIGNsYXNzIG9yIGlkICsgZ2l2ZW4gY29udGVudFxuICAgIH0gZWxzZSBpZiAodmFsdWUuc2VhcmNoKC9eW2EtejAtOV0qKFxcLnwjKS0/W19hLXpBLVpdK1tfYS16QS1aMC05LV0qPSguKSskLykgPj0gMCkge1xuICAgICAgICBsZXQgcXVlcnkgPSB2YWx1ZS5zcGxpdCgvPS8pXG4gICAgICAgIGxldCB0YWcgPSBxdWVyeS5zaGlmdCgpXG5cbiAgICAgICAgbGV0IGNsYXNzT3JJZCA9IHRhZy5zdWJzdHIodGFnLnNlYXJjaCgvKFxcLnwjKS8pLCAxKSA9PT0gJyMnID8gJ2lkJyA6ICdjbGFzcydcbiAgICAgICAgbGV0IGNsYXNzT3JJZE5hbWUgPSB0YWcuc2xpY2UodGFnLnNlYXJjaCgvKFxcLnwjKS8pICsgMSlcblxuICAgICAgICB0YWcgPSB0YWcuc3Vic3RyKDAsIHRhZy5zZWFyY2goLyhcXC58IykvKSlcbiAgICAgICAgdXNpbmcgPSAneHBhdGgnXG4gICAgICAgIHZhbHVlID0gYCR7eHBhdGhQcmVmaXh9JHt0YWcubGVuZ3RoID8gdGFnIDogJyonfVtjb250YWlucyhAJHtjbGFzc09ySWR9LCBcIiR7Y2xhc3NPcklkTmFtZX1cIikgYW5kIG5vcm1hbGl6ZS1zcGFjZSgpID0gXCIke3F1ZXJ5LmpvaW4oJz0nKX1cIl1gXG5cbiAgICAvLyBhbnkgZWxlbWVudCB3aXRoIGNlcnRpYW4gY2xhc3Mgb3IgaWQgKyBoYXMgY2VydGFpbiBjb250ZW50XG4gICAgfSBlbHNlIGlmICh2YWx1ZS5zZWFyY2goL15bYS16MC05XSooXFwufCMpLT9bX2EtekEtWl0rW19hLXpBLVowLTktXSpcXCo9KC4pKyQvKSA+PSAwKSB7XG4gICAgICAgIGxldCBxdWVyeSA9IHZhbHVlLnNwbGl0KC9cXCo9LylcbiAgICAgICAgbGV0IHRhZyA9IHF1ZXJ5LnNoaWZ0KClcblxuICAgICAgICBsZXQgY2xhc3NPcklkID0gdGFnLnN1YnN0cih0YWcuc2VhcmNoKC8oXFwufCMpLyksIDEpID09PSAnIycgPyAnaWQnIDogJ2NsYXNzJ1xuICAgICAgICBsZXQgY2xhc3NPcklkTmFtZSA9IHRhZy5zbGljZSh0YWcuc2VhcmNoKC8oXFwufCMpLykgKyAxKVxuXG4gICAgICAgIHRhZyA9IHRhZy5zdWJzdHIoMCwgdGFnLnNlYXJjaCgvKFxcLnwjKS8pKVxuICAgICAgICB1c2luZyA9ICd4cGF0aCdcbiAgICAgICAgdmFsdWUgPSB4cGF0aFByZWZpeCArICh0YWcubGVuZ3RoID8gdGFnIDogJyonKSArICdbY29udGFpbnMoQCcgKyBjbGFzc09ySWQgKyAnLCBcIicgKyBjbGFzc09ySWROYW1lICsgJ1wiKSBhbmQgY29udGFpbnMoLiwgXCInICsgcXVlcnkuam9pbignKj0nKSArICdcIildJ1xuICAgICAgICB2YWx1ZSA9IGAke3hwYXRoUHJlZml4fSR7dGFnLmxlbmd0aCA/IHRhZyA6ICcqJ31bY29udGFpbnMoQCR7Y2xhc3NPcklkfSwgXCIke2NsYXNzT3JJZE5hbWV9XCIpIGFuZCBjb250YWlucyguLCBcIiR7cXVlcnkuam9pbignKj0nKX1cIildYFxuXG4gICAgLy8gYWxsb3cgdG8gbW92ZSB1cCB0byB0aGUgcGFyZW50IG9yIHNlbGVjdCBjdXJyZW50IGVsZW1lbnRcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAnLi4nIHx8IHZhbHVlID09PSAnLicpIHtcbiAgICAgICAgdXNpbmcgPSAneHBhdGgnXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgdXNpbmc6IHVzaW5nLFxuICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZpbmRTdHJhdGVneVxuIl19 |