@luminati-io/webdriverio8
Version:
Next-gen browser and mobile automation test framework for Node.js
56 lines • 3.75 kB
JavaScript
import { checkUnicode } from '../../utils/index.js';
/**
*
* Send a sequence of key strokes to the "active" element. You can make an input element active by just clicking
* on it. To use characters like "Left arrow" or "Back space", import the `Key` object from the WebdriverIO package.
*
* Modifier like `Control`, `Shift`, `Alt` and `Command` will stay pressed so you need to trigger them again to release
* them. Modifiying a click however requires you to use the WebDriver Actions API through the
* [performActions](https://webdriver.io/docs/api/webdriver#performactions) method.
*
* :::info
*
* Control keys differ based on the operating system the browser is running on, e.g. MacOS: `Command` and Windows: `Control`.
* WebdriverIO provides a cross browser modifier control key called `Ctrl` (see example below).
*
* :::
*
* @param {String|String[]} value The sequence of keys to type. An array or string must be provided.
* @see https://w3c.github.io/webdriver/#dispatching-actions
* @example https://github.com/webdriverio/example-recipes/blob/355434bdef13d29608d6d5fbfbeaa034c8a2aa74/keys/keys.js#L1-L17
*
*/
export async function keys(value) {
let keySequence = [];
/**
* replace key with corresponding unicode character
*/
if (typeof value === 'string') {
keySequence = checkUnicode(value, this.isDevTools);
}
else if (Array.isArray(value)) {
const charArray = value;
for (const charSet of charArray) {
keySequence = keySequence.concat(checkUnicode(charSet, this.isDevTools));
}
}
else {
throw new Error('"keys" command requires a string or array of strings as parameter');
}
/**
* JsonWireProtocol action
*/
if (!this.isW3C) {
return this.sendKeys(keySequence);
}
/**
* W3C way of handle it key actions
*/
const keyAction = this.action('key');
keySequence.forEach((value) => keyAction.down(value));
keyAction.pause(10);
keySequence.forEach((value) => keyAction.up(value));
// pass true to skip release of keys as they are already released
return keyAction.perform(true);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9icm93c2VyL2tleXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBRW5EOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsSUFBSSxDQUV0QixLQUF3QjtJQUV4QixJQUFJLFdBQVcsR0FBYSxFQUFFLENBQUE7SUFFOUI7O09BRUc7SUFDSCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzVCLFdBQVcsR0FBRyxZQUFZLENBQUMsS0FBd0MsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDekYsQ0FBQztTQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzlCLE1BQU0sU0FBUyxHQUF3QyxLQUFZLENBQUE7UUFDbkUsS0FBSyxNQUFNLE9BQU8sSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUM5QixXQUFXLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFBO1FBQzVFLENBQUM7SUFDTCxDQUFDO1NBQU0sQ0FBQztRQUNKLE1BQU0sSUFBSSxLQUFLLENBQUMsbUVBQW1FLENBQUMsQ0FBQTtJQUN4RixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQ3JDLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDcEMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO0lBQ3JELFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDbkIsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO0lBRW5ELGlFQUFpRTtJQUNqRSxPQUFPLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7QUFDbEMsQ0FBQyJ9