Implementation:Microsoft Playwright BidiInput
| Knowledge Sources | |
|---|---|
| Domains | BiDi, Input |
| Last Updated | 2026-02-12 00:00 GMT |
Overview
Concrete tool for dispatching keyboard and mouse input events via the WebDriver BiDi 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 BiDi `input.performActions` commands. `RawKeyboardImpl` translates key names to BiDi key values using `getBidiKeyValue` and sends keyDown/keyUp action sequences. `RawMouseImpl` handles mouse move, down, up, and wheel events by constructing BiDi pointer action sequences with appropriate coordinates, button mappings, and modifier keys. Both classes route actions through a `BidiSession`.
Usage
Use BidiInput when Playwright needs to simulate keyboard and mouse input in BiDi-connected browsers (Firefox native BiDi or Chromium via BiDi-over-CDP).
Code Reference
Source Location
- Repository: Microsoft_Playwright
- File: packages/playwright-core/src/server/bidi/bidiInput.ts
Signature
export class RawKeyboardImpl implements input.RawKeyboard {
constructor(session: BidiSession);
setSession(session: BidiSession): void;
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(session: BidiSession);
setSession(session: BidiSession): void;
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/bidi/bidiInput';
I/O Contract
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
| session | BidiSession | Yes | The BiDi session for sending input commands |
| progress | Progress | Yes | Progress tracker for cancellation and racing |
| keyName | string | Yes | Name of the key to press/release |
| x, y | number | Yes | Mouse coordinates for mouse actions |
| button | types.MouseButton | Yes | Mouse button identifier |
| modifiers | Set<types.KeyboardModifier> | Yes | Active keyboard modifiers (Shift, Control, etc.) |
Outputs
| Name | Type | Description |
|---|---|---|
| (side effect) | void | Input events dispatched to the browser via BiDi |
Usage Examples
import { RawKeyboardImpl, RawMouseImpl } from '../server/bidi/bidiInput';
const keyboard = new RawKeyboardImpl(bidiSession);
await keyboard.keydown(progress, new Set(), 'Enter', keyDescription, false);
await keyboard.keyup(progress, new Set(), 'Enter', keyDescription);
const mouse = new RawMouseImpl(bidiSession);
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);