shake
Simulate device shaking on Android or iOS for automation testing by specifying duration, intensity, and platform. Simplify testing gestures with precise control.
Instructions
Shake the device
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| duration | No | Duration of the shake in milliseconds (default: 1000) | |
| intensity | No | Intensity of the shake acceleration (default: 100) | |
| platform | Yes | Platform of the device |
Implementation Reference
- src/features/action/Shake.ts:7-58 (handler)Shake class implementing the core shake logic using ADB emulator sensor commands to simulate device shaking.export class Shake extends BaseVisualChange { constructor(device: BootedDevice, adb: AdbUtils | null = null, axe: Axe | null = null) { super(device, adb, axe); } async execute( options: ShakeOptions = {}, progress?: ProgressCallback ): Promise<ShakeResult> { const duration = options.duration ?? 1000; // Default 1 second const intensity = options.intensity ?? 100; // Default intensity of 100 return this.observedInteraction( async () => { try { // Start the shake by setting high acceleration values await this.adb.executeCommand(`emu sensor set acceleration ${intensity}:${intensity}:${intensity}`); logger.info(`Started shake with intensity ${intensity} for ${duration}ms`); // Wait for the specified duration await new Promise(resolve => setTimeout(resolve, duration)); // Stop the shake by resetting acceleration to 0 await this.adb.executeCommand(`emu sensor set acceleration 0:0:0`); logger.info("Shake completed"); return { success: true, duration, intensity }; } catch (error) { logger.error(`Failed to execute shake: ${error}`); return { success: false, duration, intensity, error: `Failed to shake device: ${error}` }; } }, { changeExpected: false, // Shake typically doesn't change UI directly timeoutMs: duration + 2000, // Give extra time beyond shake duration tolerancePercent: 0.00, progress } ); } }
- src/server/interactionTools.ts:763-769 (registration)Tool registration for the 'shake' MCP tool, linking schema, handler, and description.ToolRegistry.registerDeviceAware( "shake", "Shake the device", shakeSchema, shakeHandler, true // Supports progress notifications );
- Zod schema defining input parameters for the shake tool (duration, intensity, platform).export const shakeSchema = z.object({ duration: z.number().optional().describe("Duration of the shake in milliseconds (default: 1000)"), intensity: z.number().optional().describe("Intensity of the shake acceleration (default: 100)"), platform: z.enum(["android", "ios"]).describe("Platform of the device") });
- src/models/ShakeOptions.ts:1-16 (schema)TypeScript interface defining ShakeOptions used in the execute method./** * Options for performing a shake operation */ export interface ShakeOptions { /** * Duration of the shake in milliseconds (default: 1000ms) */ duration?: number; /** * Intensity of the shake acceleration (default: 100) * Higher values create more intense shaking */ intensity?: number; }
- src/models/ShakeResult.ts:3-13 (schema)TypeScript interface for ShakeResult returned by the execute method./** * Result of a shake operation */ export interface ShakeResult { success: boolean; duration: number; intensity: number; observation?: ObserveResult; error?: string; }