Implementation:Microsoft Playwright CrInput
| 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
- Repository: Microsoft_Playwright
- File: packages/playwright-core/src/server/chromium/crInput.ts
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);