export declare type Action = 'click' | 'fill' | 'press' | 'scroll' | 'selectOption' | 'type' | 'navigation' | 'step'; export declare type BrowserName = 'chromium' | 'firefox' | 'webkit'; export declare type Callback = (data?: S) => T; export interface Doc { attrs?: any; children?: Doc[]; content?: string; name?: string; type: string; voidElement?: boolean; } export interface ElementEvent extends Plugin { isTrusted?: boolean; action: Action; event: ElementEvent; index: number; selector?: string; target?: Doc; time?: number; value: any; } export declare type ElementEventName = 'click' | 'input' | 'keydown' | 'keyup' | 'mousedown' | 'paste' | 'scroll' | 'selectall' | 'goback' | 'goto' | 'goforward'; export interface InputEvent extends ElementEvent { name: 'input'; value: string | null; } export interface KeyEvent extends ElementEvent { name: 'keydown' | 'keyup'; value: string; } export interface PasteEvent extends ElementEvent { name: 'paste'; value: string; } export interface ScrollEvent extends ElementEvent { name: 'scroll'; value: ScrollValue; } export declare type ScrollValue = { x: number; y: number; }; export declare type Plugin = { name: string; testOnly?: boolean; page?: Function; host?: Function; reduce?: (...args: any[]) => any; all?: Function; rereduce?: Function; generate?: Function; prompt?: { choice: string; questions: { message: string; name: string; type: string; }[]; }; test?: any; play?: any; config?: any; initScript?: string; extension?: any; }; export interface Step { action: Action; event: ElementEvent; index: number; value?: StepValue; name?: string; type?: any; } export declare type StepValue = string | ScrollValue | null | undefined; export interface Workflow { device?: string; name: string; steps: Step[]; url: string; }