lib/input/Touchscreen.js
const Keyboard = require('./Keyboard')
class Touchscreen {
/**
* @param {Chrome|CRIConnection|CDPSession|Object} client
* @param {?Keyboard} [keyboard]
*/
constructor (client, keyboard) {
this._client = client
this._keyboard = keyboard != null ? keyboard : new Keyboard(client)
}
/**
* @param {number} x
* @param {number} y
*/
async tap (x, y) {
// Touches appear to be lost during the first frame after navigation.
// This waits a frame before sending the tap.
// @see https://crbug.com/613219
await this._client.send('Runtime.evaluate', {
expression:
'new Promise(x => requestAnimationFrame(() => requestAnimationFrame(x)))',
awaitPromise: true
})
const touchPoints = [{ x: Math.round(x), y: Math.round(y) }]
await this._client.send('Input.dispatchTouchEvent', {
type: 'touchStart',
touchPoints,
modifiers: this._keyboard._modifiers
})
await this._client.send('Input.dispatchTouchEvent', {
type: 'touchEnd',
touchPoints: [],
modifiers: this._keyboard._modifiers
})
}
}
module.exports = Touchscreen