import type { Locator, Page } from "playwright"; /** 统一 browser evaluate / waitForFunction 入口;禁止模块外直接 page.evaluate */ export class ExecutionLayer { constructor(private readonly page: Page) {} static forPage(page: Page): ExecutionLayer { return new ExecutionLayer(page); } getPage(): Page { return this.page; } async evaluateOnPage(script: string, arg?: unknown): Promise { if (arg === undefined) { return this.page.evaluate(script) as Promise; } return this.page.evaluate(script, arg) as Promise; } async evaluateOnLocator( locator: Locator, script: string, arg?: unknown, ): Promise { if (arg === undefined) { return locator.evaluate(script) as Promise; } return locator.evaluate(script, arg) as Promise; } async waitForBrowserFunction( script: string, arg: unknown, timeoutMs: number, ): Promise { await this.page.waitForFunction(script, arg, { timeout: timeoutMs }); } }