chrome-remote-interface-extra
Version:
Bringing a puppeteer like API and more to the chrome-remote-interface by cyrus-and
42 lines (37 loc) • 1.14 kB
JavaScript
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