Jump to content

Connect SuperML | Leeroopedia MCP: Equip your AI agents with best practices, code verification, and debugging knowledge. Powered by Leeroo — building Organizational Superintelligence. Contact us at founders@leeroo.com.

Implementation:Microsoft Playwright CrInput

From Leeroopedia
Knowledge Sources
Domains Chromium, Input
Last Updated 2026-02-12 00:00 GMT

Overview

Concrete tool for dispatching keyboard and mouse input events via the Chrome DevTools Protocol provided by the Playwright library.

Description

The module provides `RawKeyboardImpl` and `RawMouseImpl` classes that implement Playwright's `input.RawKeyboard` and `input.RawMouse` interfaces using CDP's `Input.dispatchKeyEvent` and `Input.dispatchMouseEvent` commands. `RawKeyboardImpl` handles key down/up events with Mac editing command support (translating keyboard shortcuts to Mac commands like `moveToBeginningOfLine`, `deleteWordBackward`), text insertion via `Input.insertText`, and drag cancellation on Escape. `RawMouseImpl` dispatches mouse move, down, up, and wheel events with proper button masks, modifier translation, and drag-and-drop integration via `DragManager`.

Usage

Use CrInput when Playwright simulates keyboard and mouse input in Chromium-based browsers through the CDP protocol path.

Code Reference

Source Location

Signature

export class RawKeyboardImpl implements input.RawKeyboard {
  constructor(client: CRSession, isMac: boolean, dragManager: DragManager);
  async keydown(progress: Progress, modifiers: Set<types.KeyboardModifier>, keyName: string, description: input.KeyDescription, autoRepeat: boolean): Promise<void>;
  async keyup(progress: Progress, modifiers: Set<types.KeyboardModifier>, keyName: string, description: input.KeyDescription): Promise<void>;
  async sendText(progress: Progress, text: string): Promise<void>;
}

export class RawMouseImpl implements input.RawMouse {
  constructor(page: CRPage, client: CRSession, dragManager: DragManager);
  async move(progress: Progress, x: number, y: number, button: types.MouseButton | 'none', buttons: Set<types.MouseButton>, modifiers: Set<types.KeyboardModifier>, forClick: boolean): Promise<void>;
  async down(progress: Progress, x: number, y: number, button: types.MouseButton, buttons: Set<types.MouseButton>, modifiers: Set<types.KeyboardModifier>, clickCount: number): Promise<void>;
  async up(progress: Progress, x: number, y: number, button: types.MouseButton, buttons: Set<types.MouseButton>, modifiers: Set<types.KeyboardModifier>, clickCount: number): Promise<void>;
  async wheel(progress: Progress, x: number, y: number, buttons: Set<types.MouseButton>, modifiers: Set<types.KeyboardModifier>, deltaX: number, deltaY: number): Promise<void>;
}

Import

import { RawKeyboardImpl, RawMouseImpl } from '../server/chromium/crInput';

I/O Contract

Inputs

Name Type Required Description
client CRSession Yes CDP session for dispatching input events
isMac boolean Yes Whether the platform is macOS (for editing commands)
dragManager DragManager Yes Drag-and-drop manager for coordinating drag operations
progress Progress Yes Progress tracker for cancellation

Outputs

Name Type Description
(side effect) void Input events dispatched to the browser via CDP

Usage Examples

import { RawKeyboardImpl, RawMouseImpl } from '../server/chromium/crInput';

const keyboard = new RawKeyboardImpl(crSession, process.platform === 'darwin', dragManager);
await keyboard.keydown(progress, new Set(), 'a', keyDescription, false);
await keyboard.keyup(progress, new Set(), 'a', keyDescription);

const mouse = new RawMouseImpl(crPage, crSession, dragManager);
await mouse.move(progress, 100, 200, 'none', new Set(), new Set(), false);
await mouse.down(progress, 100, 200, 'left', new Set(['left']), new Set(), 1);

Related Pages

Page Connections

Double-click a node to navigate. Hold to expand connections.
Principle
Implementation
Heuristic
Environment