mirror of
https://github.com/Tencent/BrowserSkill.git
synced 2026-09-10 13:01:23 +08:00
64 lines
2.1 KiB
TypeScript
64 lines
2.1 KiB
TypeScript
import { describe, expect, it, vi } from "vitest";
|
|
import type { CdpRunner } from "../../shared";
|
|
import type { CapturedNode, CapturedViewModel } from "../capture";
|
|
import { captureFrameData } from "../frame-capture";
|
|
|
|
function node(frameId: string, backendNodeId: number): CapturedNode {
|
|
return {
|
|
backendNodeId,
|
|
parentBackendNodeId: null,
|
|
frameId,
|
|
tag: "div",
|
|
attrs: {},
|
|
rect: null,
|
|
localRect: { x: 0, y: 0, w: 20, h: 20 },
|
|
paintOrder: 0,
|
|
position: "static",
|
|
pointerEvents: "auto",
|
|
};
|
|
}
|
|
|
|
describe("captureFrameData", () => {
|
|
it("captures AX trees for every same-target frame found in the DOM snapshot", async () => {
|
|
const captured: CapturedViewModel = {
|
|
nodes: [node("main", 1)],
|
|
viewport: { width: 1000, height: 800 },
|
|
iframeNodes: new Map([[10, [node("child", 101)]]]),
|
|
frameNodes: new Map([
|
|
["main", [node("main", 1)]],
|
|
["child", [node("child", 101)]],
|
|
]),
|
|
frameOwnerBackendNodeIds: new Map([["child", 10]]),
|
|
frameParentIds: new Map([["child", "main"]]),
|
|
rootFrameId: "main",
|
|
excludedBackendNodeIds: new Set(),
|
|
};
|
|
const send = vi.fn(async (_tabId: number, method: string, params?: object) => {
|
|
if (method === "Accessibility.enable") return {};
|
|
if (method === "Accessibility.getFullAXTree") {
|
|
const frameId = (params as { frameId?: string })?.frameId ?? "main";
|
|
return {
|
|
nodes: [
|
|
{
|
|
nodeId: `${frameId}-root`,
|
|
frameId,
|
|
backendDOMNodeId: frameId === "main" ? 1 : 101,
|
|
},
|
|
],
|
|
};
|
|
}
|
|
throw new Error(`unexpected ${method}`);
|
|
});
|
|
|
|
const documents = await captureFrameData({ send } as CdpRunner, 4, captured);
|
|
|
|
expect(send).toHaveBeenCalledWith(4, "Accessibility.enable", {});
|
|
expect(documents.map((document) => document.frameId)).toEqual(["main", "child"]);
|
|
expect(documents.find((document) => document.frameId === "child")).toMatchObject({
|
|
parentFrameId: "main",
|
|
ownerBackendNodeId: 10,
|
|
axNodes: [{ nodeId: "child-root", frameId: "child", backendDOMNodeId: 101 }],
|
|
});
|
|
});
|
|
});
|