@donggui/web 1.5.5-donggui.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -0
- package/bin/midscene-playground +3 -0
- package/bin/midscene-web +2 -0
- package/dist/es/bin.mjs +23 -0
- package/dist/es/bin.mjs.map +1 -0
- package/dist/es/bridge-mode/agent-cli-side.mjs +137 -0
- package/dist/es/bridge-mode/agent-cli-side.mjs.map +1 -0
- package/dist/es/bridge-mode/browser.mjs +2 -0
- package/dist/es/bridge-mode/common.mjs +43 -0
- package/dist/es/bridge-mode/common.mjs.map +1 -0
- package/dist/es/bridge-mode/index.mjs +4 -0
- package/dist/es/bridge-mode/io-client.mjs +101 -0
- package/dist/es/bridge-mode/io-client.mjs.map +1 -0
- package/dist/es/bridge-mode/io-server.mjs +210 -0
- package/dist/es/bridge-mode/io-server.mjs.map +1 -0
- package/dist/es/bridge-mode/page-browser-side.mjs +118 -0
- package/dist/es/bridge-mode/page-browser-side.mjs.map +1 -0
- package/dist/es/chrome-extension/agent.mjs +9 -0
- package/dist/es/chrome-extension/agent.mjs.map +1 -0
- package/dist/es/chrome-extension/cdpInput.mjs +174 -0
- package/dist/es/chrome-extension/cdpInput.mjs.LICENSE.txt +5 -0
- package/dist/es/chrome-extension/cdpInput.mjs.map +1 -0
- package/dist/es/chrome-extension/dynamic-scripts.mjs +38 -0
- package/dist/es/chrome-extension/dynamic-scripts.mjs.map +1 -0
- package/dist/es/chrome-extension/index.mjs +5 -0
- package/dist/es/chrome-extension/page.mjs +651 -0
- package/dist/es/chrome-extension/page.mjs.map +1 -0
- package/dist/es/cli.mjs +16 -0
- package/dist/es/cli.mjs.map +1 -0
- package/dist/es/common/cache-helper.mjs +28 -0
- package/dist/es/common/cache-helper.mjs.map +1 -0
- package/dist/es/index.mjs +6 -0
- package/dist/es/mcp-server.mjs +35 -0
- package/dist/es/mcp-server.mjs.map +1 -0
- package/dist/es/mcp-tools-puppeteer.mjs +215 -0
- package/dist/es/mcp-tools-puppeteer.mjs.map +1 -0
- package/dist/es/mcp-tools.mjs +78 -0
- package/dist/es/mcp-tools.mjs.map +1 -0
- package/dist/es/playwright/ai-fixture.mjs +367 -0
- package/dist/es/playwright/ai-fixture.mjs.map +1 -0
- package/dist/es/playwright/index.mjs +40 -0
- package/dist/es/playwright/index.mjs.map +1 -0
- package/dist/es/playwright/page.mjs +44 -0
- package/dist/es/playwright/page.mjs.map +1 -0
- package/dist/es/playwright/reporter/index.mjs +216 -0
- package/dist/es/playwright/reporter/index.mjs.map +1 -0
- package/dist/es/puppeteer/agent-launcher.mjs +185 -0
- package/dist/es/puppeteer/agent-launcher.mjs.map +1 -0
- package/dist/es/puppeteer/base-page.mjs +564 -0
- package/dist/es/puppeteer/base-page.mjs.map +1 -0
- package/dist/es/puppeteer/index.mjs +34 -0
- package/dist/es/puppeteer/index.mjs.map +1 -0
- package/dist/es/puppeteer/page.mjs +9 -0
- package/dist/es/puppeteer/page.mjs.map +1 -0
- package/dist/es/static/index.mjs +3 -0
- package/dist/es/static/static-agent.mjs +12 -0
- package/dist/es/static/static-agent.mjs.map +1 -0
- package/dist/es/static/static-page.mjs +122 -0
- package/dist/es/static/static-page.mjs.map +1 -0
- package/dist/es/utils.mjs +8 -0
- package/dist/es/utils.mjs.map +1 -0
- package/dist/es/web-element.mjs +59 -0
- package/dist/es/web-element.mjs.map +1 -0
- package/dist/es/web-page.mjs +260 -0
- package/dist/es/web-page.mjs.map +1 -0
- package/dist/lib/bin.js +29 -0
- package/dist/lib/bin.js.map +1 -0
- package/dist/lib/bridge-mode/agent-cli-side.js +174 -0
- package/dist/lib/bridge-mode/agent-cli-side.js.map +1 -0
- package/dist/lib/bridge-mode/browser.js +38 -0
- package/dist/lib/bridge-mode/browser.js.map +1 -0
- package/dist/lib/bridge-mode/common.js +107 -0
- package/dist/lib/bridge-mode/common.js.map +1 -0
- package/dist/lib/bridge-mode/index.js +46 -0
- package/dist/lib/bridge-mode/index.js.map +1 -0
- package/dist/lib/bridge-mode/io-client.js +135 -0
- package/dist/lib/bridge-mode/io-client.js.map +1 -0
- package/dist/lib/bridge-mode/io-server.js +247 -0
- package/dist/lib/bridge-mode/io-server.js.map +1 -0
- package/dist/lib/bridge-mode/page-browser-side.js +162 -0
- package/dist/lib/bridge-mode/page-browser-side.js.map +1 -0
- package/dist/lib/chrome-extension/agent.js +43 -0
- package/dist/lib/chrome-extension/agent.js.map +1 -0
- package/dist/lib/chrome-extension/cdpInput.js +208 -0
- package/dist/lib/chrome-extension/cdpInput.js.LICENSE.txt +5 -0
- package/dist/lib/chrome-extension/cdpInput.js.map +1 -0
- package/dist/lib/chrome-extension/dynamic-scripts.js +88 -0
- package/dist/lib/chrome-extension/dynamic-scripts.js.map +1 -0
- package/dist/lib/chrome-extension/index.js +60 -0
- package/dist/lib/chrome-extension/index.js.map +1 -0
- package/dist/lib/chrome-extension/page.js +685 -0
- package/dist/lib/chrome-extension/page.js.map +1 -0
- package/dist/lib/cli.js +22 -0
- package/dist/lib/cli.js.map +1 -0
- package/dist/lib/common/cache-helper.js +68 -0
- package/dist/lib/common/cache-helper.js.map +1 -0
- package/dist/lib/index.js +60 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/mcp-server.js +75 -0
- package/dist/lib/mcp-server.js.map +1 -0
- package/dist/lib/mcp-tools-puppeteer.js +259 -0
- package/dist/lib/mcp-tools-puppeteer.js.map +1 -0
- package/dist/lib/mcp-tools.js +112 -0
- package/dist/lib/mcp-tools.js.map +1 -0
- package/dist/lib/playwright/ai-fixture.js +404 -0
- package/dist/lib/playwright/ai-fixture.js.map +1 -0
- package/dist/lib/playwright/index.js +93 -0
- package/dist/lib/playwright/index.js.map +1 -0
- package/dist/lib/playwright/page.js +78 -0
- package/dist/lib/playwright/page.js.map +1 -0
- package/dist/lib/playwright/reporter/index.js +250 -0
- package/dist/lib/playwright/reporter/index.js.map +1 -0
- package/dist/lib/puppeteer/agent-launcher.js +253 -0
- package/dist/lib/puppeteer/agent-launcher.js.map +1 -0
- package/dist/lib/puppeteer/base-page.js +607 -0
- package/dist/lib/puppeteer/base-page.js.map +1 -0
- package/dist/lib/puppeteer/index.js +84 -0
- package/dist/lib/puppeteer/index.js.map +1 -0
- package/dist/lib/puppeteer/page.js +43 -0
- package/dist/lib/puppeteer/page.js.map +1 -0
- package/dist/lib/static/index.js +52 -0
- package/dist/lib/static/index.js.map +1 -0
- package/dist/lib/static/static-agent.js +46 -0
- package/dist/lib/static/static-agent.js.map +1 -0
- package/dist/lib/static/static-page.js +156 -0
- package/dist/lib/static/static-page.js.map +1 -0
- package/dist/lib/utils.js +40 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/lib/web-element.js +96 -0
- package/dist/lib/web-element.js.map +1 -0
- package/dist/lib/web-page.js +310 -0
- package/dist/lib/web-page.js.map +1 -0
- package/dist/types/bin.d.ts +1 -0
- package/dist/types/bridge-mode/agent-cli-side.d.ts +49 -0
- package/dist/types/bridge-mode/browser.d.ts +2 -0
- package/dist/types/bridge-mode/common.d.ts +74 -0
- package/dist/types/bridge-mode/index.d.ts +4 -0
- package/dist/types/bridge-mode/io-client.d.ts +10 -0
- package/dist/types/bridge-mode/io-server.d.ts +27 -0
- package/dist/types/bridge-mode/page-browser-side.d.ts +21 -0
- package/dist/types/chrome-extension/agent.d.ts +5 -0
- package/dist/types/chrome-extension/cdpInput.d.ts +52 -0
- package/dist/types/chrome-extension/dynamic-scripts.d.ts +3 -0
- package/dist/types/chrome-extension/index.d.ts +5 -0
- package/dist/types/chrome-extension/page.d.ts +110 -0
- package/dist/types/cli.d.ts +1 -0
- package/dist/types/common/cache-helper.d.ts +20 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/mcp-server.d.ts +26 -0
- package/dist/types/mcp-tools-puppeteer.d.ts +13 -0
- package/dist/types/mcp-tools.d.ts +12 -0
- package/dist/types/playwright/ai-fixture.d.ts +131 -0
- package/dist/types/playwright/index.d.ts +13 -0
- package/dist/types/playwright/page.d.ts +11 -0
- package/dist/types/playwright/reporter/index.d.ts +42 -0
- package/dist/types/puppeteer/agent-launcher.d.ts +61 -0
- package/dist/types/puppeteer/base-page.d.ts +106 -0
- package/dist/types/puppeteer/index.d.ts +10 -0
- package/dist/types/puppeteer/page.d.ts +6 -0
- package/dist/types/static/index.d.ts +2 -0
- package/dist/types/static/static-agent.d.ts +5 -0
- package/dist/types/static/static-page.d.ts +42 -0
- package/dist/types/utils.d.ts +6 -0
- package/dist/types/web-element.d.ts +48 -0
- package/dist/types/web-page.d.ts +62 -0
- package/package.json +166 -0
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import type { WebPageAgentOpt } from '../web-element';
|
|
2
|
+
import type { DeviceAction, ElementCacheFeature, ElementTreeNode, Point, Rect, Size } from '@midscene/core';
|
|
3
|
+
import type { AbstractInterface } from '@midscene/core/device';
|
|
4
|
+
import type { ElementInfo } from '@midscene/shared/extractor';
|
|
5
|
+
import { type DebugFunction } from '@midscene/shared/logger';
|
|
6
|
+
import type { Page as PlaywrightPage } from 'playwright';
|
|
7
|
+
import type { Page as PuppeteerPage } from 'puppeteer';
|
|
8
|
+
import { type CacheFeatureOptions } from '../common/cache-helper';
|
|
9
|
+
import { type KeyInput, type MouseButton } from '../web-page';
|
|
10
|
+
export declare const debugPage: DebugFunction;
|
|
11
|
+
export declare class Page<AgentType extends 'puppeteer' | 'playwright', InterfaceType extends PuppeteerPage | PlaywrightPage> implements AbstractInterface {
|
|
12
|
+
underlyingPage: InterfaceType;
|
|
13
|
+
protected waitForNavigationTimeout: number;
|
|
14
|
+
protected waitForNetworkIdleTimeout: number;
|
|
15
|
+
private viewportSize?;
|
|
16
|
+
private onBeforeInvokeAction?;
|
|
17
|
+
private onAfterInvokeAction?;
|
|
18
|
+
private customActions?;
|
|
19
|
+
private enableTouchEventsInActionSpace;
|
|
20
|
+
private puppeteerFileChooserSession?;
|
|
21
|
+
private puppeteerFileChooserHandler?;
|
|
22
|
+
interfaceType: AgentType;
|
|
23
|
+
actionSpace(): DeviceAction[];
|
|
24
|
+
private evaluate;
|
|
25
|
+
constructor(underlyingPage: InterfaceType, interfaceType: AgentType, opts?: WebPageAgentOpt);
|
|
26
|
+
evaluateJavaScript<T = any>(script: string): Promise<T>;
|
|
27
|
+
waitForNavigation(moment: 'screenshot' | 'getElementsInfo' | 'getElementsNodeTree' | 'afterInvokeAction', actionName?: string): Promise<void>;
|
|
28
|
+
waitForNetworkIdle(moment: 'afterInvokeAction', actionName?: string): Promise<void>;
|
|
29
|
+
getElementsInfo(): Promise<ElementInfo[]>;
|
|
30
|
+
private getXpathsByPoint;
|
|
31
|
+
private getElementInfoByXpath;
|
|
32
|
+
cacheFeatureForPoint(center: [number, number], options?: CacheFeatureOptions): Promise<ElementCacheFeature>;
|
|
33
|
+
rectMatchesCacheFeature(feature: ElementCacheFeature): Promise<Rect>;
|
|
34
|
+
getElementsNodeTree(): Promise<ElementTreeNode<ElementInfo>>;
|
|
35
|
+
size(): Promise<Size>;
|
|
36
|
+
screenshotBase64(): Promise<string>;
|
|
37
|
+
url(): Promise<string>;
|
|
38
|
+
describe(): string;
|
|
39
|
+
get mouse(): {
|
|
40
|
+
click: (x: number, y: number, options?: {
|
|
41
|
+
button?: MouseButton;
|
|
42
|
+
count?: number;
|
|
43
|
+
}) => Promise<void>;
|
|
44
|
+
wheel: (deltaX: number, deltaY: number) => Promise<void>;
|
|
45
|
+
move: (x: number, y: number) => Promise<void>;
|
|
46
|
+
drag: (from: {
|
|
47
|
+
x: number;
|
|
48
|
+
y: number;
|
|
49
|
+
}, to: {
|
|
50
|
+
x: number;
|
|
51
|
+
y: number;
|
|
52
|
+
}) => Promise<void>;
|
|
53
|
+
};
|
|
54
|
+
get keyboard(): {
|
|
55
|
+
type: (text: string) => Promise<void>;
|
|
56
|
+
press: (action: {
|
|
57
|
+
key: KeyInput;
|
|
58
|
+
command?: string;
|
|
59
|
+
} | {
|
|
60
|
+
key: KeyInput;
|
|
61
|
+
command?: string;
|
|
62
|
+
}[]) => Promise<void>;
|
|
63
|
+
down: (key: KeyInput) => Promise<void>;
|
|
64
|
+
up: (key: KeyInput) => Promise<void>;
|
|
65
|
+
};
|
|
66
|
+
clearInput(element?: ElementInfo): Promise<void>;
|
|
67
|
+
private everMoved;
|
|
68
|
+
private moveToPointBeforeScroll;
|
|
69
|
+
scrollUntilTop(startingPoint?: Point): Promise<void>;
|
|
70
|
+
scrollUntilBottom(startingPoint?: Point): Promise<void>;
|
|
71
|
+
scrollUntilLeft(startingPoint?: Point): Promise<void>;
|
|
72
|
+
scrollUntilRight(startingPoint?: Point): Promise<void>;
|
|
73
|
+
scrollUp(distance?: number, startingPoint?: Point): Promise<void>;
|
|
74
|
+
scrollDown(distance?: number, startingPoint?: Point): Promise<void>;
|
|
75
|
+
scrollLeft(distance?: number, startingPoint?: Point): Promise<void>;
|
|
76
|
+
scrollRight(distance?: number, startingPoint?: Point): Promise<void>;
|
|
77
|
+
navigate(url: string): Promise<void>;
|
|
78
|
+
reload(): Promise<void>;
|
|
79
|
+
goBack(): Promise<void>;
|
|
80
|
+
beforeInvokeAction(name: string, param: any): Promise<void>;
|
|
81
|
+
afterInvokeAction(name: string, param: any): Promise<void>;
|
|
82
|
+
destroy(): Promise<void>;
|
|
83
|
+
swipe(from: {
|
|
84
|
+
x: number;
|
|
85
|
+
y: number;
|
|
86
|
+
}, to: {
|
|
87
|
+
x: number;
|
|
88
|
+
y: number;
|
|
89
|
+
}, duration?: number): Promise<void>;
|
|
90
|
+
longPress(x: number, y: number, duration?: number): Promise<void>;
|
|
91
|
+
private ensurePuppeteerFileChooserSession;
|
|
92
|
+
registerFileChooserListener(handler: (chooser: import('@midscene/core/device').FileChooserHandler) => Promise<void>): Promise<{
|
|
93
|
+
dispose: () => void;
|
|
94
|
+
getError: () => Error | undefined;
|
|
95
|
+
}>;
|
|
96
|
+
}
|
|
97
|
+
export declare function forceClosePopup(page: PuppeteerPage | PlaywrightPage, debugProfile: DebugFunction): void;
|
|
98
|
+
/**
|
|
99
|
+
* Force Chrome to render select elements using base-select appearance instead of OS-native rendering.
|
|
100
|
+
* This makes select elements visible in screenshots captured by Playwright/Puppeteer.
|
|
101
|
+
*
|
|
102
|
+
* Reference: https://developer.chrome.com/blog/a-customizable-select
|
|
103
|
+
*
|
|
104
|
+
* Adds a style tag with CSS rules to make all select elements use base-select appearance.
|
|
105
|
+
*/
|
|
106
|
+
export declare function forceChromeSelectRendering(page: PuppeteerPage | PlaywrightPage): void;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { WebPageAgentOpt } from '../web-element';
|
|
2
|
+
import { Agent as PageAgent } from '@midscene/core/agent';
|
|
3
|
+
import type { Page as PuppeteerPage } from 'puppeteer';
|
|
4
|
+
import { PuppeteerWebPage } from './page';
|
|
5
|
+
export { PuppeteerWebPage } from './page';
|
|
6
|
+
export type { WebPageAgentOpt } from '../web-element';
|
|
7
|
+
export declare class PuppeteerAgent extends PageAgent<PuppeteerWebPage> {
|
|
8
|
+
constructor(page: PuppeteerPage, opts?: WebPageAgentOpt);
|
|
9
|
+
}
|
|
10
|
+
export { overrideAIConfig } from '@midscene/shared/env';
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { WebPageOpt } from '../web-element';
|
|
2
|
+
import type { Page as PuppeteerPageType } from 'puppeteer';
|
|
3
|
+
import { Page as BasePage } from './base-page';
|
|
4
|
+
export declare class PuppeteerWebPage extends BasePage<'puppeteer', PuppeteerPageType> {
|
|
5
|
+
constructor(page: PuppeteerPageType, opts?: WebPageOpt);
|
|
6
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { DeviceAction, Point, UIContext } from '@midscene/core';
|
|
2
|
+
import type { AbstractInterface } from '@midscene/core/device';
|
|
3
|
+
type StaticPageUIContext = Omit<UIContext, 'deprecatedDpr'>;
|
|
4
|
+
export default class StaticPage implements AbstractInterface {
|
|
5
|
+
interfaceType: string;
|
|
6
|
+
private uiContext;
|
|
7
|
+
constructor(uiContext: StaticPageUIContext);
|
|
8
|
+
actionSpace(): DeviceAction[];
|
|
9
|
+
evaluateJavaScript<T = unknown>(script: string): Promise<T>;
|
|
10
|
+
getElementsInfo(): Promise<never>;
|
|
11
|
+
getElementsNodeTree(): Promise<never>;
|
|
12
|
+
getXpathsByPoint(point: Point): Promise<never>;
|
|
13
|
+
getElementInfoByXpath(xpath: string): Promise<never>;
|
|
14
|
+
size(): Promise<{
|
|
15
|
+
width: number;
|
|
16
|
+
height: number;
|
|
17
|
+
}>;
|
|
18
|
+
screenshotBase64(): Promise<string>;
|
|
19
|
+
url(): Promise<string>;
|
|
20
|
+
scrollUntilTop(startingPoint?: Point): Promise<never>;
|
|
21
|
+
scrollUntilBottom(startingPoint?: Point): Promise<never>;
|
|
22
|
+
scrollUntilLeft(startingPoint?: Point): Promise<never>;
|
|
23
|
+
scrollUntilRight(startingPoint?: Point): Promise<never>;
|
|
24
|
+
scrollUp(distance?: number, startingPoint?: Point): Promise<never>;
|
|
25
|
+
scrollDown(distance?: number, startingPoint?: Point): Promise<never>;
|
|
26
|
+
scrollLeft(distance?: number, startingPoint?: Point): Promise<never>;
|
|
27
|
+
scrollRight(distance?: number, startingPoint?: Point): Promise<never>;
|
|
28
|
+
clearInput(): Promise<never>;
|
|
29
|
+
mouse: {
|
|
30
|
+
click: () => never;
|
|
31
|
+
wheel: () => never;
|
|
32
|
+
move: () => never;
|
|
33
|
+
drag: () => never;
|
|
34
|
+
};
|
|
35
|
+
keyboard: {
|
|
36
|
+
type: () => never;
|
|
37
|
+
press: () => never;
|
|
38
|
+
};
|
|
39
|
+
destroy(): Promise<void>;
|
|
40
|
+
updateContext(newContext: StaticPageUIContext): void;
|
|
41
|
+
}
|
|
42
|
+
export {};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { AgentOpt, DeviceAction, Rect, WebElementInfo } from '@midscene/core';
|
|
2
|
+
import type { NodeType } from '@midscene/shared/constants';
|
|
3
|
+
export type { WebElementInfo };
|
|
4
|
+
export type WebPageAgentOpt = AgentOpt & WebPageOpt;
|
|
5
|
+
export type WebPageOpt = {
|
|
6
|
+
waitForNavigationTimeout?: number;
|
|
7
|
+
waitForNetworkIdleTimeout?: number;
|
|
8
|
+
forceSameTabNavigation?: boolean;
|
|
9
|
+
enableTouchEventsInActionSpace?: boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Force Chrome to render select elements using base-select appearance instead of OS-native rendering.
|
|
12
|
+
* This makes select elements visible in screenshots captured by Playwright/Puppeteer.
|
|
13
|
+
*
|
|
14
|
+
* Reference: https://developer.chrome.com/blog/a-customizable-select
|
|
15
|
+
*
|
|
16
|
+
* When enabled, adds a style tag with `select { appearance: base-select !important; }` to the page.
|
|
17
|
+
*/
|
|
18
|
+
forceChromeSelectRendering?: boolean;
|
|
19
|
+
beforeInvokeAction?: () => Promise<void>;
|
|
20
|
+
afterInvokeAction?: () => Promise<void>;
|
|
21
|
+
customActions?: DeviceAction<any>[];
|
|
22
|
+
};
|
|
23
|
+
export declare class WebElementInfoImpl implements WebElementInfo {
|
|
24
|
+
content: string;
|
|
25
|
+
rect: Rect;
|
|
26
|
+
center: [number, number];
|
|
27
|
+
id: string;
|
|
28
|
+
indexId: number;
|
|
29
|
+
attributes: {
|
|
30
|
+
nodeType: NodeType;
|
|
31
|
+
[key: string]: string;
|
|
32
|
+
};
|
|
33
|
+
xpaths?: string[];
|
|
34
|
+
isVisible: boolean;
|
|
35
|
+
constructor({ content, rect, id, attributes, indexId, xpaths, isVisible, }: {
|
|
36
|
+
content: string;
|
|
37
|
+
rect: Rect;
|
|
38
|
+
id: string;
|
|
39
|
+
attributes: {
|
|
40
|
+
nodeType: NodeType;
|
|
41
|
+
[key: string]: string;
|
|
42
|
+
};
|
|
43
|
+
indexId: number;
|
|
44
|
+
xpaths?: string[];
|
|
45
|
+
isVisible: boolean;
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
export declare const limitOpenNewTabScript = "\nif (!window.__MIDSCENE_NEW_TAB_INTERCEPTOR_INITIALIZED__) {\n window.__MIDSCENE_NEW_TAB_INTERCEPTOR_INITIALIZED__ = true;\n\n // Intercept the window.open method (only once)\n window.open = function(url) {\n console.log('Blocked window.open:', url);\n window.location.href = url;\n return null;\n };\n\n // Block all a tag clicks with target=\"_blank\" (only once)\n document.addEventListener('click', function(e) {\n const target = e.target.closest('a');\n if (target && target.target === '_blank') {\n e.preventDefault();\n console.log('Blocked new tab:', target.href);\n window.location.href = target.href;\n target.removeAttribute('target');\n }\n }, true);\n}\n";
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { Point } from '@midscene/core';
|
|
2
|
+
import { AbstractInterface, type DeviceAction } from '@midscene/core/device';
|
|
3
|
+
import type { ElementInfo } from '@midscene/shared/extractor';
|
|
4
|
+
export declare function getKeyCommands(value: string | string[]): Array<{
|
|
5
|
+
key: string;
|
|
6
|
+
command?: string;
|
|
7
|
+
}>;
|
|
8
|
+
export declare type KeyInput = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | 'Power' | 'Eject' | 'Abort' | 'Help' | 'Backspace' | 'Tab' | 'Numpad5' | 'NumpadEnter' | 'Enter' | '\r' | '\n' | 'ShiftLeft' | 'ShiftRight' | 'ControlLeft' | 'ControlRight' | 'AltLeft' | 'AltRight' | 'Pause' | 'CapsLock' | 'Escape' | 'Convert' | 'NonConvert' | 'Space' | 'Numpad9' | 'PageUp' | 'Numpad3' | 'PageDown' | 'End' | 'Numpad1' | 'Home' | 'Numpad7' | 'ArrowLeft' | 'Numpad4' | 'Numpad8' | 'ArrowUp' | 'ArrowRight' | 'Numpad6' | 'Numpad2' | 'ArrowDown' | 'Select' | 'Open' | 'PrintScreen' | 'Insert' | 'Numpad0' | 'Delete' | 'NumpadDecimal' | 'Digit0' | 'Digit1' | 'Digit2' | 'Digit3' | 'Digit4' | 'Digit5' | 'Digit6' | 'Digit7' | 'Digit8' | 'Digit9' | 'KeyA' | 'KeyB' | 'KeyC' | 'KeyD' | 'KeyE' | 'KeyF' | 'KeyG' | 'KeyH' | 'KeyI' | 'KeyJ' | 'KeyK' | 'KeyL' | 'KeyM' | 'KeyN' | 'KeyO' | 'KeyP' | 'KeyQ' | 'KeyR' | 'KeyS' | 'KeyT' | 'KeyU' | 'KeyV' | 'KeyW' | 'KeyX' | 'KeyY' | 'KeyZ' | 'MetaLeft' | 'MetaRight' | 'ContextMenu' | 'NumpadMultiply' | 'NumpadAdd' | 'NumpadSubtract' | 'NumpadDivide' | 'F1' | 'F2' | 'F3' | 'F4' | 'F5' | 'F6' | 'F7' | 'F8' | 'F9' | 'F10' | 'F11' | 'F12' | 'F13' | 'F14' | 'F15' | 'F16' | 'F17' | 'F18' | 'F19' | 'F20' | 'F21' | 'F22' | 'F23' | 'F24' | 'NumLock' | 'ScrollLock' | 'AudioVolumeMute' | 'AudioVolumeDown' | 'AudioVolumeUp' | 'MediaTrackNext' | 'MediaTrackPrevious' | 'MediaStop' | 'MediaPlayPause' | 'Semicolon' | 'Equal' | 'NumpadEqual' | 'Comma' | 'Minus' | 'Period' | 'Slash' | 'Backquote' | 'BracketLeft' | 'Backslash' | 'BracketRight' | 'Quote' | 'AltGraph' | 'Props' | 'Cancel' | 'Clear' | 'Shift' | 'Control' | 'Alt' | 'Accept' | 'ModeChange' | ' ' | 'Print' | 'Execute' | '\u0000' | 'a' | 'b' | 'c' | 'd' | 'e' | 'f' | 'g' | 'h' | 'i' | 'j' | 'k' | 'l' | 'm' | 'n' | 'o' | 'p' | 'q' | 'r' | 's' | 't' | 'u' | 'v' | 'w' | 'x' | 'y' | 'z' | 'Meta' | '*' | '+' | '-' | '/' | ';' | '=' | ',' | '.' | '`' | '[' | '\\' | ']' | "'" | 'Attn' | 'CrSel' | 'ExSel' | 'EraseEof' | 'Play' | 'ZoomOut' | ')' | '!' | '@' | '#' | '$' | '%' | '^' | '&' | '(' | 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | 'H' | 'I' | 'J' | 'K' | 'L' | 'M' | 'N' | 'O' | 'P' | 'Q' | 'R' | 'S' | 'T' | 'U' | 'V' | 'W' | 'X' | 'Y' | 'Z' | ':' | '<' | '_' | '>' | '?' | '~' | '{' | '|' | '}' | '"' | 'SoftLeft' | 'SoftRight' | 'Camera' | 'Call' | 'EndCall' | 'VolumeDown' | 'VolumeUp';
|
|
9
|
+
export type MouseButton = 'left' | 'right' | 'middle';
|
|
10
|
+
export interface MouseAction {
|
|
11
|
+
click: (x: number, y: number, options: {
|
|
12
|
+
button: MouseButton;
|
|
13
|
+
count?: number;
|
|
14
|
+
}) => Promise<void>;
|
|
15
|
+
wheel: (deltaX: number, deltaY: number) => Promise<void>;
|
|
16
|
+
move: (x: number, y: number) => Promise<void>;
|
|
17
|
+
drag: (from: {
|
|
18
|
+
x: number;
|
|
19
|
+
y: number;
|
|
20
|
+
}, to: {
|
|
21
|
+
x: number;
|
|
22
|
+
y: number;
|
|
23
|
+
}) => Promise<void>;
|
|
24
|
+
}
|
|
25
|
+
export interface KeyboardAction {
|
|
26
|
+
type: (text: string) => Promise<void>;
|
|
27
|
+
press: (action: {
|
|
28
|
+
key: KeyInput;
|
|
29
|
+
command?: string;
|
|
30
|
+
} | {
|
|
31
|
+
key: KeyInput;
|
|
32
|
+
command?: string;
|
|
33
|
+
}[]) => Promise<void>;
|
|
34
|
+
}
|
|
35
|
+
export interface ChromePageDestroyOptions {
|
|
36
|
+
closeTab?: boolean;
|
|
37
|
+
}
|
|
38
|
+
export declare abstract class AbstractWebPage extends AbstractInterface {
|
|
39
|
+
navigate?(url: string): Promise<void>;
|
|
40
|
+
reload?(): Promise<void>;
|
|
41
|
+
goBack?(): Promise<void>;
|
|
42
|
+
get mouse(): MouseAction;
|
|
43
|
+
get keyboard(): KeyboardAction;
|
|
44
|
+
clearInput(element?: ElementInfo): Promise<void>;
|
|
45
|
+
abstract scrollUntilTop(startingPoint?: Point): Promise<void>;
|
|
46
|
+
abstract scrollUntilBottom(startingPoint?: Point): Promise<void>;
|
|
47
|
+
abstract scrollUntilLeft(startingPoint?: Point): Promise<void>;
|
|
48
|
+
abstract scrollUntilRight(startingPoint?: Point): Promise<void>;
|
|
49
|
+
abstract scrollUp(distance?: number, startingPoint?: Point): Promise<void>;
|
|
50
|
+
abstract scrollDown(distance?: number, startingPoint?: Point): Promise<void>;
|
|
51
|
+
abstract scrollLeft(distance?: number, startingPoint?: Point): Promise<void>;
|
|
52
|
+
abstract scrollRight(distance?: number, startingPoint?: Point): Promise<void>;
|
|
53
|
+
abstract longPress(x: number, y: number, duration?: number): Promise<void>;
|
|
54
|
+
abstract swipe(from: {
|
|
55
|
+
x: number;
|
|
56
|
+
y: number;
|
|
57
|
+
}, to: {
|
|
58
|
+
x: number;
|
|
59
|
+
y: number;
|
|
60
|
+
}, duration?: number): Promise<void>;
|
|
61
|
+
}
|
|
62
|
+
export declare const commonWebActionsForWebPage: <T extends AbstractWebPage>(page: T, includeTouchEvents?: boolean) => DeviceAction<any>[];
|
package/package.json
ADDED
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@donggui/web",
|
|
3
|
+
"description": "DongGUI - AI-powered browser automation SDK. Internal version based on @midscene/web with custom enhancements.",
|
|
4
|
+
"keywords": [
|
|
5
|
+
"AI UI automation",
|
|
6
|
+
"AI testing",
|
|
7
|
+
"Computer use",
|
|
8
|
+
"Browser use",
|
|
9
|
+
"Android use",
|
|
10
|
+
"DongGUI"
|
|
11
|
+
],
|
|
12
|
+
"version": "1.5.5-donggui.3",
|
|
13
|
+
"repository": {
|
|
14
|
+
"type": "git",
|
|
15
|
+
"url": "https://github.com/web-infra-dev/midscene.git"
|
|
16
|
+
},
|
|
17
|
+
"homepage": "https://midscenejs.com/",
|
|
18
|
+
"main": "./dist/lib/index.js",
|
|
19
|
+
"types": "./dist/types/index.d.ts",
|
|
20
|
+
"module": "./dist/es/index.mjs",
|
|
21
|
+
"exports": {
|
|
22
|
+
".": {
|
|
23
|
+
"types": "./dist/types/index.d.ts",
|
|
24
|
+
"require": "./dist/lib/index.js",
|
|
25
|
+
"import": "./dist/es/index.mjs"
|
|
26
|
+
},
|
|
27
|
+
"./bridge-mode": {
|
|
28
|
+
"types": "./dist/types/bridge-mode/index.d.ts",
|
|
29
|
+
"require": "./dist/lib/bridge-mode/index.js",
|
|
30
|
+
"import": "./dist/es/bridge-mode/index.mjs"
|
|
31
|
+
},
|
|
32
|
+
"./bridge-mode-browser": {
|
|
33
|
+
"types": "./dist/types/bridge-mode/browser.d.ts",
|
|
34
|
+
"require": "./dist/lib/bridge-mode/browser.js",
|
|
35
|
+
"import": "./dist/es/bridge-mode/browser.mjs"
|
|
36
|
+
},
|
|
37
|
+
"./utils": {
|
|
38
|
+
"types": "./dist/types/common/utils.d.ts",
|
|
39
|
+
"require": "./dist/lib/common/utils.js",
|
|
40
|
+
"import": "./dist/es/common/utils.mjs"
|
|
41
|
+
},
|
|
42
|
+
"./ui-utils": {
|
|
43
|
+
"types": "./dist/types/common/ui-utils.d.ts",
|
|
44
|
+
"require": "./dist/lib/common/ui-utils.js",
|
|
45
|
+
"import": "./dist/es/common/ui-utils.mjs"
|
|
46
|
+
},
|
|
47
|
+
"./puppeteer": {
|
|
48
|
+
"types": "./dist/types/puppeteer/index.d.ts",
|
|
49
|
+
"require": "./dist/lib/puppeteer/index.js",
|
|
50
|
+
"import": "./dist/es/puppeteer/index.mjs"
|
|
51
|
+
},
|
|
52
|
+
"./puppeteer-agent-launcher": {
|
|
53
|
+
"types": "./dist/types/puppeteer/agent-launcher.d.ts",
|
|
54
|
+
"require": "./dist/lib/puppeteer/agent-launcher.js",
|
|
55
|
+
"import": "./dist/es/puppeteer/agent-launcher.mjs"
|
|
56
|
+
},
|
|
57
|
+
"./playwright": {
|
|
58
|
+
"types": "./dist/types/playwright/index.d.ts",
|
|
59
|
+
"require": "./dist/lib/playwright/index.js",
|
|
60
|
+
"import": "./dist/es/playwright/index.mjs"
|
|
61
|
+
},
|
|
62
|
+
"./playwright-report": {
|
|
63
|
+
"types": "./dist/types/playwright/reporter/index.d.ts",
|
|
64
|
+
"require": "./dist/lib/playwright/reporter/index.js",
|
|
65
|
+
"import": "./dist/es/playwright/reporter/index.mjs"
|
|
66
|
+
},
|
|
67
|
+
"./playwright-reporter": {
|
|
68
|
+
"types": "./dist/types/playwright/reporter/index.d.ts",
|
|
69
|
+
"require": "./dist/lib/playwright/reporter/index.js",
|
|
70
|
+
"import": "./dist/es/playwright/reporter/index.mjs"
|
|
71
|
+
},
|
|
72
|
+
"./chrome-extension": {
|
|
73
|
+
"types": "./dist/types/chrome-extension/index.d.ts",
|
|
74
|
+
"require": "./dist/lib/chrome-extension/index.js",
|
|
75
|
+
"import": "./dist/es/chrome-extension/index.mjs"
|
|
76
|
+
},
|
|
77
|
+
"./yaml": {
|
|
78
|
+
"types": "./dist/types/yaml/index.d.ts",
|
|
79
|
+
"require": "./dist/lib/yaml/index.js",
|
|
80
|
+
"import": "./dist/es/yaml/index.mjs"
|
|
81
|
+
},
|
|
82
|
+
"./agent": {
|
|
83
|
+
"types": "./dist/types/common/agent.d.ts",
|
|
84
|
+
"require": "./dist/lib/common/agent.js",
|
|
85
|
+
"import": "./dist/es/common/agent.mjs"
|
|
86
|
+
},
|
|
87
|
+
"./static": {
|
|
88
|
+
"types": "./dist/types/static/index.d.ts",
|
|
89
|
+
"require": "./dist/lib/static/index.js",
|
|
90
|
+
"import": "./dist/es/static/index.mjs"
|
|
91
|
+
},
|
|
92
|
+
"./mcp-server": {
|
|
93
|
+
"types": "./dist/types/mcp-server.d.ts",
|
|
94
|
+
"import": "./dist/es/mcp-server.mjs",
|
|
95
|
+
"require": "./dist/lib/mcp-server.js"
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
"scripts": {
|
|
99
|
+
"dev": "npm run build:watch",
|
|
100
|
+
"dev:server": "npm run build && ./bin/midscene-playground",
|
|
101
|
+
"build": "rslib build",
|
|
102
|
+
"build:watch": "rslib build --watch --no-clean",
|
|
103
|
+
"playground": "DEBUG=midscene:* tsx demo/playground.ts",
|
|
104
|
+
"test": "vitest --run",
|
|
105
|
+
"test:u": "vitest --run -u",
|
|
106
|
+
"test:ai": "AI_TEST_TYPE=web npm run test",
|
|
107
|
+
"test:ai:cache": "MIDSCENE_CACHE=true npm run test:ai",
|
|
108
|
+
"e2e": "playwright test --config=tests/playwright.config.ts",
|
|
109
|
+
"e2e:report": "MIDSCENE_REPORT=true playwright test --config=tests/playwright.config.ts",
|
|
110
|
+
"e2e:cache": "MIDSCENE_CACHE=true playwright test --config=tests/playwright.config.ts",
|
|
111
|
+
"e2e:ui": "playwright test --config=tests/playwright.config.ts --ui",
|
|
112
|
+
"e2e:ui:cache": "MIDSCENE_CACHE=true playwright test --config=tests/playwright.config.ts --ui"
|
|
113
|
+
},
|
|
114
|
+
"bin": {
|
|
115
|
+
"midscene-web": "./bin/midscene-web"
|
|
116
|
+
},
|
|
117
|
+
"files": ["static", "dist", "iife-script", "README.md", "bin"],
|
|
118
|
+
"dependencies": {
|
|
119
|
+
"@midscene/core": "workspace:*",
|
|
120
|
+
"cors": "^2.8.5",
|
|
121
|
+
"dayjs": "^1.11.11",
|
|
122
|
+
"dotenv": "^16.4.5",
|
|
123
|
+
"http-server": "14.1.1",
|
|
124
|
+
"puppeteer-core": "24.6.0",
|
|
125
|
+
"socket.io": "^4.8.1",
|
|
126
|
+
"socket.io-client": "4.8.1"
|
|
127
|
+
},
|
|
128
|
+
"devDependencies": {
|
|
129
|
+
"@playwright/test": "^1.45.0",
|
|
130
|
+
"@rslib/core": "^0.18.3",
|
|
131
|
+
"@types/chrome": "0.0.279",
|
|
132
|
+
"@types/cors": "^2.8.17",
|
|
133
|
+
"@types/http-server": "^0.12.4",
|
|
134
|
+
"@types/js-yaml": "4.0.9",
|
|
135
|
+
"@types/node": "^18.0.0",
|
|
136
|
+
"@types/semver": "7.7.0",
|
|
137
|
+
"devtools-protocol": "0.0.1380148",
|
|
138
|
+
"js-yaml": "4.1.0",
|
|
139
|
+
"playwright": "^1.45.0",
|
|
140
|
+
"puppeteer": "24.6.0",
|
|
141
|
+
"tsx": "^4.19.2",
|
|
142
|
+
"typescript": "^5.8.3",
|
|
143
|
+
"vitest": "3.0.5"
|
|
144
|
+
},
|
|
145
|
+
"peerDependencies": {
|
|
146
|
+
"@playwright/test": "^1.45.0",
|
|
147
|
+
"playwright": "^1.45.0",
|
|
148
|
+
"puppeteer": ">=20.0.0"
|
|
149
|
+
},
|
|
150
|
+
"peerDependenciesMeta": {
|
|
151
|
+
"@playwright/test": {
|
|
152
|
+
"optional": true
|
|
153
|
+
},
|
|
154
|
+
"puppeteer": {
|
|
155
|
+
"optional": true
|
|
156
|
+
}
|
|
157
|
+
},
|
|
158
|
+
"engines": {
|
|
159
|
+
"node": ">=18.19.0"
|
|
160
|
+
},
|
|
161
|
+
"publishConfig": {
|
|
162
|
+
"access": "public",
|
|
163
|
+
"registry": "https://registry.npmjs.org"
|
|
164
|
+
},
|
|
165
|
+
"license": "MIT"
|
|
166
|
+
}
|