all files / DEV/lib/protocol/ keys.js

92% Statements 23/25
66.67% Branches 8/12
0% Functions 0/2
50% Lines 2/4
19 statements, 8 branches Ignored     
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76                                                                                                                                                     
/**
 *
 * Send a sequence of key strokes to the active element. This command is similar to the
 * send keys command in every aspect except the implicit termination: The modifiers are
 * *not* released at the end of the call. Rather, the state of the modifier keys is kept
 * between calls, so mouse interactions can be performed while modifier keys are depressed.
 *
 * You can also use unicode characters like Left arrow or Back space. WebdriverIO will take
 * care of translating them into unicode characters. You’ll find all supported characters
 * [here](https://code.google.com/p/selenium/wiki/JsonWireProtocol#/session/:sessionId/element/:id/value).
 * To do that, the value has to correspond to a key from the table.
 *
 * @param {String|String[]} value  The sequence of keys to type. An array must be provided. The server should flatten the array items to a single string to be typed.
 *
 * @see  https://code.google.com/p/selenium/wiki/JsonWireProtocol#/session/:sessionId/keys
 * @type protocol
 *
 */
 
'use strict';
 
var _helpersConstants = require('../helpers/constants');

var _utilsErrorHandler = require('../utils/ErrorHandler');
 
module.exports = function keys(value) {
    var key = [];
 
    /**
     * replace key with corresponding unicode character
     */
    if (typeof value === 'string') {
        key = checkUnicode(value);
    } else if (value instanceof Array) {
        var _iteratorNormalCompletion = true;
        var _didIteratorError = false;
        var _iteratorError = undefined;
 
        try {
            for (var _iterator = value[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
                var charSet = _step.value;
 
                key = key.concat(checkUnicode(charSet));
            }
        } catch (err) {
            _didIteratorError = true;
            _iteratorError = err;
        } finally {
            try {
                if (!_iteratorNormalCompletion && _iterator['return']) {
                    _iterator['return']();
                }
            } finally {
                if (_didIteratorError) {
                    throw _iteratorError;
                }
            }
        }
    } else {
        throw new _utilsErrorHandler.ProtocolError('number or type of arguments don\'t agree with keys protocol command');
    }
 
    return this.requestHandler.create('/session/:sessionId/keys', {
        'value': key
    });
};
 
/*!
 * check for unicode character or split string into literals
 * @param  {String} value  text
 * @return {Array}         set of characters or unicode symbols
 */
function checkUnicode(value) {
    return _helpersConstants.UNICODE_CHARACTERS.hasOwnProperty(value) ? [_helpersConstants.UNICODE_CHARACTERS[value]] : value.split('');
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9jaHJpc3RpYW5icm9tYW5uL1NpdGVzL1dlYnByb2pla3RlL3dlYmRyaXZlcmpzL0RFVi9saWIvcHJvdG9jb2wva2V5cy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Z0NBbUJtQyxzQkFBc0I7O2lDQUMzQix1QkFBdUI7O0FBRXJELE1BQU0sQ0FBQyxPQUFPLEdBQUcsU0FBUyxJQUFJLENBQUUsS0FBSyxFQUFFO0FBQ25DLFFBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQTs7Ozs7QUFLWixRQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUMzQixXQUFHLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFBO0tBQzVCLE1BQU0sSUFBSSxLQUFLLFlBQVksS0FBSyxFQUFFOzs7Ozs7QUFDL0IsaUNBQW9CLEtBQUssOEhBQUU7b0JBQWxCLE9BQU87O0FBQ1osbUJBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBO2FBQzFDOzs7Ozs7Ozs7Ozs7Ozs7S0FDSixNQUFNO0FBQ0gsY0FBTSxxQ0FBa0IscUVBQXFFLENBQUMsQ0FBQTtLQUNqRzs7QUFFRCxXQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLDBCQUEwQixFQUFFO0FBQzFELGVBQU8sRUFBRSxHQUFHO0tBQ2YsQ0FBQyxDQUFBO0NBQ0wsQ0FBQTs7Ozs7OztBQU9ELFNBQVMsWUFBWSxDQUFFLEtBQUssRUFBRTtBQUMxQixXQUFPLHFDQUFtQixjQUFjLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxxQ0FBbUIsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFBO0NBQ2xHIiwiZmlsZSI6Ii9Vc2Vycy9jaHJpc3RpYW5icm9tYW5uL1NpdGVzL1dlYnByb2pla3RlL3dlYmRyaXZlcmpzL0RFVi9saWIvcHJvdG9jb2wva2V5cy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICpcbiAqIFNlbmQgYSBzZXF1ZW5jZSBvZiBrZXkgc3Ryb2tlcyB0byB0aGUgYWN0aXZlIGVsZW1lbnQuIFRoaXMgY29tbWFuZCBpcyBzaW1pbGFyIHRvIHRoZVxuICogc2VuZCBrZXlzIGNvbW1hbmQgaW4gZXZlcnkgYXNwZWN0IGV4Y2VwdCB0aGUgaW1wbGljaXQgdGVybWluYXRpb246IFRoZSBtb2RpZmllcnMgYXJlXG4gKiAqbm90KiByZWxlYXNlZCBhdCB0aGUgZW5kIG9mIHRoZSBjYWxsLiBSYXRoZXIsIHRoZSBzdGF0ZSBvZiB0aGUgbW9kaWZpZXIga2V5cyBpcyBrZXB0XG4gKiBiZXR3ZWVuIGNhbGxzLCBzbyBtb3VzZSBpbnRlcmFjdGlvbnMgY2FuIGJlIHBlcmZvcm1lZCB3aGlsZSBtb2RpZmllciBrZXlzIGFyZSBkZXByZXNzZWQuXG4gKlxuICogWW91IGNhbiBhbHNvIHVzZSB1bmljb2RlIGNoYXJhY3RlcnMgbGlrZSBMZWZ0IGFycm93IG9yIEJhY2sgc3BhY2UuIFdlYmRyaXZlcklPIHdpbGwgdGFrZVxuICogY2FyZSBvZiB0cmFuc2xhdGluZyB0aGVtIGludG8gdW5pY29kZSBjaGFyYWN0ZXJzLiBZb3XigJlsbCBmaW5kIGFsbCBzdXBwb3J0ZWQgY2hhcmFjdGVyc1xuICogW2hlcmVdKGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3Avc2VsZW5pdW0vd2lraS9Kc29uV2lyZVByb3RvY29sIy9zZXNzaW9uLzpzZXNzaW9uSWQvZWxlbWVudC86aWQvdmFsdWUpLlxuICogVG8gZG8gdGhhdCwgdGhlIHZhbHVlIGhhcyB0byBjb3JyZXNwb25kIHRvIGEga2V5IGZyb20gdGhlIHRhYmxlLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfFN0cmluZ1tdfSB2YWx1ZSAgVGhlIHNlcXVlbmNlIG9mIGtleXMgdG8gdHlwZS4gQW4gYXJyYXkgbXVzdCBiZSBwcm92aWRlZC4gVGhlIHNlcnZlciBzaG91bGQgZmxhdHRlbiB0aGUgYXJyYXkgaXRlbXMgdG8gYSBzaW5nbGUgc3RyaW5nIHRvIGJlIHR5cGVkLlxuICpcbiAqIEBzZWUgIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3Avc2VsZW5pdW0vd2lraS9Kc29uV2lyZVByb3RvY29sIy9zZXNzaW9uLzpzZXNzaW9uSWQva2V5c1xuICogQHR5cGUgcHJvdG9jb2xcbiAqXG4gKi9cblxuaW1wb3J0IHsgVU5JQ09ERV9DSEFSQUNURVJTIH0gZnJvbSAnLi4vaGVscGVycy9jb25zdGFudHMnXG5pbXBvcnQgeyBQcm90b2NvbEVycm9yIH0gZnJvbSAnLi4vdXRpbHMvRXJyb3JIYW5kbGVyJ1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGtleXMgKHZhbHVlKSB7XG4gICAgbGV0IGtleSA9IFtdXG5cbiAgICAvKipcbiAgICAgKiByZXBsYWNlIGtleSB3aXRoIGNvcnJlc3BvbmRpbmcgdW5pY29kZSBjaGFyYWN0ZXJcbiAgICAgKi9cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICBrZXkgPSBjaGVja1VuaWNvZGUodmFsdWUpXG4gICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgIGZvciAobGV0IGNoYXJTZXQgb2YgdmFsdWUpIHtcbiAgICAgICAgICAgIGtleSA9IGtleS5jb25jYXQoY2hlY2tVbmljb2RlKGNoYXJTZXQpKVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFByb3RvY29sRXJyb3IoJ251bWJlciBvciB0eXBlIG9mIGFyZ3VtZW50cyBkb25cXCd0IGFncmVlIHdpdGgga2V5cyBwcm90b2NvbCBjb21tYW5kJylcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0SGFuZGxlci5jcmVhdGUoJy9zZXNzaW9uLzpzZXNzaW9uSWQva2V5cycsIHtcbiAgICAgICAgJ3ZhbHVlJzoga2V5XG4gICAgfSlcbn1cblxuLyohXG4gKiBjaGVjayBmb3IgdW5pY29kZSBjaGFyYWN0ZXIgb3Igc3BsaXQgc3RyaW5nIGludG8gbGl0ZXJhbHNcbiAqIEBwYXJhbSAge1N0cmluZ30gdmFsdWUgIHRleHRcbiAqIEByZXR1cm4ge0FycmF5fSAgICAgICAgIHNldCBvZiBjaGFyYWN0ZXJzIG9yIHVuaWNvZGUgc3ltYm9sc1xuICovXG5mdW5jdGlvbiBjaGVja1VuaWNvZGUgKHZhbHVlKSB7XG4gICAgcmV0dXJuIFVOSUNPREVfQ0hBUkFDVEVSUy5oYXNPd25Qcm9wZXJ0eSh2YWx1ZSkgPyBbVU5JQ09ERV9DSEFSQUNURVJTW3ZhbHVlXV0gOiB2YWx1ZS5zcGxpdCgnJylcbn1cbiJdfQ==