@midscene/web 1.13.2 → 1.13.4-beta-20260924030824.0
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/dist/es/bridge-mode/io-client.mjs +1 -1
- package/dist/es/bridge-mode/io-server.mjs +2 -2
- package/dist/es/bridge-mode/io-server.mjs.map +1 -1
- package/dist/es/bridge-mode/page-browser-side.mjs +1 -1
- package/dist/es/bridge-mode/page-browser-side.mjs.map +1 -1
- package/dist/es/cli.mjs +1 -1
- package/dist/es/common/browser-agent.mjs +90 -0
- package/dist/es/common/browser-agent.mjs.map +1 -1
- package/dist/es/common/browser-page-actions.mjs +89 -0
- package/dist/es/common/browser-page-actions.mjs.map +1 -0
- package/dist/es/playwright/browser-agent.mjs +8 -1
- package/dist/es/playwright/browser-agent.mjs.map +1 -1
- package/dist/es/puppeteer/browser-agent.mjs +9 -3
- package/dist/es/puppeteer/browser-agent.mjs.map +1 -1
- package/dist/es/puppeteer/browser-page-manager.mjs +2 -0
- package/dist/es/puppeteer/browser-page-manager.mjs.map +1 -1
- package/dist/es/puppeteer/scoped-browser-agent.mjs +1 -28
- package/dist/es/puppeteer/scoped-browser-agent.mjs.map +1 -1
- package/dist/lib/bridge-mode/io-client.js +1 -1
- package/dist/lib/bridge-mode/io-server.js +2 -2
- package/dist/lib/bridge-mode/io-server.js.map +1 -1
- package/dist/lib/bridge-mode/page-browser-side.js +1 -1
- package/dist/lib/bridge-mode/page-browser-side.js.map +1 -1
- package/dist/lib/cli.js +1 -1
- package/dist/lib/common/browser-agent.js +90 -0
- package/dist/lib/common/browser-agent.js.map +1 -1
- package/dist/lib/common/browser-page-actions.js +126 -0
- package/dist/lib/common/browser-page-actions.js.map +1 -0
- package/dist/lib/playwright/browser-agent.js +8 -1
- package/dist/lib/playwright/browser-agent.js.map +1 -1
- package/dist/lib/puppeteer/browser-agent.js +9 -3
- package/dist/lib/puppeteer/browser-agent.js.map +1 -1
- package/dist/lib/puppeteer/browser-page-manager.js +2 -0
- package/dist/lib/puppeteer/browser-page-manager.js.map +1 -1
- package/dist/lib/puppeteer/scoped-browser-agent.js +1 -28
- package/dist/lib/puppeteer/scoped-browser-agent.js.map +1 -1
- package/dist/types/common/browser-agent.d.ts +19 -0
- package/dist/types/common/browser-agent.d.ts.map +1 -1
- package/dist/types/common/browser-page-actions.d.ts +7 -0
- package/dist/types/common/browser-page-actions.d.ts.map +1 -0
- package/dist/types/playwright/browser-agent.d.ts.map +1 -1
- package/dist/types/puppeteer/browser-agent.d.ts +3 -2
- package/dist/types/puppeteer/browser-agent.d.ts.map +1 -1
- package/dist/types/puppeteer/browser-page-manager.d.ts.map +1 -1
- package/dist/types/puppeteer/scoped-browser-agent.d.ts.map +1 -1
- package/package.json +4 -4
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.d = (exports1, definition)=>{
|
|
5
|
+
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: definition[key]
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
})();
|
|
11
|
+
(()=>{
|
|
12
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
13
|
+
})();
|
|
14
|
+
(()=>{
|
|
15
|
+
__webpack_require__.r = (exports1)=>{
|
|
16
|
+
if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
17
|
+
value: 'Module'
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
20
|
+
value: true
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
})();
|
|
24
|
+
var __webpack_exports__ = {};
|
|
25
|
+
__webpack_require__.r(__webpack_exports__);
|
|
26
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
+
appendBrowserAgentPageActions: ()=>appendBrowserAgentPageActions,
|
|
28
|
+
createBrowserAgentPageActions: ()=>createBrowserAgentPageActions
|
|
29
|
+
});
|
|
30
|
+
const core_namespaceObject = require("@midscene/core");
|
|
31
|
+
const pageListSize = 8;
|
|
32
|
+
const maxListTitleLength = 120;
|
|
33
|
+
const maxListUrlLength = 512;
|
|
34
|
+
const normalizeFeedbackValue = (value)=>value.replace(/\s+/g, ' ').trim();
|
|
35
|
+
const truncateFeedbackValue = (value, maxLength)=>{
|
|
36
|
+
if (maxLength <= 0) return '';
|
|
37
|
+
if (value.length <= maxLength) return value;
|
|
38
|
+
if (maxLength <= 2) return `${value.slice(0, maxLength - 1)}…`;
|
|
39
|
+
const headLength = Math.ceil((maxLength - 1) * 2 / 3);
|
|
40
|
+
const tailLength = maxLength - headLength - 1;
|
|
41
|
+
return `${value.slice(0, headLength)}…${value.slice(-tailLength)}`;
|
|
42
|
+
};
|
|
43
|
+
const buildPlanningFeedback = (summaries, total, offset, activeIndex)=>{
|
|
44
|
+
if (0 === total) return 'ListBrowserPages: no open pages.';
|
|
45
|
+
const nextOffset = offset + summaries.length;
|
|
46
|
+
const continuation = nextOffset < total ? ` Next: ListBrowserPages({offset:${nextOffset}}).` : '';
|
|
47
|
+
const header = `ListBrowserPages ${offset}-${nextOffset - 1} of ${total}; active ${activeIndex ?? 'none'} (0-based). Use SetActivePage.${continuation}\n`;
|
|
48
|
+
if (0 === summaries.length) return header.trimEnd();
|
|
49
|
+
const lines = summaries.map((summary)=>{
|
|
50
|
+
const prefix = `${summary.active ? '*' : ' '}${summary.index}|`;
|
|
51
|
+
const title = truncateFeedbackValue(normalizeFeedbackValue(summary.title), maxListTitleLength);
|
|
52
|
+
const url = truncateFeedbackValue(normalizeFeedbackValue(summary.url), maxListUrlLength);
|
|
53
|
+
return `${prefix}${title}|${url}`;
|
|
54
|
+
});
|
|
55
|
+
return `${header}${lines.join('\n')}`;
|
|
56
|
+
};
|
|
57
|
+
const buildPageInfoPlanningFeedback = (summary)=>`GetBrowserPageInfo index ${summary.index}; active ${summary.active}.\nTitle: ${summary.title}\nURL: ${summary.url}`;
|
|
58
|
+
const setActivePageParamSchema = core_namespaceObject.z.object({
|
|
59
|
+
index: core_namespaceObject.z.number().int().min(0).optional().describe('0-based page/tab index returned by ListBrowserPages.'),
|
|
60
|
+
title: core_namespaceObject.z.string().optional().describe('Case-insensitive page title substring to match.'),
|
|
61
|
+
url: core_namespaceObject.z.string().optional().describe('Case-insensitive page URL substring to match.')
|
|
62
|
+
});
|
|
63
|
+
const listBrowserPagesParamSchema = core_namespaceObject.z.object({
|
|
64
|
+
offset: core_namespaceObject.z.number().int().min(0).optional().describe('0-based starting position. Omit for the first page.')
|
|
65
|
+
}).optional();
|
|
66
|
+
const getBrowserPageInfoParamSchema = core_namespaceObject.z.object({
|
|
67
|
+
index: core_namespaceObject.z.number().int().min(0).describe('0-based page/tab index returned by ListBrowserPages.')
|
|
68
|
+
});
|
|
69
|
+
const createBrowserAgentPageActions = (options)=>[
|
|
70
|
+
{
|
|
71
|
+
name: 'ListBrowserPages',
|
|
72
|
+
description: 'List open browser pages/tabs in groups of 8 and show which one is active. Use offset to see the next group before switching pages.',
|
|
73
|
+
paramSchema: listBrowserPagesParamSchema,
|
|
74
|
+
planningFeedbackMaxLength: 'unlimited',
|
|
75
|
+
call: async (param, context)=>{
|
|
76
|
+
const summaries = await options.getPageManager().pageSummaries();
|
|
77
|
+
const offset = param?.offset ?? 0;
|
|
78
|
+
if (summaries.length > 0 && offset >= summaries.length) throw new Error(`[midscene] ListBrowserPages offset ${offset} is out of range for ${summaries.length} pages. Start again with offset 0.`);
|
|
79
|
+
const visibleSummaries = summaries.slice(offset, offset + pageListSize);
|
|
80
|
+
if (context?.task) context.task.planningFeedback = buildPlanningFeedback(visibleSummaries, summaries.length, offset, summaries.find(({ active })=>active)?.index);
|
|
81
|
+
return visibleSummaries;
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
name: 'GetBrowserPageInfo',
|
|
86
|
+
description: 'Get the complete title and URL for one browser page/tab without switching the active page. Use this when ListBrowserPages truncates details needed to identify a page.',
|
|
87
|
+
paramSchema: getBrowserPageInfoParamSchema,
|
|
88
|
+
planningFeedbackMaxLength: 'unlimited',
|
|
89
|
+
sample: {
|
|
90
|
+
index: 1
|
|
91
|
+
},
|
|
92
|
+
call: async (param, context)=>{
|
|
93
|
+
const summary = await options.getPageManager().pageSummaryByIndex(param.index);
|
|
94
|
+
if (context?.task) context.task.planningFeedback = buildPageInfoPlanningFeedback(summary);
|
|
95
|
+
return summary;
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
name: 'SetActivePage',
|
|
100
|
+
description: 'Set the active browser page/tab by 0-based index, title substring, or URL substring. When index is combined with title or URL, all provided values must match the same page. Use index from ListBrowserPages when more than one page could match.',
|
|
101
|
+
paramSchema: setActivePageParamSchema,
|
|
102
|
+
sample: {
|
|
103
|
+
index: 1
|
|
104
|
+
},
|
|
105
|
+
call: async (param)=>options.getPageManager().setActivePageBySelector(param)
|
|
106
|
+
}
|
|
107
|
+
];
|
|
108
|
+
const appendBrowserAgentPageActions = (customActions, browserActions)=>{
|
|
109
|
+
if (!customActions?.length) return browserActions;
|
|
110
|
+
const customActionNames = new Set(customActions.map((action)=>action.name));
|
|
111
|
+
return [
|
|
112
|
+
...customActions,
|
|
113
|
+
...browserActions.filter((action)=>!customActionNames.has(action.name))
|
|
114
|
+
];
|
|
115
|
+
};
|
|
116
|
+
exports.appendBrowserAgentPageActions = __webpack_exports__.appendBrowserAgentPageActions;
|
|
117
|
+
exports.createBrowserAgentPageActions = __webpack_exports__.createBrowserAgentPageActions;
|
|
118
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
119
|
+
"appendBrowserAgentPageActions",
|
|
120
|
+
"createBrowserAgentPageActions"
|
|
121
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
122
|
+
Object.defineProperty(exports, '__esModule', {
|
|
123
|
+
value: true
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
//# sourceMappingURL=browser-page-actions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common/browser-page-actions.js","sources":["webpack/runtime/define_property_getters","webpack/runtime/has_own_property","webpack/runtime/make_namespace_object","../../../src/common/browser-page-actions.ts"],"sourcesContent":["__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { type DeviceAction, z } from '@midscene/core';\nimport type {\n BrowserAgentPageSelector,\n BrowserAgentPageSummary,\n BrowserPageManager,\n} from './browser-agent';\n\nconst pageListSize = 8;\nconst maxListTitleLength = 120;\nconst maxListUrlLength = 512;\n\nconst normalizeFeedbackValue = (value: string) =>\n value.replace(/\\s+/g, ' ').trim();\n\nconst truncateFeedbackValue = (value: string, maxLength: number) => {\n if (maxLength <= 0) {\n return '';\n }\n if (value.length <= maxLength) {\n return value;\n }\n if (maxLength <= 2) {\n return `${value.slice(0, maxLength - 1)}…`;\n }\n const headLength = Math.ceil(((maxLength - 1) * 2) / 3);\n const tailLength = maxLength - headLength - 1;\n return `${value.slice(0, headLength)}…${value.slice(-tailLength)}`;\n};\n\nconst buildPlanningFeedback = (\n summaries: BrowserAgentPageSummary[],\n total: number,\n offset: number,\n activeIndex: number | undefined,\n) => {\n if (total === 0) {\n return 'ListBrowserPages: no open pages.';\n }\n\n const nextOffset = offset + summaries.length;\n const continuation =\n nextOffset < total\n ? ` Next: ListBrowserPages({offset:${nextOffset}}).`\n : '';\n const header = `ListBrowserPages ${offset}-${nextOffset - 1} of ${total}; active ${activeIndex ?? 'none'} (0-based). Use SetActivePage.${continuation}\\n`;\n if (summaries.length === 0) {\n return header.trimEnd();\n }\n const lines = summaries.map((summary) => {\n const prefix = `${summary.active ? '*' : ' '}${summary.index}|`;\n const title = truncateFeedbackValue(\n normalizeFeedbackValue(summary.title),\n maxListTitleLength,\n );\n const url = truncateFeedbackValue(\n normalizeFeedbackValue(summary.url),\n maxListUrlLength,\n );\n return `${prefix}${title}|${url}`;\n });\n\n return `${header}${lines.join('\\n')}`;\n};\n\nconst buildPageInfoPlanningFeedback = (summary: BrowserAgentPageSummary) =>\n `GetBrowserPageInfo index ${summary.index}; active ${summary.active}.\\nTitle: ${summary.title}\\nURL: ${summary.url}`;\n\nconst setActivePageParamSchema: z.ZodType<BrowserAgentPageSelector> = z.object({\n index: z\n .number()\n .int()\n .min(0)\n .optional()\n .describe('0-based page/tab index returned by ListBrowserPages.'),\n title: z\n .string()\n .optional()\n .describe('Case-insensitive page title substring to match.'),\n url: z\n .string()\n .optional()\n .describe('Case-insensitive page URL substring to match.'),\n});\n\nconst listBrowserPagesParamSchema = z\n .object({\n offset: z\n .number()\n .int()\n .min(0)\n .optional()\n .describe('0-based starting position. Omit for the first page.'),\n })\n .optional();\n\nconst getBrowserPageInfoParamSchema = z.object({\n index: z\n .number()\n .int()\n .min(0)\n .describe('0-based page/tab index returned by ListBrowserPages.'),\n});\n\nexport const createBrowserAgentPageActions = <Page, NewPageEvent>(options: {\n getPageManager: () => BrowserPageManager<Page, NewPageEvent>;\n}): DeviceAction<any>[] => [\n {\n name: 'ListBrowserPages',\n description:\n 'List open browser pages/tabs in groups of 8 and show which one is active. Use offset to see the next group before switching pages.',\n paramSchema: listBrowserPagesParamSchema,\n planningFeedbackMaxLength: 'unlimited',\n call: async (param, context) => {\n const summaries = await options.getPageManager().pageSummaries();\n const offset = param?.offset ?? 0;\n if (summaries.length > 0 && offset >= summaries.length) {\n throw new Error(\n `[midscene] ListBrowserPages offset ${offset} is out of range for ${summaries.length} pages. Start again with offset 0.`,\n );\n }\n const visibleSummaries = summaries.slice(offset, offset + pageListSize);\n if (context?.task) {\n context.task.planningFeedback = buildPlanningFeedback(\n visibleSummaries,\n summaries.length,\n offset,\n summaries.find(({ active }) => active)?.index,\n );\n }\n return visibleSummaries;\n },\n },\n {\n name: 'GetBrowserPageInfo',\n description:\n 'Get the complete title and URL for one browser page/tab without switching the active page. Use this when ListBrowserPages truncates details needed to identify a page.',\n paramSchema: getBrowserPageInfoParamSchema,\n planningFeedbackMaxLength: 'unlimited',\n sample: {\n index: 1,\n },\n call: async (param, context) => {\n const summary = await options\n .getPageManager()\n .pageSummaryByIndex(param.index);\n if (context?.task) {\n context.task.planningFeedback = buildPageInfoPlanningFeedback(summary);\n }\n return summary;\n },\n },\n {\n name: 'SetActivePage',\n description:\n 'Set the active browser page/tab by 0-based index, title substring, or URL substring. When index is combined with title or URL, all provided values must match the same page. Use index from ListBrowserPages when more than one page could match.',\n paramSchema: setActivePageParamSchema,\n sample: {\n index: 1,\n },\n call: async (param) =>\n options.getPageManager().setActivePageBySelector(param),\n },\n];\n\nexport const appendBrowserAgentPageActions = (\n customActions: DeviceAction<any>[] | undefined,\n browserActions: DeviceAction<any>[],\n) => {\n if (!customActions?.length) {\n return browserActions;\n }\n\n const customActionNames = new Set(customActions.map((action) => action.name));\n return [\n ...customActions,\n ...browserActions.filter((action) => !customActionNames.has(action.name)),\n ];\n};\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","pageListSize","maxListTitleLength","maxListUrlLength","normalizeFeedbackValue","value","truncateFeedbackValue","maxLength","headLength","Math","tailLength","buildPlanningFeedback","summaries","total","offset","activeIndex","nextOffset","continuation","header","lines","summary","prefix","title","url","buildPageInfoPlanningFeedback","setActivePageParamSchema","z","listBrowserPagesParamSchema","getBrowserPageInfoParamSchema","createBrowserAgentPageActions","options","param","context","Error","visibleSummaries","active","appendBrowserAgentPageActions","customActions","browserActions","customActionNames","Set","action"],"mappings":"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"}
|
|
@@ -28,6 +28,7 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
28
28
|
});
|
|
29
29
|
const browser_agent_js_namespaceObject = require("../common/browser-agent.js");
|
|
30
30
|
const browser_agent_utils_js_namespaceObject = require("../common/browser-agent-utils.js");
|
|
31
|
+
const browser_page_actions_js_namespaceObject = require("../common/browser-page-actions.js");
|
|
31
32
|
const logger_namespaceObject = require("@midscene/shared/logger");
|
|
32
33
|
const external_page_js_namespaceObject = require("./page.js");
|
|
33
34
|
const agent_nodes_js_namespaceObject = require("./test-runner/agent-nodes.js");
|
|
@@ -47,6 +48,8 @@ const createPlaywrightBrowserAdapter = (context)=>({
|
|
|
47
48
|
newPage: ()=>context.newPage(),
|
|
48
49
|
isPageClosed: (page)=>page.isClosed(),
|
|
49
50
|
bringToFront: (page)=>page.bringToFront(),
|
|
51
|
+
pageTitle: (page)=>page.title(),
|
|
52
|
+
pageUrl: (page)=>page.url(),
|
|
50
53
|
onNewPage: (handler)=>context.on('page', handler),
|
|
51
54
|
offNewPage: (handler)=>context.off('page', handler),
|
|
52
55
|
resolveNewPage: (page)=>page
|
|
@@ -94,9 +97,13 @@ class PlaywrightBrowserAgent extends browser_agent_js_namespaceObject.WebAgentCo
|
|
|
94
97
|
newPageTimeout
|
|
95
98
|
});
|
|
96
99
|
const { forceChromeSelectRendering } = agentOpts;
|
|
100
|
+
const browserActions = (0, browser_page_actions_js_namespaceObject.createBrowserAgentPageActions)({
|
|
101
|
+
getPageManager: ()=>pageManager
|
|
102
|
+
});
|
|
97
103
|
const webPage = new external_page_js_namespaceObject.WebPage(initialPage, {
|
|
98
104
|
...agentOpts,
|
|
99
|
-
forceSameTabNavigation: runtimeOptions.forceSameTabNavigation
|
|
105
|
+
forceSameTabNavigation: runtimeOptions.forceSameTabNavigation,
|
|
106
|
+
customActions: (0, browser_page_actions_js_namespaceObject.appendBrowserAgentPageActions)(agentOpts.customActions, browserActions)
|
|
100
107
|
});
|
|
101
108
|
const pageManager = new browser_agent_js_namespaceObject.BrowserPageManager({
|
|
102
109
|
agentName: 'PlaywrightBrowserAgent',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"playwright/browser-agent.js","sources":["webpack/runtime/define_property_getters","webpack/runtime/has_own_property","webpack/runtime/make_namespace_object","../../../src/playwright/browser-agent.ts"],"sourcesContent":["__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import {\n type BrowserAgentAdapter,\n BrowserPageManager,\n WebAgentCore,\n resolveBrowserAgentRuntimeOptions,\n} from '@/common/browser-agent';\nimport { applyForceChromeSelectRendering } from '@/common/browser-agent-utils';\nimport type { WebPageAgentOpt } from '@/web-element';\nimport type { AgentTestRunnerNodeDefinition } from '@midscene/core/agent';\nimport { getDebug } from '@midscene/shared/logger';\nimport type {\n BrowserContext as PlaywrightBrowserContext,\n Page as PlaywrightPage,\n} from 'playwright';\nimport { WebPage as PlaywrightWebPage } from './page';\nimport { playwrightAgentTestRunnerNodeDefinitions } from './test-runner/agent-nodes';\nimport type { PlaywrightTestRunnerOptions } from './test-runner/types';\n\nconst debug = getDebug('playwright:browser-agent');\n\nconst createPlaywrightBrowserAdapter = (\n context: PlaywrightBrowserContext,\n): BrowserAgentAdapter<PlaywrightPage, PlaywrightPage> => ({\n pages: () => context.pages(),\n newPage: () => context.newPage(),\n isPageClosed: (page) => page.isClosed(),\n bringToFront: (page) => page.bringToFront(),\n onNewPage: (handler) => context.on('page', handler),\n offNewPage: (handler) => context.off('page', handler),\n resolveNewPage: (page) => page,\n});\n\nexport type PlaywrightBrowserAgentOpt = Omit<\n WebPageAgentOpt,\n 'forceSameTabNavigation'\n> & {\n testRunner?: PlaywrightTestRunnerOptions;\n autoFollowNewPage?: boolean;\n newPageTimeout?: number;\n};\n\nexport type PlaywrightBrowserAgentCreateOpt = PlaywrightBrowserAgentOpt & {\n initialPage?: PlaywrightPage;\n};\n\nexport class PlaywrightBrowserAgent extends WebAgentCore<PlaywrightWebPage> {\n static override getTestRunnerNodeDefinitions(): readonly AgentTestRunnerNodeDefinition[] {\n return [\n ...WebAgentCore.getTestRunnerNodeDefinitions(),\n ...playwrightAgentTestRunnerNodeDefinitions,\n ];\n }\n\n readonly testRunner?: PlaywrightTestRunnerOptions;\n\n private readonly pageManager: BrowserPageManager<\n PlaywrightPage,\n PlaywrightPage\n >;\n\n constructor(\n context: PlaywrightBrowserContext,\n initialPage: PlaywrightPage,\n opts?: PlaywrightBrowserAgentOpt,\n ) {\n if (!context) {\n throw new Error(\n '[midscene] PlaywrightBrowserAgent requires a valid Playwright browser context.',\n );\n }\n if (!initialPage) {\n throw new Error(\n '[midscene] PlaywrightBrowserAgent requires a valid initial page instance.',\n );\n }\n\n const { autoFollowNewPage, newPageTimeout, ...agentOpts } = opts ?? {};\n const runtimeOptions = resolveBrowserAgentRuntimeOptions({\n agentName: 'PlaywrightBrowserAgent',\n pageScope: 'browser',\n forceSameTabNavigation: (opts as WebPageAgentOpt | undefined)\n ?.forceSameTabNavigation,\n autoFollowNewPage,\n newPageTimeout,\n });\n const { forceChromeSelectRendering } = agentOpts;\n const webPage = new PlaywrightWebPage(initialPage, {\n ...agentOpts,\n forceSameTabNavigation: runtimeOptions.forceSameTabNavigation,\n });\n const pageManager
|
|
1
|
+
{"version":3,"file":"playwright/browser-agent.js","sources":["webpack/runtime/define_property_getters","webpack/runtime/has_own_property","webpack/runtime/make_namespace_object","../../../src/playwright/browser-agent.ts"],"sourcesContent":["__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import {\n type BrowserAgentAdapter,\n BrowserPageManager,\n WebAgentCore,\n resolveBrowserAgentRuntimeOptions,\n} from '@/common/browser-agent';\nimport { applyForceChromeSelectRendering } from '@/common/browser-agent-utils';\nimport {\n appendBrowserAgentPageActions,\n createBrowserAgentPageActions,\n} from '@/common/browser-page-actions';\nimport type { WebPageAgentOpt } from '@/web-element';\nimport type { AgentTestRunnerNodeDefinition } from '@midscene/core/agent';\nimport { getDebug } from '@midscene/shared/logger';\nimport type {\n BrowserContext as PlaywrightBrowserContext,\n Page as PlaywrightPage,\n} from 'playwright';\nimport { WebPage as PlaywrightWebPage } from './page';\nimport { playwrightAgentTestRunnerNodeDefinitions } from './test-runner/agent-nodes';\nimport type { PlaywrightTestRunnerOptions } from './test-runner/types';\n\nconst debug = getDebug('playwright:browser-agent');\n\nconst createPlaywrightBrowserAdapter = (\n context: PlaywrightBrowserContext,\n): BrowserAgentAdapter<PlaywrightPage, PlaywrightPage> => ({\n pages: () => context.pages(),\n newPage: () => context.newPage(),\n isPageClosed: (page) => page.isClosed(),\n bringToFront: (page) => page.bringToFront(),\n pageTitle: (page) => page.title(),\n pageUrl: (page) => page.url(),\n onNewPage: (handler) => context.on('page', handler),\n offNewPage: (handler) => context.off('page', handler),\n resolveNewPage: (page) => page,\n});\n\nexport type PlaywrightBrowserAgentOpt = Omit<\n WebPageAgentOpt,\n 'forceSameTabNavigation'\n> & {\n testRunner?: PlaywrightTestRunnerOptions;\n autoFollowNewPage?: boolean;\n newPageTimeout?: number;\n};\n\nexport type PlaywrightBrowserAgentCreateOpt = PlaywrightBrowserAgentOpt & {\n initialPage?: PlaywrightPage;\n};\n\nexport class PlaywrightBrowserAgent extends WebAgentCore<PlaywrightWebPage> {\n static override getTestRunnerNodeDefinitions(): readonly AgentTestRunnerNodeDefinition[] {\n return [\n ...WebAgentCore.getTestRunnerNodeDefinitions(),\n ...playwrightAgentTestRunnerNodeDefinitions,\n ];\n }\n\n readonly testRunner?: PlaywrightTestRunnerOptions;\n\n private readonly pageManager: BrowserPageManager<\n PlaywrightPage,\n PlaywrightPage\n >;\n\n constructor(\n context: PlaywrightBrowserContext,\n initialPage: PlaywrightPage,\n opts?: PlaywrightBrowserAgentOpt,\n ) {\n if (!context) {\n throw new Error(\n '[midscene] PlaywrightBrowserAgent requires a valid Playwright browser context.',\n );\n }\n if (!initialPage) {\n throw new Error(\n '[midscene] PlaywrightBrowserAgent requires a valid initial page instance.',\n );\n }\n\n const { autoFollowNewPage, newPageTimeout, ...agentOpts } = opts ?? {};\n const runtimeOptions = resolveBrowserAgentRuntimeOptions({\n agentName: 'PlaywrightBrowserAgent',\n pageScope: 'browser',\n forceSameTabNavigation: (opts as WebPageAgentOpt | undefined)\n ?.forceSameTabNavigation,\n autoFollowNewPage,\n newPageTimeout,\n });\n const { forceChromeSelectRendering } = agentOpts;\n const browserActions = createBrowserAgentPageActions({\n getPageManager: () => pageManager,\n });\n const webPage: PlaywrightWebPage = new PlaywrightWebPage(initialPage, {\n ...agentOpts,\n forceSameTabNavigation: runtimeOptions.forceSameTabNavigation,\n customActions: appendBrowserAgentPageActions(\n agentOpts.customActions,\n browserActions,\n ),\n });\n const pageManager: BrowserPageManager<PlaywrightPage, PlaywrightPage> =\n new BrowserPageManager({\n agentName: 'PlaywrightBrowserAgent',\n adapter: createPlaywrightBrowserAdapter(context),\n getActivePage: () => webPage.underlyingPage as PlaywrightPage,\n setActivePageValue: (page) => {\n webPage.underlyingPage = page;\n },\n autoFollowNewPage: runtimeOptions.autoFollowNewPage,\n newPageTimeout: runtimeOptions.newPageTimeout,\n debug,\n });\n super(webPage, agentOpts);\n this.pageManager = pageManager;\n this.testRunner = opts?.testRunner;\n\n applyForceChromeSelectRendering(\n initialPage,\n 'playwright',\n forceChromeSelectRendering,\n );\n }\n\n static async create(\n context: PlaywrightBrowserContext,\n opts?: PlaywrightBrowserAgentCreateOpt,\n ) {\n const { initialPage, ...agentOpts } = opts ?? {};\n const page = initialPage ?? context.pages()[0] ?? (await context.newPage());\n\n return new PlaywrightBrowserAgent(context, page, agentOpts);\n }\n\n get activePage() {\n return this.pageManager.activePage;\n }\n\n pages() {\n return this.pageManager.pages();\n }\n\n async newPage() {\n return this.pageManager.newPage();\n }\n\n async setActivePage(page: PlaywrightPage) {\n await this.pageManager.setActivePage(page);\n }\n\n async waitForNewPage(\n action?: () => Promise<unknown> | unknown,\n opts?: { timeout?: number },\n ) {\n return this.pageManager.waitForNewPage(action, opts);\n }\n\n async destroy() {\n this.pageManager.destroy();\n await super.destroy();\n }\n}\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","debug","getDebug","createPlaywrightBrowserAdapter","context","page","handler","PlaywrightBrowserAgent","WebAgentCore","playwrightAgentTestRunnerNodeDefinitions","opts","initialPage","agentOpts","action","Error","autoFollowNewPage","newPageTimeout","runtimeOptions","resolveBrowserAgentRuntimeOptions","forceChromeSelectRendering","browserActions","createBrowserAgentPageActions","pageManager","webPage","PlaywrightWebPage","appendBrowserAgentPageActions","BrowserPageManager","applyForceChromeSelectRendering"],"mappings":";;;IAAAA,oBAAoB,CAAC,GAAG,CAAC,UAASC;QACjC,IAAI,IAAIC,OAAOD,WACR,IAAGD,oBAAoB,CAAC,CAACC,YAAYC,QAAQ,CAACF,oBAAoB,CAAC,CAAC,UAASE,MACzEC,OAAO,cAAc,CAAC,UAASD,KAAK;YAAE,YAAY;YAAM,KAAKD,UAAU,CAACC,IAAI;QAAC;IAGzF;;;ICNAF,oBAAoB,CAAC,GAAG,CAACI,KAAKC,OAAUF,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAACC,KAAKC;;;ICClFL,oBAAoB,CAAC,GAAG,CAAC;QACxB,IAAG,AAAkB,eAAlB,OAAOM,UAA0BA,OAAO,WAAW,EACrDH,OAAO,cAAc,CAAC,UAASG,OAAO,WAAW,EAAE;YAAE,OAAO;QAAS;QAEtEH,OAAO,cAAc,CAAC,UAAS,cAAc;YAAE,OAAO;QAAK;IAC5D;;;;;;;;;;;;;;;;;;;;;;;ACgBA,MAAMI,QAAQC,AAAAA,IAAAA,uBAAAA,QAAAA,AAAAA,EAAS;AAEvB,MAAMC,iCAAiC,CACrCC,UACyD;QACzD,OAAO,IAAMA,QAAQ,KAAK;QAC1B,SAAS,IAAMA,QAAQ,OAAO;QAC9B,cAAc,CAACC,OAASA,KAAK,QAAQ;QACrC,cAAc,CAACA,OAASA,KAAK,YAAY;QACzC,WAAW,CAACA,OAASA,KAAK,KAAK;QAC/B,SAAS,CAACA,OAASA,KAAK,GAAG;QAC3B,WAAW,CAACC,UAAYF,QAAQ,EAAE,CAAC,QAAQE;QAC3C,YAAY,CAACA,UAAYF,QAAQ,GAAG,CAAC,QAAQE;QAC7C,gBAAgB,CAACD,OAASA;IAC5B;AAeO,MAAME,+BAA+BC,iCAAAA,YAAYA;IACtD,OAAgB,+BAAyE;QACvF,OAAO;eACFA,iCAAAA,YAAAA,CAAAA,4BAAyC;eACzCC,+BAAAA,wCAAwCA;SAC5C;IACH;IAqEA,aAAa,OACXL,OAAiC,EACjCM,IAAsC,EACtC;QACA,MAAM,EAAEC,WAAW,EAAE,GAAGC,WAAW,GAAGF,QAAQ,CAAC;QAC/C,MAAML,OAAOM,eAAeP,QAAQ,KAAK,EAAE,CAAC,EAAE,IAAK,MAAMA,QAAQ,OAAO;QAExE,OAAO,IAAIG,uBAAuBH,SAASC,MAAMO;IACnD;IAEA,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU;IACpC;IAEA,QAAQ;QACN,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK;IAC/B;IAEA,MAAM,UAAU;QACd,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO;IACjC;IAEA,MAAM,cAAcP,IAAoB,EAAE;QACxC,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,CAACA;IACvC;IAEA,MAAM,eACJQ,MAAyC,EACzCH,IAA2B,EAC3B;QACA,OAAO,IAAI,CAAC,WAAW,CAAC,cAAc,CAACG,QAAQH;IACjD;IAEA,MAAM,UAAU;QACd,IAAI,CAAC,WAAW,CAAC,OAAO;QACxB,MAAM,KAAK,CAAC;IACd;IAhGA,YACEN,OAAiC,EACjCO,WAA2B,EAC3BD,IAAgC,CAChC;QACA,IAAI,CAACN,SACH,MAAM,IAAIU,MACR;QAGJ,IAAI,CAACH,aACH,MAAM,IAAIG,MACR;QAIJ,MAAM,EAAEC,iBAAiB,EAAEC,cAAc,EAAE,GAAGJ,WAAW,GAAGF,QAAQ,CAAC;QACrE,MAAMO,iBAAiBC,AAAAA,IAAAA,iCAAAA,iCAAAA,AAAAA,EAAkC;YACvD,WAAW;YACX,WAAW;YACX,wBAAyBR,MACrB;YACJK;YACAC;QACF;QACA,MAAM,EAAEG,0BAA0B,EAAE,GAAGP;QACvC,MAAMQ,iBAAiBC,AAAAA,IAAAA,wCAAAA,6BAAAA,AAAAA,EAA8B;YACnD,gBAAgB,IAAMC;QACxB;QACA,MAAMC,UAA6B,IAAIC,iCAAAA,OAAiBA,CAACb,aAAa;YACpE,GAAGC,SAAS;YACZ,wBAAwBK,eAAe,sBAAsB;YAC7D,eAAeQ,AAAAA,IAAAA,wCAAAA,6BAAAA,AAAAA,EACbb,UAAU,aAAa,EACvBQ;QAEJ;QACA,MAAME,cACJ,IAAII,iCAAAA,kBAAkBA,CAAC;YACrB,WAAW;YACX,SAASvB,+BAA+BC;YACxC,eAAe,IAAMmB,QAAQ,cAAc;YAC3C,oBAAoB,CAAClB;gBACnBkB,QAAQ,cAAc,GAAGlB;YAC3B;YACA,mBAAmBY,eAAe,iBAAiB;YACnD,gBAAgBA,eAAe,cAAc;YAC7ChB;QACF;QACF,KAAK,CAACsB,SAASX,YAxDjB,uBAAS,cAAT,SAEA,uBAAiB,eAAjB;QAuDE,IAAI,CAAC,WAAW,GAAGU;QACnB,IAAI,CAAC,UAAU,GAAGZ,MAAM;QAExBiB,IAAAA,uCAAAA,+BAAAA,AAAAA,EACEhB,aACA,cACAQ;IAEJ;AAuCF"}
|
|
@@ -28,6 +28,7 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
28
28
|
});
|
|
29
29
|
const browser_agent_js_namespaceObject = require("../common/browser-agent.js");
|
|
30
30
|
const browser_agent_utils_js_namespaceObject = require("../common/browser-agent-utils.js");
|
|
31
|
+
const browser_page_actions_js_namespaceObject = require("../common/browser-page-actions.js");
|
|
31
32
|
const logger_namespaceObject = require("@midscene/shared/logger");
|
|
32
33
|
const external_browser_page_manager_js_namespaceObject = require("./browser-page-manager.js");
|
|
33
34
|
const external_page_js_namespaceObject = require("./page.js");
|
|
@@ -67,7 +68,7 @@ class PuppeteerBrowserAgent extends browser_agent_js_namespaceObject.WebAgentCor
|
|
|
67
68
|
this.pageManager.destroy();
|
|
68
69
|
await super.destroy();
|
|
69
70
|
}
|
|
70
|
-
constructor(browser, initialPage, opts){
|
|
71
|
+
constructor(browser, initialPage, opts, pageScope){
|
|
71
72
|
if (!browser) throw new Error('[midscene] PuppeteerBrowserAgent requires a valid Puppeteer browser instance.');
|
|
72
73
|
if (!initialPage) throw new Error('[midscene] PuppeteerBrowserAgent requires a valid initial page instance.');
|
|
73
74
|
const { autoFollowNewPage, newPageTimeout, ...agentOpts } = opts ?? {};
|
|
@@ -79,15 +80,20 @@ class PuppeteerBrowserAgent extends browser_agent_js_namespaceObject.WebAgentCor
|
|
|
79
80
|
newPageTimeout
|
|
80
81
|
});
|
|
81
82
|
const { forceChromeSelectRendering } = agentOpts;
|
|
83
|
+
const browserActions = (0, browser_page_actions_js_namespaceObject.createBrowserAgentPageActions)({
|
|
84
|
+
getPageManager: ()=>pageManager
|
|
85
|
+
});
|
|
82
86
|
const webPage = new external_page_js_namespaceObject.PuppeteerWebPage(initialPage, {
|
|
83
87
|
...agentOpts,
|
|
84
|
-
forceSameTabNavigation: runtimeOptions.forceSameTabNavigation
|
|
88
|
+
forceSameTabNavigation: runtimeOptions.forceSameTabNavigation,
|
|
89
|
+
customActions: (0, browser_page_actions_js_namespaceObject.appendBrowserAgentPageActions)(agentOpts.customActions, browserActions)
|
|
85
90
|
});
|
|
86
91
|
const pageManager = (0, external_browser_page_manager_js_namespaceObject.createPuppeteerBrowserPageManager)({
|
|
87
92
|
browser,
|
|
88
93
|
webPage,
|
|
89
94
|
runtimeOptions,
|
|
90
|
-
debug
|
|
95
|
+
debug,
|
|
96
|
+
pageScope
|
|
91
97
|
});
|
|
92
98
|
super(webPage, agentOpts), _define_property(this, "pageManager", void 0);
|
|
93
99
|
this.pageManager = pageManager;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"puppeteer/browser-agent.js","sources":["webpack/runtime/define_property_getters","webpack/runtime/has_own_property","webpack/runtime/make_namespace_object","../../../src/puppeteer/browser-agent.ts"],"sourcesContent":["__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import {\n type BrowserPageManager,\n WebAgentCore,\n resolveBrowserAgentRuntimeOptions,\n} from '@/common/browser-agent';\nimport { applyForceChromeSelectRendering } from '@/common/browser-agent-utils';\nimport type { WebPageAgentOpt } from '@/web-element';\nimport { getDebug } from '@midscene/shared/logger';\nimport type {\n Browser as PuppeteerBrowser,\n Page as PuppeteerPage,\n Target as PuppeteerTarget,\n} from 'puppeteer';\nimport { createPuppeteerBrowserPageManager } from './browser-page-manager';\nimport { PuppeteerWebPage } from './page';\n\nconst debug = getDebug('puppeteer:browser-agent');\n\nexport type PuppeteerBrowserAgentOpt = Omit<\n WebPageAgentOpt,\n 'forceSameTabNavigation'\n> & {\n autoFollowNewPage?: boolean;\n newPageTimeout?: number;\n};\n\nexport type PuppeteerBrowserAgentCreateOpt = PuppeteerBrowserAgentOpt & {\n initialPage?: PuppeteerPage;\n};\n\nexport class PuppeteerBrowserAgent extends WebAgentCore<PuppeteerWebPage> {\n protected pageManager: BrowserPageManager
|
|
1
|
+
{"version":3,"file":"puppeteer/browser-agent.js","sources":["webpack/runtime/define_property_getters","webpack/runtime/has_own_property","webpack/runtime/make_namespace_object","../../../src/puppeteer/browser-agent.ts"],"sourcesContent":["__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import {\n type BrowserPageManager,\n WebAgentCore,\n resolveBrowserAgentRuntimeOptions,\n} from '@/common/browser-agent';\nimport { applyForceChromeSelectRendering } from '@/common/browser-agent-utils';\nimport {\n appendBrowserAgentPageActions,\n createBrowserAgentPageActions,\n} from '@/common/browser-page-actions';\nimport type { WebPageAgentOpt } from '@/web-element';\nimport { getDebug } from '@midscene/shared/logger';\nimport type {\n Browser as PuppeteerBrowser,\n Page as PuppeteerPage,\n Target as PuppeteerTarget,\n} from 'puppeteer';\nimport { createPuppeteerBrowserPageManager } from './browser-page-manager';\nimport type { PuppeteerBrowserPageScope } from './browser-page-manager';\nimport { PuppeteerWebPage } from './page';\n\nconst debug = getDebug('puppeteer:browser-agent');\n\nexport type PuppeteerBrowserAgentOpt = Omit<\n WebPageAgentOpt,\n 'forceSameTabNavigation'\n> & {\n autoFollowNewPage?: boolean;\n newPageTimeout?: number;\n};\n\nexport type PuppeteerBrowserAgentCreateOpt = PuppeteerBrowserAgentOpt & {\n initialPage?: PuppeteerPage;\n};\n\nexport class PuppeteerBrowserAgent extends WebAgentCore<PuppeteerWebPage> {\n protected readonly pageManager: BrowserPageManager<\n PuppeteerPage,\n PuppeteerTarget\n >;\n\n constructor(\n browser: PuppeteerBrowser,\n initialPage: PuppeteerPage,\n opts?: PuppeteerBrowserAgentOpt,\n pageScope?: PuppeteerBrowserPageScope,\n ) {\n if (!browser) {\n throw new Error(\n '[midscene] PuppeteerBrowserAgent requires a valid Puppeteer browser instance.',\n );\n }\n if (!initialPage) {\n throw new Error(\n '[midscene] PuppeteerBrowserAgent requires a valid initial page instance.',\n );\n }\n\n const { autoFollowNewPage, newPageTimeout, ...agentOpts } = opts ?? {};\n const runtimeOptions = resolveBrowserAgentRuntimeOptions({\n agentName: 'PuppeteerBrowserAgent',\n pageScope: 'browser',\n forceSameTabNavigation: (opts as WebPageAgentOpt | undefined)\n ?.forceSameTabNavigation,\n autoFollowNewPage,\n newPageTimeout,\n });\n const { forceChromeSelectRendering } = agentOpts;\n const browserActions = createBrowserAgentPageActions({\n getPageManager: () => pageManager,\n });\n const webPage: PuppeteerWebPage = new PuppeteerWebPage(initialPage, {\n ...agentOpts,\n forceSameTabNavigation: runtimeOptions.forceSameTabNavigation,\n customActions: appendBrowserAgentPageActions(\n agentOpts.customActions,\n browserActions,\n ),\n });\n const pageManager: BrowserPageManager<PuppeteerPage, PuppeteerTarget> =\n createPuppeteerBrowserPageManager({\n browser,\n webPage,\n runtimeOptions,\n debug,\n pageScope,\n });\n super(webPage, agentOpts);\n this.pageManager = pageManager;\n\n applyForceChromeSelectRendering(\n initialPage,\n 'puppeteer',\n forceChromeSelectRendering,\n );\n }\n\n static async create(\n browser: PuppeteerBrowser,\n opts?: PuppeteerBrowserAgentCreateOpt,\n ) {\n const { initialPage, ...agentOpts } = opts ?? {};\n const page =\n initialPage ?? (await browser.pages())[0] ?? (await browser.newPage());\n\n return new PuppeteerBrowserAgent(browser, page, agentOpts);\n }\n\n get activePage() {\n return this.pageManager.activePage;\n }\n\n pages() {\n return this.pageManager.pages();\n }\n\n async newPage() {\n return this.pageManager.newPage();\n }\n\n async setActivePage(page: PuppeteerPage) {\n await this.pageManager.setActivePage(page);\n }\n\n async waitForNewPage(\n action?: () => Promise<unknown> | unknown,\n opts?: { timeout?: number },\n ) {\n return this.pageManager.waitForNewPage(action, opts);\n }\n\n async destroy() {\n this.pageManager.destroy();\n await super.destroy();\n }\n}\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","debug","getDebug","PuppeteerBrowserAgent","WebAgentCore","browser","opts","initialPage","agentOpts","page","action","pageScope","Error","autoFollowNewPage","newPageTimeout","runtimeOptions","resolveBrowserAgentRuntimeOptions","forceChromeSelectRendering","browserActions","createBrowserAgentPageActions","pageManager","webPage","PuppeteerWebPage","appendBrowserAgentPageActions","createPuppeteerBrowserPageManager","applyForceChromeSelectRendering"],"mappings":"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"}
|
|
@@ -37,6 +37,8 @@ const createPuppeteerBrowserAdapter = (browser, pageScope)=>({
|
|
|
37
37
|
isPageClosed: (page)=>page.isClosed(),
|
|
38
38
|
isPageAllowed: (page)=>pageScope?.ownsPage(page) ?? true,
|
|
39
39
|
bringToFront: (page)=>page.bringToFront(),
|
|
40
|
+
pageTitle: (page)=>page.title(),
|
|
41
|
+
pageUrl: (page)=>page.url(),
|
|
40
42
|
onNewPage: (handler)=>browser.on('targetcreated', handler),
|
|
41
43
|
offNewPage: (handler)=>browser.off('targetcreated', handler),
|
|
42
44
|
isNewPageEvent: (target)=>'page' === target.type() && (pageScope?.captureTarget(target) ?? true),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"puppeteer/browser-page-manager.js","sources":["webpack/runtime/define_property_getters","webpack/runtime/has_own_property","webpack/runtime/make_namespace_object","../../../src/puppeteer/browser-page-manager.ts"],"sourcesContent":["__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import {\n type BrowserAgentAdapter,\n BrowserPageManager,\n type ResolvedBrowserAgentRuntimeOptions,\n} from '@/common/browser-agent';\nimport type { DebugFunction } from '@midscene/shared/logger';\nimport type {\n Browser as PuppeteerBrowser,\n Page as PuppeteerPage,\n Target as PuppeteerTarget,\n} from 'puppeteer';\nimport type { PuppeteerWebPage } from './page';\n\nexport interface PuppeteerBrowserPageScope {\n pages(): Promise<PuppeteerPage[]>;\n trackPage(page: PuppeteerPage): void;\n ownsPage(page: PuppeteerPage): boolean;\n captureTarget(target: PuppeteerTarget): boolean;\n}\n\nconst createPuppeteerBrowserAdapter = (\n browser: PuppeteerBrowser,\n pageScope?: PuppeteerBrowserPageScope,\n): BrowserAgentAdapter<PuppeteerPage, PuppeteerTarget> => ({\n pages: () => pageScope?.pages() ?? browser.pages(),\n newPage: async () => {\n const page = await browser.newPage();\n pageScope?.trackPage(page);\n return page;\n },\n isPageClosed: (page) => page.isClosed(),\n isPageAllowed: (page) => pageScope?.ownsPage(page) ?? true,\n bringToFront: (page) => page.bringToFront(),\n onNewPage: (handler) => browser.on('targetcreated', handler),\n offNewPage: (handler) => browser.off('targetcreated', handler),\n isNewPageEvent: (target) =>\n target.type() === 'page' && (pageScope?.captureTarget(target) ?? true),\n resolveNewPage: (target) => target.page(),\n});\n\nexport function createPuppeteerBrowserPageManager({\n browser,\n webPage,\n runtimeOptions,\n debug,\n pageScope,\n}: {\n browser: PuppeteerBrowser;\n webPage: PuppeteerWebPage;\n runtimeOptions: ResolvedBrowserAgentRuntimeOptions;\n debug: DebugFunction;\n pageScope?: PuppeteerBrowserPageScope;\n}) {\n return new BrowserPageManager({\n agentName: 'PuppeteerBrowserAgent',\n adapter: createPuppeteerBrowserAdapter(browser, pageScope),\n getActivePage: () => webPage.underlyingPage as PuppeteerPage,\n setActivePageValue: (page) => {\n webPage.underlyingPage = page;\n },\n autoFollowNewPage: runtimeOptions.autoFollowNewPage,\n newPageTimeout: runtimeOptions.newPageTimeout,\n debug,\n });\n}\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","createPuppeteerBrowserAdapter","browser","pageScope","page","handler","target","createPuppeteerBrowserPageManager","webPage","runtimeOptions","debug","BrowserPageManager"],"mappings":";;;IAAAA,oBAAoB,CAAC,GAAG,CAAC,UAASC;QACjC,IAAI,IAAIC,OAAOD,WACR,IAAGD,oBAAoB,CAAC,CAACC,YAAYC,QAAQ,CAACF,oBAAoB,CAAC,CAAC,UAASE,MACzEC,OAAO,cAAc,CAAC,UAASD,KAAK;YAAE,YAAY;YAAM,KAAKD,UAAU,CAACC,IAAI;QAAC;IAGzF;;;ICNAF,oBAAoB,CAAC,GAAG,CAACI,KAAKC,OAAUF,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAACC,KAAKC;;;ICClFL,oBAAoB,CAAC,GAAG,CAAC;QACxB,IAAG,AAAkB,eAAlB,OAAOM,UAA0BA,OAAO,WAAW,EACrDH,OAAO,cAAc,CAAC,UAASG,OAAO,WAAW,EAAE;YAAE,OAAO;QAAS;QAEtEH,OAAO,cAAc,CAAC,UAAS,cAAc;YAAE,OAAO;QAAK;IAC5D;;;;;;;;ACcA,MAAMI,gCAAgC,CACpCC,SACAC,YACyD;QACzD,OAAO,IAAMA,WAAW,WAAWD,QAAQ,KAAK;QAChD,SAAS;YACP,MAAME,OAAO,MAAMF,QAAQ,OAAO;YAClCC,WAAW,UAAUC;YACrB,OAAOA;QACT;QACA,cAAc,CAACA,OAASA,KAAK,QAAQ;QACrC,eAAe,CAACA,OAASD,WAAW,SAASC,SAAS;QACtD,cAAc,CAACA,OAASA,KAAK,YAAY;QACzC,WAAW,CAACC,UAAYH,QAAQ,EAAE,CAAC,iBAAiBG;QACpD,YAAY,CAACA,UAAYH,QAAQ,GAAG,CAAC,iBAAiBG;QACtD,gBAAgB,CAACC,SACfA,AAAkB,WAAlBA,OAAO,IAAI,MAAkBH,CAAAA,WAAW,cAAcG,WAAW,IAAG;QACtE,gBAAgB,CAACA,SAAWA,OAAO,IAAI;IACzC;AAEO,SAASC,kCAAkC,EAChDL,OAAO,EACPM,OAAO,EACPC,cAAc,EACdC,KAAK,EACLP,SAAS,EAOV;IACC,OAAO,IAAIQ,iCAAAA,kBAAkBA,CAAC;QAC5B,WAAW;QACX,SAASV,8BAA8BC,SAASC;QAChD,eAAe,IAAMK,QAAQ,cAAc;QAC3C,oBAAoB,CAACJ;YACnBI,QAAQ,cAAc,GAAGJ;QAC3B;QACA,mBAAmBK,eAAe,iBAAiB;QACnD,gBAAgBA,eAAe,cAAc;QAC7CC;IACF;AACF"}
|
|
1
|
+
{"version":3,"file":"puppeteer/browser-page-manager.js","sources":["webpack/runtime/define_property_getters","webpack/runtime/has_own_property","webpack/runtime/make_namespace_object","../../../src/puppeteer/browser-page-manager.ts"],"sourcesContent":["__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import {\n type BrowserAgentAdapter,\n BrowserPageManager,\n type ResolvedBrowserAgentRuntimeOptions,\n} from '@/common/browser-agent';\nimport type { DebugFunction } from '@midscene/shared/logger';\nimport type {\n Browser as PuppeteerBrowser,\n Page as PuppeteerPage,\n Target as PuppeteerTarget,\n} from 'puppeteer';\nimport type { PuppeteerWebPage } from './page';\n\nexport interface PuppeteerBrowserPageScope {\n pages(): Promise<PuppeteerPage[]>;\n trackPage(page: PuppeteerPage): void;\n ownsPage(page: PuppeteerPage): boolean;\n captureTarget(target: PuppeteerTarget): boolean;\n}\n\nconst createPuppeteerBrowserAdapter = (\n browser: PuppeteerBrowser,\n pageScope?: PuppeteerBrowserPageScope,\n): BrowserAgentAdapter<PuppeteerPage, PuppeteerTarget> => ({\n pages: () => pageScope?.pages() ?? browser.pages(),\n newPage: async () => {\n const page = await browser.newPage();\n pageScope?.trackPage(page);\n return page;\n },\n isPageClosed: (page) => page.isClosed(),\n isPageAllowed: (page) => pageScope?.ownsPage(page) ?? true,\n bringToFront: (page) => page.bringToFront(),\n pageTitle: (page) => page.title(),\n pageUrl: (page) => page.url(),\n onNewPage: (handler) => browser.on('targetcreated', handler),\n offNewPage: (handler) => browser.off('targetcreated', handler),\n isNewPageEvent: (target) =>\n target.type() === 'page' && (pageScope?.captureTarget(target) ?? true),\n resolveNewPage: (target) => target.page(),\n});\n\nexport function createPuppeteerBrowserPageManager({\n browser,\n webPage,\n runtimeOptions,\n debug,\n pageScope,\n}: {\n browser: PuppeteerBrowser;\n webPage: PuppeteerWebPage;\n runtimeOptions: ResolvedBrowserAgentRuntimeOptions;\n debug: DebugFunction;\n pageScope?: PuppeteerBrowserPageScope;\n}) {\n return new BrowserPageManager({\n agentName: 'PuppeteerBrowserAgent',\n adapter: createPuppeteerBrowserAdapter(browser, pageScope),\n getActivePage: () => webPage.underlyingPage as PuppeteerPage,\n setActivePageValue: (page) => {\n webPage.underlyingPage = page;\n },\n autoFollowNewPage: runtimeOptions.autoFollowNewPage,\n newPageTimeout: runtimeOptions.newPageTimeout,\n debug,\n });\n}\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","createPuppeteerBrowserAdapter","browser","pageScope","page","handler","target","createPuppeteerBrowserPageManager","webPage","runtimeOptions","debug","BrowserPageManager"],"mappings":";;;IAAAA,oBAAoB,CAAC,GAAG,CAAC,UAASC;QACjC,IAAI,IAAIC,OAAOD,WACR,IAAGD,oBAAoB,CAAC,CAACC,YAAYC,QAAQ,CAACF,oBAAoB,CAAC,CAAC,UAASE,MACzEC,OAAO,cAAc,CAAC,UAASD,KAAK;YAAE,YAAY;YAAM,KAAKD,UAAU,CAACC,IAAI;QAAC;IAGzF;;;ICNAF,oBAAoB,CAAC,GAAG,CAACI,KAAKC,OAAUF,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAACC,KAAKC;;;ICClFL,oBAAoB,CAAC,GAAG,CAAC;QACxB,IAAG,AAAkB,eAAlB,OAAOM,UAA0BA,OAAO,WAAW,EACrDH,OAAO,cAAc,CAAC,UAASG,OAAO,WAAW,EAAE;YAAE,OAAO;QAAS;QAEtEH,OAAO,cAAc,CAAC,UAAS,cAAc;YAAE,OAAO;QAAK;IAC5D;;;;;;;;ACcA,MAAMI,gCAAgC,CACpCC,SACAC,YACyD;QACzD,OAAO,IAAMA,WAAW,WAAWD,QAAQ,KAAK;QAChD,SAAS;YACP,MAAME,OAAO,MAAMF,QAAQ,OAAO;YAClCC,WAAW,UAAUC;YACrB,OAAOA;QACT;QACA,cAAc,CAACA,OAASA,KAAK,QAAQ;QACrC,eAAe,CAACA,OAASD,WAAW,SAASC,SAAS;QACtD,cAAc,CAACA,OAASA,KAAK,YAAY;QACzC,WAAW,CAACA,OAASA,KAAK,KAAK;QAC/B,SAAS,CAACA,OAASA,KAAK,GAAG;QAC3B,WAAW,CAACC,UAAYH,QAAQ,EAAE,CAAC,iBAAiBG;QACpD,YAAY,CAACA,UAAYH,QAAQ,GAAG,CAAC,iBAAiBG;QACtD,gBAAgB,CAACC,SACfA,AAAkB,WAAlBA,OAAO,IAAI,MAAkBH,CAAAA,WAAW,cAAcG,WAAW,IAAG;QACtE,gBAAgB,CAACA,SAAWA,OAAO,IAAI;IACzC;AAEO,SAASC,kCAAkC,EAChDL,OAAO,EACPM,OAAO,EACPC,cAAc,EACdC,KAAK,EACLP,SAAS,EAOV;IACC,OAAO,IAAIQ,iCAAAA,kBAAkBA,CAAC;QAC5B,WAAW;QACX,SAASV,8BAA8BC,SAASC;QAChD,eAAe,IAAMK,QAAQ,cAAc;QAC3C,oBAAoB,CAACJ;YACnBI,QAAQ,cAAc,GAAGJ;QAC3B;QACA,mBAAmBK,eAAe,iBAAiB;QACnD,gBAAgBA,eAAe,cAAc;QAC7CC;IACF;AACF"}
|
|
@@ -26,36 +26,9 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
26
26
|
__webpack_require__.d(__webpack_exports__, {
|
|
27
27
|
createScopedPuppeteerBrowserAgent: ()=>createScopedPuppeteerBrowserAgent
|
|
28
28
|
});
|
|
29
|
-
const browser_agent_js_namespaceObject = require("../common/browser-agent.js");
|
|
30
|
-
const logger_namespaceObject = require("@midscene/shared/logger");
|
|
31
29
|
const external_browser_agent_js_namespaceObject = require("./browser-agent.js");
|
|
32
|
-
const external_browser_page_manager_js_namespaceObject = require("./browser-page-manager.js");
|
|
33
|
-
const debug = (0, logger_namespaceObject.getDebug)('puppeteer:browser-agent');
|
|
34
|
-
class ScopedPuppeteerBrowserAgent extends external_browser_agent_js_namespaceObject.PuppeteerBrowserAgent {
|
|
35
|
-
constructor(browser, initialPage, opts, pageOwnership){
|
|
36
|
-
const { autoFollowNewPage, newPageTimeout } = opts ?? {};
|
|
37
|
-
super(browser, initialPage, {
|
|
38
|
-
...opts,
|
|
39
|
-
autoFollowNewPage: false
|
|
40
|
-
});
|
|
41
|
-
this.pageManager.destroy();
|
|
42
|
-
const runtimeOptions = (0, browser_agent_js_namespaceObject.resolveBrowserAgentRuntimeOptions)({
|
|
43
|
-
agentName: 'PuppeteerBrowserAgent',
|
|
44
|
-
pageScope: 'browser',
|
|
45
|
-
autoFollowNewPage,
|
|
46
|
-
newPageTimeout
|
|
47
|
-
});
|
|
48
|
-
this.pageManager = (0, external_browser_page_manager_js_namespaceObject.createPuppeteerBrowserPageManager)({
|
|
49
|
-
browser,
|
|
50
|
-
webPage: this.interface,
|
|
51
|
-
runtimeOptions,
|
|
52
|
-
debug,
|
|
53
|
-
pageScope: pageOwnership
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
30
|
function createScopedPuppeteerBrowserAgent(browser, initialPage, opts, pageOwnership) {
|
|
58
|
-
return new
|
|
31
|
+
return new external_browser_agent_js_namespaceObject.PuppeteerBrowserAgent(browser, initialPage, opts, pageOwnership);
|
|
59
32
|
}
|
|
60
33
|
exports.createScopedPuppeteerBrowserAgent = __webpack_exports__.createScopedPuppeteerBrowserAgent;
|
|
61
34
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"puppeteer/scoped-browser-agent.js","sources":["webpack/runtime/define_property_getters","webpack/runtime/has_own_property","webpack/runtime/make_namespace_object","../../../src/puppeteer/scoped-browser-agent.ts"],"sourcesContent":["__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import
|
|
1
|
+
{"version":3,"file":"puppeteer/scoped-browser-agent.js","sources":["webpack/runtime/define_property_getters","webpack/runtime/has_own_property","webpack/runtime/make_namespace_object","../../../src/puppeteer/scoped-browser-agent.ts"],"sourcesContent":["__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import type {\n Browser as PuppeteerBrowser,\n Page as PuppeteerPage,\n} from 'puppeteer';\nimport {\n PuppeteerBrowserAgent,\n type PuppeteerBrowserAgentOpt,\n} from './browser-agent';\nimport type { PuppeteerPageOwnership } from './page-ownership';\n\nexport function createScopedPuppeteerBrowserAgent(\n browser: PuppeteerBrowser,\n initialPage: PuppeteerPage,\n opts: PuppeteerBrowserAgentOpt | undefined,\n pageOwnership: PuppeteerPageOwnership,\n): PuppeteerBrowserAgent {\n return new PuppeteerBrowserAgent(browser, initialPage, opts, pageOwnership);\n}\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","createScopedPuppeteerBrowserAgent","browser","initialPage","opts","pageOwnership","PuppeteerBrowserAgent"],"mappings":";;;IAAAA,oBAAoB,CAAC,GAAG,CAAC,UAASC;QACjC,IAAI,IAAIC,OAAOD,WACR,IAAGD,oBAAoB,CAAC,CAACC,YAAYC,QAAQ,CAACF,oBAAoB,CAAC,CAAC,UAASE,MACzEC,OAAO,cAAc,CAAC,UAASD,KAAK;YAAE,YAAY;YAAM,KAAKD,UAAU,CAACC,IAAI;QAAC;IAGzF;;;ICNAF,oBAAoB,CAAC,GAAG,CAACI,KAAKC,OAAUF,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAACC,KAAKC;;;ICClFL,oBAAoB,CAAC,GAAG,CAAC;QACxB,IAAG,AAAkB,eAAlB,OAAOM,UAA0BA,OAAO,WAAW,EACrDH,OAAO,cAAc,CAAC,UAASG,OAAO,WAAW,EAAE;YAAE,OAAO;QAAS;QAEtEH,OAAO,cAAc,CAAC,UAAS,cAAc;YAAE,OAAO;QAAK;IAC5D;;;;;;;;ACIO,SAASI,kCACdC,OAAyB,EACzBC,WAA0B,EAC1BC,IAA0C,EAC1CC,aAAqC;IAErC,OAAO,IAAIC,0CAAAA,qBAAqBA,CAACJ,SAASC,aAAaC,MAAMC;AAC/D"}
|
|
@@ -8,6 +8,8 @@ export type BrowserAgentAdapter<Page, NewPageEvent> = {
|
|
|
8
8
|
isPageClosed(page: Page): boolean;
|
|
9
9
|
isPageAllowed?(page: Page): boolean;
|
|
10
10
|
bringToFront(page: Page): Promise<void> | void;
|
|
11
|
+
pageTitle(page: Page): Promise<string> | string;
|
|
12
|
+
pageUrl(page: Page): string;
|
|
11
13
|
onNewPage(handler: (event: NewPageEvent) => void): void;
|
|
12
14
|
offNewPage(handler: (event: NewPageEvent) => void): void;
|
|
13
15
|
resolveNewPage(event: NewPageEvent): Page | Promise<Page | null> | null;
|
|
@@ -39,6 +41,17 @@ export declare abstract class WebAgentCore<InterfaceType extends AbstractInterfa
|
|
|
39
41
|
protected isRetryableContextError(error: unknown): boolean;
|
|
40
42
|
}
|
|
41
43
|
export declare function resolveBrowserAgentRuntimeOptions({ agentName, pageScope, forceSameTabNavigation, autoFollowNewPage, newPageTimeout, }: BrowserAgentRuntimeOptions): ResolvedBrowserAgentRuntimeOptions;
|
|
44
|
+
export type BrowserAgentPageSummary = {
|
|
45
|
+
index: number;
|
|
46
|
+
active: boolean;
|
|
47
|
+
title: string;
|
|
48
|
+
url: string;
|
|
49
|
+
};
|
|
50
|
+
export type BrowserAgentPageSelector = {
|
|
51
|
+
index?: number;
|
|
52
|
+
title?: string;
|
|
53
|
+
url?: string;
|
|
54
|
+
};
|
|
42
55
|
export declare class BrowserPageManager<Page, NewPageEvent> {
|
|
43
56
|
private readonly agentName;
|
|
44
57
|
private readonly adapter;
|
|
@@ -50,12 +63,18 @@ export declare class BrowserPageManager<Page, NewPageEvent> {
|
|
|
50
63
|
constructor(options: BrowserPageManagerOptions<Page, NewPageEvent>);
|
|
51
64
|
get activePage(): Page;
|
|
52
65
|
pages(): Page[] | Promise<Page[]>;
|
|
66
|
+
pageSummaries(): Promise<BrowserAgentPageSummary[]>;
|
|
67
|
+
pageSummaryByIndex(index: number): Promise<BrowserAgentPageSummary>;
|
|
53
68
|
newPage(): Promise<Page>;
|
|
54
69
|
setActivePage(page: Page): Promise<void>;
|
|
70
|
+
setActivePageBySelector(selector: BrowserAgentPageSelector): Promise<BrowserAgentPageSummary>;
|
|
55
71
|
waitForNewPage(action?: () => Promise<unknown> | unknown, opts?: {
|
|
56
72
|
timeout?: number;
|
|
57
73
|
}): Promise<Page>;
|
|
58
74
|
destroy(): void;
|
|
75
|
+
private openPages;
|
|
76
|
+
private tryPageSummary;
|
|
77
|
+
private pageSummary;
|
|
59
78
|
private followNewPage;
|
|
60
79
|
private isNewPageEvent;
|
|
61
80
|
private createNewPageWaiter;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-agent.d.ts","sourceRoot":"","sources":["../../../src/common/browser-agent.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"browser-agent.d.ts","sourceRoot":"","sources":["../../../src/common/browser-agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type DeviceAction } from '@midscene/core';
|
|
2
|
+
import type { BrowserPageManager } from './browser-agent';
|
|
3
|
+
export declare const createBrowserAgentPageActions: <Page, NewPageEvent>(options: {
|
|
4
|
+
getPageManager: () => BrowserPageManager<Page, NewPageEvent>;
|
|
5
|
+
}) => DeviceAction<any>[];
|
|
6
|
+
export declare const appendBrowserAgentPageActions: (customActions: DeviceAction<any>[] | undefined, browserActions: DeviceAction<any>[]) => DeviceAction<any, any>[];
|
|
7
|
+
//# sourceMappingURL=browser-page-actions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-page-actions.d.ts","sourceRoot":"","sources":["../../../src/common/browser-page-actions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAK,MAAM,gBAAgB,CAAC;AACtD,OAAO,KAAK,EAGV,kBAAkB,EACnB,MAAM,iBAAiB,CAAC;AAkGzB,eAAO,MAAM,6BAA6B,GAAI,IAAI,EAAE,YAAY,EAAE,SAAS;IACzE,cAAc,EAAE,MAAM,kBAAkB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;CAC9D,KAAG,YAAY,CAAC,GAAG,CAAC,EAyDpB,CAAC;AAEF,eAAO,MAAM,6BAA6B,GACxC,eAAe,YAAY,CAAC,GAAG,CAAC,EAAE,GAAG,SAAS,EAC9C,gBAAgB,YAAY,CAAC,GAAG,CAAC,EAAE,6BAWpC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-agent.d.ts","sourceRoot":"","sources":["../../../src/playwright/browser-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,YAAY,EAEb,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"browser-agent.d.ts","sourceRoot":"","sources":["../../../src/playwright/browser-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,YAAY,EAEb,MAAM,wBAAwB,CAAC;AAMhC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,sBAAsB,CAAC;AAE1E,OAAO,KAAK,EACV,cAAc,IAAI,wBAAwB,EAC1C,IAAI,IAAI,cAAc,EACvB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAEtD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAkBvE,MAAM,MAAM,yBAAyB,GAAG,IAAI,CAC1C,eAAe,EACf,wBAAwB,CACzB,GAAG;IACF,UAAU,CAAC,EAAE,2BAA2B,CAAC;IACzC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG,yBAAyB,GAAG;IACxE,WAAW,CAAC,EAAE,cAAc,CAAC;CAC9B,CAAC;AAEF,qBAAa,sBAAuB,SAAQ,YAAY,CAAC,iBAAiB,CAAC;WACzD,4BAA4B,IAAI,SAAS,6BAA6B,EAAE;IAOxF,QAAQ,CAAC,UAAU,CAAC,EAAE,2BAA2B,CAAC;IAElD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAG1B;gBAGA,OAAO,EAAE,wBAAwB,EACjC,WAAW,EAAE,cAAc,EAC3B,IAAI,CAAC,EAAE,yBAAyB;WAyDrB,MAAM,CACjB,OAAO,EAAE,wBAAwB,EACjC,IAAI,CAAC,EAAE,+BAA+B;IAQxC,IAAI,UAAU,mBAEb;IAED,KAAK;IAIC,OAAO;IAIP,aAAa,CAAC,IAAI,EAAE,cAAc;IAIlC,cAAc,CAClB,MAAM,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,EACzC,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;IAKvB,OAAO;CAId"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type BrowserPageManager, WebAgentCore } from '../common/browser-agent';
|
|
2
2
|
import type { WebPageAgentOpt } from '../web-element';
|
|
3
3
|
import type { Browser as PuppeteerBrowser, Page as PuppeteerPage, Target as PuppeteerTarget } from 'puppeteer';
|
|
4
|
+
import type { PuppeteerBrowserPageScope } from './browser-page-manager';
|
|
4
5
|
import { PuppeteerWebPage } from './page';
|
|
5
6
|
export type PuppeteerBrowserAgentOpt = Omit<WebPageAgentOpt, 'forceSameTabNavigation'> & {
|
|
6
7
|
autoFollowNewPage?: boolean;
|
|
@@ -10,8 +11,8 @@ export type PuppeteerBrowserAgentCreateOpt = PuppeteerBrowserAgentOpt & {
|
|
|
10
11
|
initialPage?: PuppeteerPage;
|
|
11
12
|
};
|
|
12
13
|
export declare class PuppeteerBrowserAgent extends WebAgentCore<PuppeteerWebPage> {
|
|
13
|
-
protected pageManager: BrowserPageManager<PuppeteerPage, PuppeteerTarget>;
|
|
14
|
-
constructor(browser: PuppeteerBrowser, initialPage: PuppeteerPage, opts?: PuppeteerBrowserAgentOpt);
|
|
14
|
+
protected readonly pageManager: BrowserPageManager<PuppeteerPage, PuppeteerTarget>;
|
|
15
|
+
constructor(browser: PuppeteerBrowser, initialPage: PuppeteerPage, opts?: PuppeteerBrowserAgentOpt, pageScope?: PuppeteerBrowserPageScope);
|
|
15
16
|
static create(browser: PuppeteerBrowser, opts?: PuppeteerBrowserAgentCreateOpt): Promise<PuppeteerBrowserAgent>;
|
|
16
17
|
get activePage(): PuppeteerPage;
|
|
17
18
|
pages(): PuppeteerPage[] | Promise<PuppeteerPage[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-agent.d.ts","sourceRoot":"","sources":["../../../src/puppeteer/browser-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,kBAAkB,EACvB,YAAY,EAEb,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"browser-agent.d.ts","sourceRoot":"","sources":["../../../src/puppeteer/browser-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,kBAAkB,EACvB,YAAY,EAEb,MAAM,wBAAwB,CAAC;AAMhC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAErD,OAAO,KAAK,EACV,OAAO,IAAI,gBAAgB,EAC3B,IAAI,IAAI,aAAa,EACrB,MAAM,IAAI,eAAe,EAC1B,MAAM,WAAW,CAAC;AAEnB,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAI1C,MAAM,MAAM,wBAAwB,GAAG,IAAI,CACzC,eAAe,EACf,wBAAwB,CACzB,GAAG;IACF,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG,wBAAwB,GAAG;IACtE,WAAW,CAAC,EAAE,aAAa,CAAC;CAC7B,CAAC;AAEF,qBAAa,qBAAsB,SAAQ,YAAY,CAAC,gBAAgB,CAAC;IACvE,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAChD,aAAa,EACb,eAAe,CAChB,CAAC;gBAGA,OAAO,EAAE,gBAAgB,EACzB,WAAW,EAAE,aAAa,EAC1B,IAAI,CAAC,EAAE,wBAAwB,EAC/B,SAAS,CAAC,EAAE,yBAAyB;WAoD1B,MAAM,CACjB,OAAO,EAAE,gBAAgB,EACzB,IAAI,CAAC,EAAE,8BAA8B;IASvC,IAAI,UAAU,kBAEb;IAED,KAAK;IAIC,OAAO;IAIP,aAAa,CAAC,IAAI,EAAE,aAAa;IAIjC,cAAc,CAClB,MAAM,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,EACzC,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;IAKvB,OAAO;CAId"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-page-manager.d.ts","sourceRoot":"","sources":["../../../src/puppeteer/browser-page-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,kBAAkB,EAClB,KAAK,kCAAkC,EACxC,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EACV,OAAO,IAAI,gBAAgB,EAC3B,IAAI,IAAI,aAAa,EACrB,MAAM,IAAI,eAAe,EAC1B,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAE/C,MAAM,WAAW,yBAAyB;IACxC,KAAK,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAClC,SAAS,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC;IACvC,aAAa,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC;CACjD;
|
|
1
|
+
{"version":3,"file":"browser-page-manager.d.ts","sourceRoot":"","sources":["../../../src/puppeteer/browser-page-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,kBAAkB,EAClB,KAAK,kCAAkC,EACxC,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EACV,OAAO,IAAI,gBAAgB,EAC3B,IAAI,IAAI,aAAa,EACrB,MAAM,IAAI,eAAe,EAC1B,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAE/C,MAAM,WAAW,yBAAyB;IACxC,KAAK,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAClC,SAAS,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC;IACvC,aAAa,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC;CACjD;AAwBD,wBAAgB,iCAAiC,CAAC,EAChD,OAAO,EACP,OAAO,EACP,cAAc,EACd,KAAK,EACL,SAAS,GACV,EAAE;IACD,OAAO,EAAE,gBAAgB,CAAC;IAC1B,OAAO,EAAE,gBAAgB,CAAC;IAC1B,cAAc,EAAE,kCAAkC,CAAC;IACnD,KAAK,EAAE,aAAa,CAAC;IACrB,SAAS,CAAC,EAAE,yBAAyB,CAAC;CACvC,sDAYA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scoped-browser-agent.d.ts","sourceRoot":"","sources":["../../../src/puppeteer/scoped-browser-agent.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"scoped-browser-agent.d.ts","sourceRoot":"","sources":["../../../src/puppeteer/scoped-browser-agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,IAAI,gBAAgB,EAC3B,IAAI,IAAI,aAAa,EACtB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,qBAAqB,EACrB,KAAK,wBAAwB,EAC9B,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE/D,wBAAgB,iCAAiC,CAC/C,OAAO,EAAE,gBAAgB,EACzB,WAAW,EAAE,aAAa,EAC1B,IAAI,EAAE,wBAAwB,GAAG,SAAS,EAC1C,aAAa,EAAE,sBAAsB,GACpC,qBAAqB,CAEvB"}
|
package/package.json
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"Browser use",
|
|
9
9
|
"Android use"
|
|
10
10
|
],
|
|
11
|
-
"version": "1.13.
|
|
11
|
+
"version": "1.13.4-beta-20260924030824.0",
|
|
12
12
|
"repository": "https://github.com/web-infra-dev/midscene",
|
|
13
13
|
"homepage": "https://midscenejs.com/",
|
|
14
14
|
"main": "./dist/lib/index.js",
|
|
@@ -117,9 +117,9 @@
|
|
|
117
117
|
"socket.io-client": "4.8.1",
|
|
118
118
|
"ws": "^8.18.1",
|
|
119
119
|
"zod": "^3.25.1",
|
|
120
|
-
"@midscene/
|
|
121
|
-
"@midscene/shared": "1.13.
|
|
122
|
-
"@midscene/
|
|
120
|
+
"@midscene/core": "1.13.4-beta-20260924030824.0",
|
|
121
|
+
"@midscene/shared": "1.13.4-beta-20260924030824.0",
|
|
122
|
+
"@midscene/playground": "1.13.4-beta-20260924030824.0"
|
|
123
123
|
},
|
|
124
124
|
"devDependencies": {
|
|
125
125
|
"@playwright/test": "^1.45.0",
|