Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 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 | 8x 8x 4x 4x 1x 6x 3x 5x 4x 6x 6x 1x 1x | /**
*
* Send a sequence of key strokes to the active element. You can also use 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://w3c.github.io/webdriver/webdriver-spec.html#keyboard-actions).
* To do that, the value has to correspond to a key from the table.
*
* Modifier like Ctrl, Shift, Alt and Meta will stay pressed so you need to trigger them again to release them.
*
* <example>
:keys.js
it('copies text out of active element', () => {
// copies text from an input element
const input = $('#username')
input.setValue('anonymous')
browser.keys(['Meta', 'a'])
browser.keys(['Meta', 'c'])
});
* </example>
*
* @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
*
*/
import { checkUnicode } from '../../utils'
export default function keys (value) {
let keySequence = []
/**
* replace key with corresponding unicode character
*/
if (typeof value === 'string') {
keySequence = checkUnicode(value)
} else if (value instanceof Array) {
for (const charSet of value) {
keySequence = keySequence.concat(checkUnicode(charSet))
}
} 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 keyDownActions = keySequence.map((value) => ({ type: 'keyDown', value }))
const keyUpActions = keySequence.map((value) => ({ type: 'keyUp', value }))
return this.performActions([{
type: 'key',
id: 'keyboard',
actions: [...keyDownActions, ...keyUpActions]
}]).then(() => this.releaseActions())
}
|