@antithesishq/bombadil/browser #

Exports #

Action #

type Action<
  Number = number,
  String = string
> = "Back" | "Forward" | "Reload" | "Wait" | {
  Click: {
    fingerprint: Fingerprint;
    point: Point<Number>;
  };
} | {
  DoubleClick: {
    fingerprint: Fingerprint;
    point: Point<Number>;
    delayMillis: Range;
  };
} | {
  TypeText: {
    text: String;
    delayMillis: Range;
  };
} | {
  PressKey: {
    code: number;
  };
} | {
  ScrollUp: {
    origin: Point;
    distance: Number;
  };
} | {
  ScrollDown: {
    origin: Point;
    distance: Number;
  };
} | {
  SetFileInputFiles: {
    selector: string;
    files: string[];
  };
} | {
  MouseDrag: {
    from: Point;
    to: Point;
    steps: Number;
    delayMillis: Number;
  };
} | {
  SetViewport: {
    width: Number;
    height: Number;
  };
}

ActionTemplate #

type ActionTemplate = Action<Range, StringGenerator>

ConsoleEntry #

type ConsoleEntry = {
  timestamp: number;
  level: "warning" | "error";
  args: JSON[];
}

Fingerprint #

type Fingerprint = {
  testId: string | null;
  id: string | null;
  role: string | null;
  accessibleName: string | null;
  tag: string;
  href: string | null;
  nameAttr: string | null;
  placeholder: string | null;
  inputType: string | null;
  textContent: string | null;
  structuralPath: string | null;
}
type NavigationEntry = {
  id: number;
  title: string;
  url: string;
}

Point #

type Point<Number = number> = {
  x: Number;
  y: Number;
}

Resources #

interface Resources {
  js_heap_used: number;
  js_heap_total: number;
  dom_nodes: number;
  documents: number;
  js_event_listeners: number;
  layout_objects: number;
  timestamp: number;
  thread_time: number;
  task_duration: number;
  script_duration: number;
}

State #

interface State {
  document: HTMLDocument;
  window: Window;
  navigationHistory: {
    back: NavigationEntry[];
    current: NavigationEntry;
    forward: NavigationEntry[];
  };
  errors: {
    uncaughtExceptions: {
      text: string;
      line: number;
      column: number;
      url: string | null;
      remote_object: {
        type_name: string;
        subtype: string | null;
        class_name: string | null;
        description: string | null;
        value: unknown;
      } | null;
      stacktrace: {
        name: string;
        line: number;
        column: number;
        url: string;
      }[] | null;
    }[];
  };
  console: ConsoleEntry[];
  lastAction: Action | null;
  resources: Resources;
}

actions #

function actions(generate: () => Tree<ActionTemplate> | ActionTemplate[]): ActionGenerator<ActionTemplate>;

extract #

function extract<T extends JSON>(query: (state: State) => T): Cell<T>;

getFingerprint #

function getFingerprint(el: Element): Fingerprint;

weighted #

function weighted(value: [number, ActionTemplate | ActionGenerator<ActionTemplate>][]): ActionGenerator<ActionTemplate>;