UNPKG

@luminati-io/webdriverio8

Version:

Next-gen browser and mobile automation test framework for Node.js

56 lines 3.75 kB
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