import { BrowserContext as PlaywrightBrowserContext, Page, ElementHandle } from "playwright"; import { Browser } from "./browser"; import { DOMElementNode, SelectorMap } from "../dom/views"; import { BrowserState, TabInfo } from "./views"; /** * DOM树元素 */ export interface DOMTreeElement { index: number; xpath: string; text: string; tag: string; attributes: Record; isClickable: boolean; isInput: boolean; children: DOMTreeElement[]; getAllTextTillNextClickableElement(maxDepth?: number): string; } /** * 浏览器上下文会话 */ export interface BrowserSession { context: PlaywrightBrowserContext; currentPage: Page; cachedState: BrowserState; } export type BrowserContextWindowSize = { width: number; height: number; }; /** * 浏览器上下文配置 */ export declare class BrowserContextConfig { cookiesFile?: string; minimumWaitPageLoadTime: number; waitForNetworkIdlePageLoadTime: number; maximumWaitPageLoadTime: number; waitBetweenActions: number; disableSecurity: boolean; browserWindowSize: BrowserContextWindowSize; noViewport?: boolean; saveRecordingPath?: string; saveDownloadsPath?: string; tracePath?: string; locale?: string; userAgent: string; highlightElements: boolean; viewportExpansion: number; allowedDomains?: string[]; includeDynamicAttributes: boolean; _forceKeepContextAlive: boolean; constructor(config?: Partial); } /** * 浏览器上下文类 * 负责管理浏览器会话和页面操作 */ export declare class BrowserContext { private browser; private contextId; private context; private session?; private _domProcessor; readonly config: BrowserContextConfig; currentState?: BrowserState; /** * 创建浏览器上下文 * @param browser 浏览器实例 * @param config 上下文配置 */ constructor(browser: Browser, config?: BrowserContextConfig); close(): Promise; private initializeSession; private _addNewPageListener; getSession(): Promise; getCurrentPage(): Promise; private _createContext; private _waitForStableNetwork; private _waitForPageAndFramesLoad; private _isUrlAllowed; private _checkAndHandleNavigation; navigateTo(url: string): Promise; refreshPage(): Promise; goBack(): Promise; goForward(): Promise; closeCurrentTab(): Promise; getPageHtml(): Promise; executeJavascript(script: string): Promise; /** * 获取当前浏览器状态 */ getState(): Promise; private _updateState; /** * 获取页面截图 */ takeScreenshot(full_page?: boolean): Promise; /** * 移除页面上的高亮显示 */ removeHighlights(): Promise; static _convertSimpleXpathToCssSelector(xpath: string): string; /** * 为元素生成增强的CSS选择器 * @param element DOM元素节点 * @param includeDynamicAttributes 是否包含动态属性 */ static _enhancedCssSelectorForElement(element: DOMElementNode, includeDynamicAttributes?: boolean): string; getLocateElement(element: DOMElementNode): Promise; _inputTextElementNode(elementNode: DOMElementNode, text: string): Promise; _clickElementNode(elementNode: DOMElementNode): Promise; getTabsInfo(): Promise; switchToTab(pageId: number): Promise; createNewTab(url?: string): Promise; getSelectorMap(): Promise; getElementByIndex(index: number): Promise; getDomElementByIndex(index: number): Promise; saveCookies(): Promise; isFileUploader(elementNode: DOMElementNode, maxDepth?: number, currentDepth?: number): Promise; private getScrollInfo; resetContext(): Promise; private _getInitialState; private _getUniqueFilename; }