@rpascene/web 0.30.8 → 0.30.9

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.
Files changed (40) hide show
  1. package/README.md +2 -2
  2. package/dist/es/bin.mjs +1 -1
  3. package/dist/es/bin.mjs.map +1 -1
  4. package/dist/es/bridge-mode/common.mjs +1 -1
  5. package/dist/es/bridge-mode/common.mjs.map +1 -1
  6. package/dist/es/chrome-extension/page.mjs +12 -12
  7. package/dist/es/chrome-extension/page.mjs.map +1 -1
  8. package/dist/es/playwright/ai-fixture.mjs +9 -9
  9. package/dist/es/playwright/ai-fixture.mjs.map +1 -1
  10. package/dist/es/playwright/reporter/index.mjs +6 -6
  11. package/dist/es/playwright/reporter/index.mjs.map +1 -1
  12. package/dist/es/puppeteer/agent-launcher.mjs +1 -1
  13. package/dist/es/puppeteer/agent-launcher.mjs.map +1 -1
  14. package/dist/es/puppeteer/base-page.mjs +5 -5
  15. package/dist/es/puppeteer/base-page.mjs.map +1 -1
  16. package/dist/es/web-element.mjs +2 -2
  17. package/dist/es/web-element.mjs.map +1 -1
  18. package/dist/lib/bin.js +1 -1
  19. package/dist/lib/bin.js.map +1 -1
  20. package/dist/lib/bridge-mode/common.js +1 -1
  21. package/dist/lib/bridge-mode/common.js.map +1 -1
  22. package/dist/lib/chrome-extension/page.js +12 -12
  23. package/dist/lib/chrome-extension/page.js.map +1 -1
  24. package/dist/lib/playwright/ai-fixture.js +11 -11
  25. package/dist/lib/playwright/ai-fixture.js.map +1 -1
  26. package/dist/lib/playwright/reporter/index.js +6 -6
  27. package/dist/lib/playwright/reporter/index.js.map +1 -1
  28. package/dist/lib/puppeteer/agent-launcher.js +1 -1
  29. package/dist/lib/puppeteer/agent-launcher.js.map +1 -1
  30. package/dist/lib/puppeteer/base-page.js +5 -5
  31. package/dist/lib/puppeteer/base-page.js.map +1 -1
  32. package/dist/lib/web-element.js +2 -2
  33. package/dist/lib/web-element.js.map +1 -1
  34. package/dist/types/bridge-mode/agent-cli-side.d.ts +1 -1
  35. package/dist/types/bridge-mode/common.d.ts +1 -1
  36. package/dist/types/playwright/ai-fixture.d.ts +1 -1
  37. package/dist/types/playwright/reporter/index.d.ts +4 -4
  38. package/dist/types/puppeteer/agent-launcher.d.ts +3 -3
  39. package/dist/types/web-element.d.ts +1 -1
  40. package/package.json +23 -15
@@ -1 +1 @@
1
- {"version":3,"file":"puppeteer\\agent-launcher.js","sources":["webpack://@rpascene/web/webpack/runtime/compat_get_default_export","webpack://@rpascene/web/webpack/runtime/define_property_getters","webpack://@rpascene/web/webpack/runtime/has_own_property","webpack://@rpascene/web/webpack/runtime/make_namespace_object","webpack://@rpascene/web/./src/puppeteer/agent-launcher.ts"],"sourcesContent":["// getDefaultExport function for compatibility with non-ESM modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};\n","__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 { readFileSync } from 'node:fs';\nimport { getDebug } from '@rpascene/shared/logger';\nimport { assert } from '@rpascene/shared/utils';\n\nimport { PuppeteerAgent } from '@/puppeteer/index';\nimport type { Cache, RpasceneYamlScriptWebEnv } from '@rpascene/core';\nimport { DEFAULT_WAIT_FOR_NETWORK_IDLE_TIMEOUT } from '@rpascene/shared/constants';\nimport puppeteer, { type Browser } from 'puppeteer';\n\nexport const defaultUA =\n 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36';\nexport const defaultViewportWidth = 1440;\nexport const defaultViewportHeight = 768;\nexport const defaultViewportScale = process.platform === 'darwin' ? 2 : 1;\nexport const defaultWaitForNetworkIdleTimeout =\n DEFAULT_WAIT_FOR_NETWORK_IDLE_TIMEOUT;\n\ninterface FreeFn {\n name: string;\n fn: () => void;\n}\n\nconst launcherDebug = getDebug('puppeteer:launcher');\n\nexport async function launchPuppeteerPage(\n target: RpasceneYamlScriptWebEnv,\n preference?: {\n headed?: boolean;\n keepWindow?: boolean;\n },\n browser?: Browser,\n) {\n assert(target.url, 'url is required');\n const freeFn: FreeFn[] = [];\n\n // prepare the environment\n const ua = target.userAgent || defaultUA;\n let width = defaultViewportWidth;\n let preferMaximizedWindow = true;\n if (target.viewportWidth) {\n preferMaximizedWindow = false;\n assert(\n typeof target.viewportWidth === 'number',\n 'viewportWidth must be a number',\n );\n width = Number.parseInt(target.viewportWidth as unknown as string, 10);\n assert(width > 0, `viewportWidth must be greater than 0, but got ${width}`);\n }\n let height = defaultViewportHeight;\n if (target.viewportHeight) {\n preferMaximizedWindow = false;\n assert(\n typeof target.viewportHeight === 'number',\n 'viewportHeight must be a number',\n );\n height = Number.parseInt(target.viewportHeight as unknown as string, 10);\n assert(\n height > 0,\n `viewportHeight must be greater than 0, but got ${height}`,\n );\n }\n let dpr = defaultViewportScale;\n if (target.viewportScale) {\n preferMaximizedWindow = false;\n assert(\n typeof target.viewportScale === 'number',\n 'viewportScale must be a number',\n );\n dpr = Number.parseInt(target.viewportScale as unknown as string, 10);\n assert(dpr > 0, `viewportScale must be greater than 0, but got ${dpr}`);\n }\n const viewportConfig = {\n width,\n height,\n deviceScaleFactor: dpr,\n };\n\n const headed = preference?.headed || preference?.keepWindow;\n\n // only maximize window in headed mode\n preferMaximizedWindow = preferMaximizedWindow && !!headed;\n\n // launch the browser\n if (headed && process.env.CI === '1') {\n console.warn(\n 'you are probably running headed mode in CI, this will usually fail.',\n );\n }\n // do not use 'no-sandbox' on windows https://www.perplexity.ai/search/how-to-solve-this-with-nodejs-dMHpdCypRa..JA8TkQzbeQ\n const isWindows = process.platform === 'win32';\n const args = [\n ...(isWindows ? [] : ['--no-sandbox', '--disable-setuid-sandbox']),\n '--disable-features=HttpsFirstBalancedModeAutoEnable',\n '--disable-features=PasswordLeakDetection',\n '--disable-save-password-bubble',\n `--user-agent=\"${ua}\"`,\n preferMaximizedWindow\n ? '--start-maximized'\n : `--window-size=${width},${height + 200}`, // add 200px for the address bar\n ];\n\n launcherDebug(\n 'launching browser with viewport, headed',\n headed,\n 'viewport',\n viewportConfig,\n 'args',\n args,\n 'preference',\n preference,\n );\n let browserInstance = browser;\n if (!browserInstance) {\n browserInstance = await puppeteer.launch({\n headless: !preference?.headed,\n defaultViewport: viewportConfig,\n args,\n acceptInsecureCerts: target.acceptInsecureCerts,\n });\n freeFn.push({\n name: 'puppeteer_browser',\n fn: () => {\n if (!preference?.keepWindow) {\n if (isWindows) {\n setTimeout(() => {\n browserInstance?.close();\n }, 800);\n } else {\n browserInstance?.close();\n }\n }\n },\n });\n }\n const page = await browserInstance.newPage();\n // await page.setUserAgent(ua);\n // await page.setViewport(viewportConfig);\n\n if (target.cookie) {\n const cookieFileContent = readFileSync(target.cookie, 'utf-8');\n await browserInstance.setCookie(...JSON.parse(cookieFileContent));\n }\n\n if (ua) {\n await page.setUserAgent(ua);\n }\n\n if (viewportConfig) {\n await page.setViewport(viewportConfig);\n }\n\n const waitForNetworkIdleTimeout =\n typeof target.waitForNetworkIdle?.timeout === 'number'\n ? target.waitForNetworkIdle.timeout\n : defaultWaitForNetworkIdleTimeout;\n\n try {\n launcherDebug('goto', target.url);\n await page.goto(target.url);\n if (waitForNetworkIdleTimeout > 0) {\n launcherDebug('waitForNetworkIdle', waitForNetworkIdleTimeout);\n await page.waitForNetworkIdle({\n timeout: waitForNetworkIdleTimeout,\n });\n }\n } catch (e) {\n if (\n typeof target.waitForNetworkIdle?.continueOnNetworkIdleError ===\n 'boolean' &&\n !target.waitForNetworkIdle?.continueOnNetworkIdleError\n ) {\n const newError = new Error(`failed to wait for network idle: ${e}`, {\n cause: e,\n });\n throw newError;\n }\n const newMessage = `failed to wait for network idle after ${waitForNetworkIdleTimeout}ms, but the script will continue.`;\n console.warn(newMessage);\n }\n\n return { page, freeFn };\n}\n\nexport async function puppeteerAgentForTarget(\n target: RpasceneYamlScriptWebEnv,\n preference?: {\n headed?: boolean;\n keepWindow?: boolean;\n testId?: string;\n cache?: Cache;\n },\n browser?: Browser,\n) {\n const { page, freeFn } = await launchPuppeteerPage(\n target,\n preference,\n browser,\n );\n\n // prepare Rpascene agent\n const agent = new PuppeteerAgent(page, {\n autoPrintReportMsg: false,\n testId: preference?.testId,\n cache: preference?.cache,\n aiActionContext: target.aiActionContext,\n forceSameTabNavigation:\n typeof target.forceSameTabNavigation !== 'undefined'\n ? target.forceSameTabNavigation\n : true, // true for default in yaml script\n });\n\n freeFn.push({\n name: 'rpascene_puppeteer_agent',\n fn: () => agent.destroy(),\n });\n\n return { agent, freeFn };\n}\n"],"names":["__webpack_require__","module","getter","definition","key","Object","obj","prop","Symbol","defaultUA","defaultViewportWidth","defaultViewportHeight","defaultViewportScale","process","defaultWaitForNetworkIdleTimeout","DEFAULT_WAIT_FOR_NETWORK_IDLE_TIMEOUT","launcherDebug","getDebug","launchPuppeteerPage","target","preference","browser","_target_waitForNetworkIdle","assert","freeFn","ua","width","preferMaximizedWindow","Number","height","dpr","viewportConfig","headed","console","isWindows","args","browserInstance","puppeteer","setTimeout","page","cookieFileContent","readFileSync","JSON","waitForNetworkIdleTimeout","e","_target_waitForNetworkIdle1","_target_waitForNetworkIdle2","newError","Error","newMessage","puppeteerAgentForTarget","agent","PuppeteerAgent"],"mappings":"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"}
1
+ {"version":3,"file":"puppeteer\\agent-launcher.js","sources":["webpack://@rpascene/web/webpack/runtime/compat_get_default_export","webpack://@rpascene/web/webpack/runtime/define_property_getters","webpack://@rpascene/web/webpack/runtime/has_own_property","webpack://@rpascene/web/webpack/runtime/make_namespace_object","webpack://@rpascene/web/./src/puppeteer/agent-launcher.ts"],"sourcesContent":["// getDefaultExport function for compatibility with non-ESM modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};\n","__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 { readFileSync } from 'node:fs';\nimport { getDebug } from '@rpascene/shared/logger';\nimport { assert } from '@rpascene/shared/utils';\n\nimport { PuppeteerAgent } from '@/puppeteer/index';\nimport type { Cache, MidsceneYamlScriptWebEnv } from '@rpascene/core';\nimport { DEFAULT_WAIT_FOR_NETWORK_IDLE_TIMEOUT } from '@rpascene/shared/constants';\nimport puppeteer, { type Browser } from 'puppeteer';\n\nexport const defaultUA =\n 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36';\nexport const defaultViewportWidth = 1440;\nexport const defaultViewportHeight = 768;\nexport const defaultViewportScale = process.platform === 'darwin' ? 2 : 1;\nexport const defaultWaitForNetworkIdleTimeout =\n DEFAULT_WAIT_FOR_NETWORK_IDLE_TIMEOUT;\n\ninterface FreeFn {\n name: string;\n fn: () => void;\n}\n\nconst launcherDebug = getDebug('puppeteer:launcher');\n\nexport async function launchPuppeteerPage(\n target: MidsceneYamlScriptWebEnv,\n preference?: {\n headed?: boolean;\n keepWindow?: boolean;\n },\n browser?: Browser,\n) {\n assert(target.url, 'url is required');\n const freeFn: FreeFn[] = [];\n\n // prepare the environment\n const ua = target.userAgent || defaultUA;\n let width = defaultViewportWidth;\n let preferMaximizedWindow = true;\n if (target.viewportWidth) {\n preferMaximizedWindow = false;\n assert(\n typeof target.viewportWidth === 'number',\n 'viewportWidth must be a number',\n );\n width = Number.parseInt(target.viewportWidth as unknown as string, 10);\n assert(width > 0, `viewportWidth must be greater than 0, but got ${width}`);\n }\n let height = defaultViewportHeight;\n if (target.viewportHeight) {\n preferMaximizedWindow = false;\n assert(\n typeof target.viewportHeight === 'number',\n 'viewportHeight must be a number',\n );\n height = Number.parseInt(target.viewportHeight as unknown as string, 10);\n assert(\n height > 0,\n `viewportHeight must be greater than 0, but got ${height}`,\n );\n }\n let dpr = defaultViewportScale;\n if (target.viewportScale) {\n preferMaximizedWindow = false;\n assert(\n typeof target.viewportScale === 'number',\n 'viewportScale must be a number',\n );\n dpr = Number.parseInt(target.viewportScale as unknown as string, 10);\n assert(dpr > 0, `viewportScale must be greater than 0, but got ${dpr}`);\n }\n const viewportConfig = {\n width,\n height,\n deviceScaleFactor: dpr,\n };\n\n const headed = preference?.headed || preference?.keepWindow;\n\n // only maximize window in headed mode\n preferMaximizedWindow = preferMaximizedWindow && !!headed;\n\n // launch the browser\n if (headed && process.env.CI === '1') {\n console.warn(\n 'you are probably running headed mode in CI, this will usually fail.',\n );\n }\n // do not use 'no-sandbox' on windows https://www.perplexity.ai/search/how-to-solve-this-with-nodejs-dMHpdCypRa..JA8TkQzbeQ\n const isWindows = process.platform === 'win32';\n const args = [\n ...(isWindows ? [] : ['--no-sandbox', '--disable-setuid-sandbox']),\n '--disable-features=HttpsFirstBalancedModeAutoEnable',\n '--disable-features=PasswordLeakDetection',\n '--disable-save-password-bubble',\n `--user-agent=\"${ua}\"`,\n preferMaximizedWindow\n ? '--start-maximized'\n : `--window-size=${width},${height + 200}`, // add 200px for the address bar\n ];\n\n launcherDebug(\n 'launching browser with viewport, headed',\n headed,\n 'viewport',\n viewportConfig,\n 'args',\n args,\n 'preference',\n preference,\n );\n let browserInstance = browser;\n if (!browserInstance) {\n browserInstance = await puppeteer.launch({\n headless: !preference?.headed,\n defaultViewport: viewportConfig,\n args,\n acceptInsecureCerts: target.acceptInsecureCerts,\n });\n freeFn.push({\n name: 'puppeteer_browser',\n fn: () => {\n if (!preference?.keepWindow) {\n if (isWindows) {\n setTimeout(() => {\n browserInstance?.close();\n }, 800);\n } else {\n browserInstance?.close();\n }\n }\n },\n });\n }\n const page = await browserInstance.newPage();\n // await page.setUserAgent(ua);\n // await page.setViewport(viewportConfig);\n\n if (target.cookie) {\n const cookieFileContent = readFileSync(target.cookie, 'utf-8');\n await browserInstance.setCookie(...JSON.parse(cookieFileContent));\n }\n\n if (ua) {\n await page.setUserAgent(ua);\n }\n\n if (viewportConfig) {\n await page.setViewport(viewportConfig);\n }\n\n const waitForNetworkIdleTimeout =\n typeof target.waitForNetworkIdle?.timeout === 'number'\n ? target.waitForNetworkIdle.timeout\n : defaultWaitForNetworkIdleTimeout;\n\n try {\n launcherDebug('goto', target.url);\n await page.goto(target.url);\n if (waitForNetworkIdleTimeout > 0) {\n launcherDebug('waitForNetworkIdle', waitForNetworkIdleTimeout);\n await page.waitForNetworkIdle({\n timeout: waitForNetworkIdleTimeout,\n });\n }\n } catch (e) {\n if (\n typeof target.waitForNetworkIdle?.continueOnNetworkIdleError ===\n 'boolean' &&\n !target.waitForNetworkIdle?.continueOnNetworkIdleError\n ) {\n const newError = new Error(`failed to wait for network idle: ${e}`, {\n cause: e,\n });\n throw newError;\n }\n const newMessage = `failed to wait for network idle after ${waitForNetworkIdleTimeout}ms, but the script will continue.`;\n console.warn(newMessage);\n }\n\n return { page, freeFn };\n}\n\nexport async function puppeteerAgentForTarget(\n target: MidsceneYamlScriptWebEnv,\n preference?: {\n headed?: boolean;\n keepWindow?: boolean;\n testId?: string;\n cache?: Cache;\n },\n browser?: Browser,\n) {\n const { page, freeFn } = await launchPuppeteerPage(\n target,\n preference,\n browser,\n );\n\n // prepare Midscene agent\n const agent = new PuppeteerAgent(page, {\n autoPrintReportMsg: false,\n testId: preference?.testId,\n cache: preference?.cache,\n aiActionContext: target.aiActionContext,\n forceSameTabNavigation:\n typeof target.forceSameTabNavigation !== 'undefined'\n ? target.forceSameTabNavigation\n : true, // true for default in yaml script\n });\n\n freeFn.push({\n name: 'midscene_puppeteer_agent',\n fn: () => agent.destroy(),\n });\n\n return { agent, freeFn };\n}\n"],"names":["__webpack_require__","module","getter","definition","key","Object","obj","prop","Symbol","defaultUA","defaultViewportWidth","defaultViewportHeight","defaultViewportScale","process","defaultWaitForNetworkIdleTimeout","DEFAULT_WAIT_FOR_NETWORK_IDLE_TIMEOUT","launcherDebug","getDebug","launchPuppeteerPage","target","preference","browser","_target_waitForNetworkIdle","assert","freeFn","ua","width","preferMaximizedWindow","Number","height","dpr","viewportConfig","headed","console","isWindows","args","browserInstance","puppeteer","setTimeout","page","cookieFileContent","readFileSync","JSON","waitForNetworkIdleTimeout","e","_target_waitForNetworkIdle1","_target_waitForNetworkIdle2","newError","Error","newMessage","puppeteerAgentForTarget","agent","PuppeteerAgent"],"mappings":"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"}
@@ -81,7 +81,7 @@ class Page {
81
81
  timeout: this.waitForNavigationTimeout
82
82
  });
83
83
  } catch (error) {
84
- console.warn('[rpascene:warning] Waiting for the "navigation" has timed out, but Rpascene will continue execution. Please check https://rpascenejs.com/faq.html#customize-the-network-timeout for more information on customizing the network timeout');
84
+ console.warn('[midscene:warning] Waiting for the "navigation" has timed out, but Midscene will continue execution. Please check https://midscenejs.com/faq.html#customize-the-network-timeout for more information on customizing the network timeout');
85
85
  }
86
86
  debugPage('waitForNavigation end');
87
87
  }
@@ -96,7 +96,7 @@ class Page {
96
96
  timeout: this.waitForNetworkIdleTimeout
97
97
  });
98
98
  } catch (error) {
99
- console.warn('[rpascene:warning] Waiting for the "network idle" has timed out, but Rpascene will continue execution. Please check https://rpascenejs.com/faq.html#customize-the-network-timeout for more information on customizing the network timeout');
99
+ console.warn('[midscene:warning] Waiting for the "network idle" has timed out, but Midscene will continue execution. Please check https://midscenejs.com/faq.html#customize-the-network-timeout for more information on customizing the network timeout');
100
100
  }
101
101
  }
102
102
  }
@@ -109,15 +109,15 @@ class Page {
109
109
  }
110
110
  async getXpathsById(id) {
111
111
  const elementInfosScriptContent = (0, node_namespaceObject.getElementInfosScriptContent)();
112
- return this.evaluateJavaScript(`${elementInfosScriptContent}rpascene_element_inspector.getXpathsById(${JSON.stringify(id)})`);
112
+ return this.evaluateJavaScript(`${elementInfosScriptContent}midscene_element_inspector.getXpathsById(${JSON.stringify(id)})`);
113
113
  }
114
114
  async getXpathsByPoint(point, isOrderSensitive) {
115
115
  const elementInfosScriptContent = (0, node_namespaceObject.getElementInfosScriptContent)();
116
- return this.evaluateJavaScript(`${elementInfosScriptContent}rpascene_element_inspector.getXpathsByPoint({left: ${point.left}, top: ${point.top}}, ${isOrderSensitive})`);
116
+ return this.evaluateJavaScript(`${elementInfosScriptContent}midscene_element_inspector.getXpathsByPoint({left: ${point.left}, top: ${point.top}}, ${isOrderSensitive})`);
117
117
  }
118
118
  async getElementInfoByXpath(xpath) {
119
119
  const elementInfosScriptContent = (0, node_namespaceObject.getElementInfosScriptContent)();
120
- return this.evaluateJavaScript(`${elementInfosScriptContent}rpascene_element_inspector.getElementInfoByXpath(${JSON.stringify(xpath)})`);
120
+ return this.evaluateJavaScript(`${elementInfosScriptContent}midscene_element_inspector.getElementInfoByXpath(${JSON.stringify(xpath)})`);
121
121
  }
122
122
  async cacheFeatureForRect(rect, opt) {
123
123
  const center = {
@@ -1 +1 @@
1
- {"version":3,"file":"puppeteer\\base-page.js","sources":["webpack://@rpascene/web/webpack/runtime/define_property_getters","webpack://@rpascene/web/webpack/runtime/has_own_property","webpack://@rpascene/web/webpack/runtime/make_namespace_object","webpack://@rpascene/web/./src/puppeteer/base-page.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 WebPageAgentOpt, WebPageContextParser } from '@/web-element';\nimport type {\n DeviceAction,\n ElementCacheFeature,\n ElementTreeNode,\n Point,\n Rect,\n Size,\n UIContext,\n} from '@rpascene/core';\nimport type { AbstractInterface } from '@rpascene/core/device';\nimport { sleep } from '@rpascene/core/utils';\nimport {\n DEFAULT_WAIT_FOR_NAVIGATION_TIMEOUT,\n DEFAULT_WAIT_FOR_NETWORK_IDLE_CONCURRENCY,\n DEFAULT_WAIT_FOR_NETWORK_IDLE_TIMEOUT,\n} from '@rpascene/shared/constants';\nimport type { ElementInfo } from '@rpascene/shared/extractor';\nimport { treeToList } from '@rpascene/shared/extractor';\nimport { createImgBase64ByFormat } from '@rpascene/shared/img';\nimport { type DebugFunction, getDebug } from '@rpascene/shared/logger';\nimport {\n getElementInfosScriptContent,\n getExtraReturnLogic,\n} from '@rpascene/shared/node';\nimport { assert } from '@rpascene/shared/utils';\nimport type { Page as PlaywrightPage } from 'playwright';\nimport type { Page as PuppeteerPage } from 'puppeteer';\nimport {\n type KeyInput,\n type MouseButton,\n commonWebActionsForWebPage,\n} from '../web-page';\n\nexport const debugPage = getDebug('web:page');\n\ntype WebElementCacheFeature = ElementCacheFeature & {\n xpaths?: string[];\n};\n\nconst sanitizeXpaths = (xpaths: unknown): string[] => {\n if (!Array.isArray(xpaths)) {\n return [];\n }\n\n return xpaths.filter(\n (xpath): xpath is string => typeof xpath === 'string' && xpath.length > 0,\n );\n};\n\nexport class Page<\n AgentType extends 'puppeteer' | 'playwright',\n InterfaceType extends PuppeteerPage | PlaywrightPage,\n> implements AbstractInterface {\n underlyingPage: InterfaceType;\n protected waitForNavigationTimeout: number;\n protected waitForNetworkIdleTimeout: number;\n private viewportSize?: Size;\n private onBeforeInvokeAction?: AbstractInterface['beforeInvokeAction'];\n private onAfterInvokeAction?: AbstractInterface['afterInvokeAction'];\n private customActions?: DeviceAction<any>[];\n\n interfaceType: AgentType;\n\n actionSpace(): DeviceAction[] {\n const defaultActions = commonWebActionsForWebPage(this);\n const customActions = this.customActions || [];\n return [...defaultActions, ...customActions];\n }\n\n private async evaluate<R>(\n pageFunction: string | ((...args: any[]) => R | Promise<R>),\n arg?: any,\n ): Promise<R> {\n let result: R;\n debugPage('evaluate function begin');\n if (this.interfaceType === 'puppeteer') {\n result = await (this.underlyingPage as PuppeteerPage).evaluate(\n pageFunction,\n arg,\n );\n } else {\n result = await (this.underlyingPage as PlaywrightPage).evaluate(\n pageFunction,\n arg,\n );\n }\n debugPage('evaluate function end');\n return result;\n }\n\n constructor(\n underlyingPage: InterfaceType,\n interfaceType: AgentType,\n opts?: WebPageAgentOpt,\n ) {\n this.underlyingPage = underlyingPage;\n this.interfaceType = interfaceType;\n this.waitForNavigationTimeout =\n opts?.waitForNavigationTimeout ?? DEFAULT_WAIT_FOR_NAVIGATION_TIMEOUT;\n this.waitForNetworkIdleTimeout =\n opts?.waitForNetworkIdleTimeout ?? DEFAULT_WAIT_FOR_NETWORK_IDLE_TIMEOUT;\n this.onBeforeInvokeAction = opts?.beforeInvokeAction;\n this.onAfterInvokeAction = opts?.afterInvokeAction;\n this.customActions = opts?.customActions;\n }\n\n async evaluateJavaScript<T = any>(script: string): Promise<T> {\n return this.evaluate(script);\n }\n\n async waitForNavigation() {\n if (this.waitForNavigationTimeout === 0) {\n debugPage('waitForNavigation timeout is 0, skip waiting');\n return;\n }\n\n // issue: https://github.com/puppeteer/puppeteer/issues/3323\n if (\n this.interfaceType === 'puppeteer' ||\n this.interfaceType === 'playwright'\n ) {\n debugPage('waitForNavigation begin');\n debugPage(`waitForNavigation timeout: ${this.waitForNavigationTimeout}`);\n try {\n await (this.underlyingPage as PuppeteerPage).waitForSelector('html', {\n timeout: this.waitForNavigationTimeout,\n });\n } catch (error) {\n // Ignore timeout error, continue execution\n console.warn(\n '[rpascene:warning] Waiting for the \"navigation\" has timed out, but Rpascene will continue execution. Please check https://rpascenejs.com/faq.html#customize-the-network-timeout for more information on customizing the network timeout',\n );\n }\n debugPage('waitForNavigation end');\n }\n }\n\n async waitForNetworkIdle(): Promise<void> {\n if (this.interfaceType === 'puppeteer') {\n if (this.waitForNetworkIdleTimeout === 0) {\n debugPage('waitForNetworkIdle timeout is 0, skip waiting');\n return;\n }\n\n try {\n await (this.underlyingPage as PuppeteerPage).waitForNetworkIdle({\n idleTime: 200,\n concurrency: DEFAULT_WAIT_FOR_NETWORK_IDLE_CONCURRENCY,\n timeout: this.waitForNetworkIdleTimeout,\n });\n } catch (error) {\n // Ignore timeout error, continue execution\n console.warn(\n '[rpascene:warning] Waiting for the \"network idle\" has timed out, but Rpascene will continue execution. Please check https://rpascenejs.com/faq.html#customize-the-network-timeout for more information on customizing the network timeout',\n );\n }\n } else {\n // TODO: implement playwright waitForNetworkIdle\n }\n }\n\n // @deprecated\n async getElementsInfo() {\n // const scripts = await getExtraReturnLogic();\n // const captureElementSnapshot = await this.evaluate(scripts);\n // return captureElementSnapshot as ElementInfo[];\n await this.waitForNavigation();\n debugPage('getElementsInfo begin');\n const tree = await this.getElementsNodeTree();\n debugPage('getElementsInfo end');\n return treeToList(tree);\n }\n\n async getXpathsById(id: string) {\n const elementInfosScriptContent = getElementInfosScriptContent();\n\n return this.evaluateJavaScript(\n `${elementInfosScriptContent}rpascene_element_inspector.getXpathsById(${JSON.stringify(id)})`,\n );\n }\n\n async getXpathsByPoint(point: Point, isOrderSensitive: boolean) {\n const elementInfosScriptContent = getElementInfosScriptContent();\n\n return this.evaluateJavaScript(\n `${elementInfosScriptContent}rpascene_element_inspector.getXpathsByPoint({left: ${point.left}, top: ${point.top}}, ${isOrderSensitive})`,\n );\n }\n\n async getElementInfoByXpath(xpath: string) {\n const elementInfosScriptContent = getElementInfosScriptContent();\n\n return this.evaluateJavaScript(\n `${elementInfosScriptContent}rpascene_element_inspector.getElementInfoByXpath(${JSON.stringify(xpath)})`,\n );\n }\n\n async cacheFeatureForRect(\n rect: Rect,\n opt?: { _orderSensitive: boolean },\n ): Promise<ElementCacheFeature> {\n const center: Point = {\n left: Math.floor(rect.left + rect.width / 2),\n top: Math.floor(rect.top + rect.height / 2),\n };\n\n try {\n const orderSensitive = opt?._orderSensitive ?? false;\n const xpaths = await this.getXpathsByPoint(center, orderSensitive);\n const sanitized = sanitizeXpaths(xpaths);\n if (!sanitized.length) {\n debugPage('cacheFeatureForRect: no xpath found at rect %o', rect);\n }\n return {\n xpaths: sanitized,\n };\n } catch (error) {\n debugPage('cacheFeatureForRect failed: %s', error);\n return {\n xpaths: [],\n };\n }\n }\n\n async rectMatchesCacheFeature(feature: ElementCacheFeature): Promise<Rect> {\n const webFeature = feature as WebElementCacheFeature;\n const xpaths = sanitizeXpaths(webFeature.xpaths);\n\n for (const xpath of xpaths) {\n try {\n const elementInfo = await this.getElementInfoByXpath(xpath);\n if (elementInfo?.rect) {\n const matchedRect: Rect = {\n left: elementInfo.rect.left,\n top: elementInfo.rect.top,\n width: elementInfo.rect.width,\n height: elementInfo.rect.height,\n };\n\n if (this.viewportSize?.dpr) {\n matchedRect.dpr = this.viewportSize.dpr;\n }\n\n return matchedRect;\n }\n } catch (error) {\n debugPage(\n 'rectMatchesCacheFeature failed for xpath %s: %s',\n xpath,\n error,\n );\n }\n }\n\n throw new Error(\n 'No matching element rect found for the provided cache feature',\n );\n }\n\n async getElementsNodeTree() {\n // ref: packages/web-integration/src/playwright/ai-fixture.ts popup logic\n // During test execution, a new page might be opened through a connection, and the page remains confined to the same page instance.\n // The page may go through opening, closing, and reopening; if the page is closed, evaluate may return undefined, which can lead to errors.\n await this.waitForNavigation();\n\n // 先注入脚本\n const scriptContent = getElementInfosScriptContent()\n const frames = (this.underlyingPage as PuppeteerPage).frames();\n for (let frame of frames) {\n await frame.evaluate(scriptContent);\n }\n\n // 执行脚本\n const scripts = await getExtraReturnLogic(true);\n assert(scripts, 'scripts should be set before writing report in browser');\n const startTime = Date.now();\n const captureElementSnapshot: any = await this.evaluate(scripts);\n const endTime = Date.now();\n debugPage(`getElementsNodeTree end, cost: ${endTime - startTime}ms`);\n const sizeInfo: Size = await this.evaluate(() => {\n return {\n width: document.documentElement.clientWidth,\n height: document.documentElement.clientHeight,\n dpr: window.devicePixelRatio,\n };\n });\n this.viewportSize = sizeInfo;\n return captureElementSnapshot as ElementTreeNode<ElementInfo>;\n }\n\n async size(): Promise<Size> {\n // if (this.viewportSize) return this.viewportSize;\n const sizeInfo: Size = await this.evaluate(() => {\n return {\n width: document.documentElement.clientWidth,\n height: document.documentElement.clientHeight,\n dpr: window.devicePixelRatio,\n };\n });\n this.viewportSize = sizeInfo;\n return sizeInfo;\n }\n\n async screenshotBase64(): Promise<string> {\n const imgType = 'jpeg';\n const quality = 90;\n await this.waitForNavigation();\n const startTime = Date.now();\n debugPage('screenshotBase64 begin');\n\n let base64: string;\n if (this.interfaceType === 'puppeteer') {\n const result = await (this.underlyingPage as PuppeteerPage).screenshot({\n type: imgType,\n quality,\n encoding: 'base64',\n });\n base64 = createImgBase64ByFormat(imgType, result);\n } else if (this.interfaceType === 'playwright') {\n const buffer = await (this.underlyingPage as PlaywrightPage).screenshot({\n type: imgType,\n quality,\n timeout: 10 * 1000,\n });\n base64 = createImgBase64ByFormat(imgType, buffer.toString('base64'));\n } else {\n throw new Error('Unsupported page type for screenshot');\n }\n const endTime = Date.now();\n debugPage(`screenshotBase64 end, cost: ${endTime - startTime}ms`);\n return base64;\n }\n\n async url(): Promise<string> {\n return this.underlyingPage.url();\n }\n\n describe(): string {\n const url = this.underlyingPage.url();\n return url || '';\n }\n\n get mouse() {\n return {\n click: async (\n x: number,\n y: number,\n options?: { button?: MouseButton; count?: number },\n ) => {\n await this.mouse.move(x, y);\n const { button = 'left', count = 1 } = options || {};\n debugPage(`mouse click ${x}, ${y}, ${button}, ${count}`);\n\n if (count === 2 && this.interfaceType === 'playwright') {\n await (this.underlyingPage as PlaywrightPage).mouse.dblclick(x, y, {\n button,\n });\n } else {\n if (this.interfaceType === 'puppeteer') {\n if (button === 'left' && count === 1) {\n await (this.underlyingPage as PuppeteerPage).mouse.click(x, y);\n } else {\n await (this.underlyingPage as PuppeteerPage).mouse.click(x, y, {\n button,\n count,\n });\n }\n } else if (this.interfaceType === 'playwright') {\n (this.underlyingPage as PlaywrightPage).mouse.click(x, y, {\n button,\n clickCount: count,\n });\n }\n }\n },\n wheel: async (deltaX: number, deltaY: number) => {\n debugPage(`mouse wheel ${deltaX}, ${deltaY}`);\n if (this.interfaceType === 'puppeteer') {\n await (this.underlyingPage as PuppeteerPage).mouse.wheel({\n deltaX,\n deltaY,\n });\n } else if (this.interfaceType === 'playwright') {\n await (this.underlyingPage as PlaywrightPage).mouse.wheel(\n deltaX,\n deltaY,\n );\n }\n },\n move: async (x: number, y: number) => {\n this.everMoved = true;\n debugPage(`mouse move to ${x}, ${y}`);\n return this.underlyingPage.mouse.move(x, y);\n },\n drag: async (\n from: { x: number; y: number },\n to: { x: number; y: number },\n ) => {\n debugPage(\n `begin mouse drag from ${from.x}, ${from.y} to ${to.x}, ${to.y}`,\n );\n await (this.underlyingPage as PlaywrightPage).mouse.move(\n from.x,\n from.y,\n );\n await sleep(200);\n await (this.underlyingPage as PlaywrightPage).mouse.down();\n await sleep(300);\n await (this.underlyingPage as PlaywrightPage).mouse.move(to.x, to.y);\n await sleep(500);\n await (this.underlyingPage as PlaywrightPage).mouse.up();\n await sleep(200);\n debugPage(\n `end mouse drag from ${from.x}, ${from.y} to ${to.x}, ${to.y}`,\n );\n },\n };\n }\n\n get keyboard() {\n return {\n type: async (text: string) => {\n debugPage(`keyboard type ${text}`);\n return this.underlyingPage.keyboard.type(text, { delay: 80 });\n },\n press: async (\n action:\n | { key: KeyInput; command?: string }\n | { key: KeyInput; command?: string }[],\n ) => {\n const keys = Array.isArray(action) ? action : [action];\n debugPage('keyboard press', keys);\n for (const k of keys) {\n const commands = k.command ? [k.command] : [];\n await this.underlyingPage.keyboard.down(k.key, { commands });\n }\n for (const k of [...keys].reverse()) {\n await this.underlyingPage.keyboard.up(k.key);\n }\n },\n down: async (key: KeyInput) => {\n debugPage(`keyboard down ${key}`);\n return this.underlyingPage.keyboard.down(key);\n },\n up: async (key: KeyInput) => {\n debugPage(`keyboard up ${key}`);\n return this.underlyingPage.keyboard.up(key);\n },\n };\n }\n\n async clearInput(element: ElementInfo): Promise<void> {\n if (!element) {\n console.warn('No element to clear input');\n return;\n }\n\n const backspace = async () => {\n await sleep(100);\n await this.keyboard.press([{ key: 'Backspace' }]);\n };\n\n const isMac = process.platform === 'darwin';\n debugPage('clearInput begin');\n if (isMac) {\n if (this.interfaceType === 'puppeteer') {\n // https://github.com/segment-boneyard/nightmare/issues/810#issuecomment-452669866\n await this.mouse.click(element.center[0], element.center[1], {\n count: 3,\n });\n await backspace();\n }\n\n await this.mouse.click(element.center[0], element.center[1]);\n await this.underlyingPage.keyboard.down('Meta');\n await this.underlyingPage.keyboard.press('a');\n await this.underlyingPage.keyboard.up('Meta');\n await backspace();\n } else {\n await this.mouse.click(element.center[0], element.center[1]);\n await this.underlyingPage.keyboard.down('Control');\n await this.underlyingPage.keyboard.press('a');\n await this.underlyingPage.keyboard.up('Control');\n await backspace();\n }\n debugPage('clearInput end');\n }\n\n private everMoved = false;\n private async moveToPointBeforeScroll(point?: Point): Promise<void> {\n if (point) {\n await this.mouse.move(point.left, point.top);\n } else if (!this.everMoved) {\n // If the mouse has never moved, move it to the center of the page\n const size = await this.size();\n const targetX = Math.floor(size.width / 2);\n const targetY = Math.floor(size.height / 2);\n await this.mouse.move(targetX, targetY);\n }\n }\n\n async scrollUntilTop(startingPoint?: Point): Promise<void> {\n await this.moveToPointBeforeScroll(startingPoint);\n return this.mouse.wheel(0, -9999999);\n }\n\n async scrollUntilBottom(startingPoint?: Point): Promise<void> {\n await this.moveToPointBeforeScroll(startingPoint);\n return this.mouse.wheel(0, 9999999);\n }\n\n async scrollUntilLeft(startingPoint?: Point): Promise<void> {\n await this.moveToPointBeforeScroll(startingPoint);\n return this.mouse.wheel(-9999999, 0);\n }\n\n async scrollUntilRight(startingPoint?: Point): Promise<void> {\n await this.moveToPointBeforeScroll(startingPoint);\n return this.mouse.wheel(9999999, 0);\n }\n\n async scrollUp(distance?: number, startingPoint?: Point): Promise<void> {\n const innerHeight = await this.evaluate(() => window.innerHeight);\n const scrollDistance = distance || innerHeight * 0.7;\n await this.moveToPointBeforeScroll(startingPoint);\n return this.mouse.wheel(0, -scrollDistance);\n }\n\n async scrollDown(distance?: number, startingPoint?: Point): Promise<void> {\n const innerHeight = await this.evaluate(() => window.innerHeight);\n const scrollDistance = distance || innerHeight * 0.7;\n await this.moveToPointBeforeScroll(startingPoint);\n return this.mouse.wheel(0, scrollDistance);\n }\n\n async scrollLeft(distance?: number, startingPoint?: Point): Promise<void> {\n const innerWidth = await this.evaluate(() => window.innerWidth);\n const scrollDistance = distance || innerWidth * 0.7;\n await this.moveToPointBeforeScroll(startingPoint);\n return this.mouse.wheel(-scrollDistance, 0);\n }\n\n async scrollRight(distance?: number, startingPoint?: Point): Promise<void> {\n const innerWidth = await this.evaluate(() => window.innerWidth);\n const scrollDistance = distance || innerWidth * 0.7;\n await this.moveToPointBeforeScroll(startingPoint);\n return this.mouse.wheel(scrollDistance, 0);\n }\n\n async navigate(url: string): Promise<void> {\n debugPage(`navigate to ${url}`);\n if (this.interfaceType === 'puppeteer') {\n await (this.underlyingPage as PuppeteerPage).goto(url);\n } else if (this.interfaceType === 'playwright') {\n await (this.underlyingPage as PlaywrightPage).goto(url);\n } else {\n throw new Error('Unsupported page type for navigate');\n }\n }\n\n async beforeInvokeAction(name: string, param: any): Promise<void> {\n await Promise.all([this.waitForNavigation(), this.waitForNetworkIdle()]);\n if (this.onBeforeInvokeAction) {\n await this.onBeforeInvokeAction(name, param);\n }\n }\n\n async afterInvokeAction(name: string, param: any): Promise<void> {\n await Promise.all([this.waitForNavigation(), this.waitForNetworkIdle()]);\n if (this.onAfterInvokeAction) {\n await this.onAfterInvokeAction(name, param);\n }\n }\n\n async destroy(): Promise<void> { }\n\n async getContext(): Promise<UIContext> {\n return await WebPageContextParser(this, {});\n }\n async swipe(\n from: { x: number; y: number },\n to: { x: number; y: number },\n duration?: number,\n ) {\n const LONG_PRESS_THRESHOLD = 500;\n const MIN_PRESS_THRESHOLD = 150;\n duration = duration || 100;\n if (duration < MIN_PRESS_THRESHOLD) {\n duration = MIN_PRESS_THRESHOLD;\n }\n if (duration > LONG_PRESS_THRESHOLD) {\n duration = LONG_PRESS_THRESHOLD;\n }\n debugPage(\n `mouse swipe from ${from.x}, ${from.y} to ${to.x}, ${to.y} with duration ${duration}ms`,\n );\n\n if (this.interfaceType === 'puppeteer') {\n const page = this.underlyingPage as PuppeteerPage;\n await page.mouse.move(from.x, from.y);\n await page.mouse.down({ button: 'left' });\n\n const steps = 30;\n const delay = duration / steps;\n for (let i = 1; i <= steps; i++) {\n const x = from.x + (to.x - from.x) * (i / steps);\n const y = from.y + (to.y - from.y) * (i / steps);\n await page.mouse.move(x, y);\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n\n await page.mouse.up({ button: 'left' });\n } else if (this.interfaceType === 'playwright') {\n const page = this.underlyingPage as PlaywrightPage;\n await page.mouse.move(from.x, from.y);\n await page.mouse.down();\n\n const steps = 30;\n const delay = duration / steps;\n for (let i = 1; i <= steps; i++) {\n const x = from.x + (to.x - from.x) * (i / steps);\n const y = from.y + (to.y - from.y) * (i / steps);\n await page.mouse.move(x, y);\n await page.waitForTimeout(delay);\n }\n\n await page.mouse.up({ button: 'left' });\n }\n }\n async longPress(x: number, y: number, duration?: number) {\n duration = duration || 500;\n const LONG_PRESS_THRESHOLD = 600;\n const MIN_PRESS_THRESHOLD = 300;\n if (duration > LONG_PRESS_THRESHOLD) {\n duration = LONG_PRESS_THRESHOLD;\n }\n if (duration < MIN_PRESS_THRESHOLD) {\n duration = MIN_PRESS_THRESHOLD;\n }\n debugPage(`mouse longPress at ${x}, ${y} for ${duration}ms`);\n if (this.interfaceType === 'puppeteer') {\n const page = this.underlyingPage as PuppeteerPage;\n await page.mouse.move(x, y);\n await page.mouse.down({ button: 'left' });\n await new Promise((res) => setTimeout(res, duration));\n await page.mouse.up({ button: 'left' });\n } else if (this.interfaceType === 'playwright') {\n const page = this.underlyingPage as PlaywrightPage;\n await page.mouse.move(x, y);\n await page.mouse.down({ button: 'left' });\n await page.waitForTimeout(duration);\n await page.mouse.up({ button: 'left' });\n }\n }\n}\n\nexport function forceClosePopup(\n page: PuppeteerPage | PlaywrightPage,\n debugProfile: DebugFunction,\n) {\n page.on('popup', async (popup) => {\n if (!popup) {\n console.warn('got a popup event, but the popup is not ready yet, skip');\n return;\n }\n const url = await (popup as PuppeteerPage).url();\n console.log(`Popup opened: ${url}`);\n if (!(popup as PuppeteerPage).isClosed()) {\n try {\n await (popup as PuppeteerPage).close(); // Close the newly opened TAB\n } catch (error) {\n debugProfile(`failed to close popup ${url}, error: ${error}`);\n }\n } else {\n debugProfile(`popup is already closed, skip close ${url}`);\n }\n\n if (!page.isClosed()) {\n try {\n await page.goto(url);\n } catch (error) {\n debugProfile(`failed to goto ${url}, error: ${error}`);\n }\n } else {\n debugProfile(`page is already closed, skip goto ${url}`);\n }\n });\n}\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","debugPage","getDebug","sanitizeXpaths","xpaths","Array","xpath","Page","defaultActions","commonWebActionsForWebPage","customActions","pageFunction","arg","result","script","error","console","DEFAULT_WAIT_FOR_NETWORK_IDLE_CONCURRENCY","tree","treeToList","id","elementInfosScriptContent","getElementInfosScriptContent","JSON","point","isOrderSensitive","rect","opt","center","Math","orderSensitive","sanitized","feature","webFeature","elementInfo","_this_viewportSize","matchedRect","Error","scriptContent","frames","frame","scripts","getExtraReturnLogic","assert","startTime","Date","captureElementSnapshot","endTime","sizeInfo","document","window","imgType","quality","base64","createImgBase64ByFormat","buffer","url","x","y","options","button","count","deltaX","deltaY","from","to","sleep","text","action","keys","k","commands","element","backspace","isMac","process","size","targetX","targetY","startingPoint","distance","innerHeight","scrollDistance","innerWidth","name","param","Promise","WebPageContextParser","duration","LONG_PRESS_THRESHOLD","MIN_PRESS_THRESHOLD","page","steps","delay","i","resolve","setTimeout","res","underlyingPage","interfaceType","opts","DEFAULT_WAIT_FOR_NAVIGATION_TIMEOUT","DEFAULT_WAIT_FOR_NETWORK_IDLE_TIMEOUT","forceClosePopup","debugProfile","popup"],"mappings":"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"}
1
+ {"version":3,"file":"puppeteer\\base-page.js","sources":["webpack://@rpascene/web/webpack/runtime/define_property_getters","webpack://@rpascene/web/webpack/runtime/has_own_property","webpack://@rpascene/web/webpack/runtime/make_namespace_object","webpack://@rpascene/web/./src/puppeteer/base-page.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 WebPageAgentOpt, WebPageContextParser } from '@/web-element';\nimport type {\n DeviceAction,\n ElementCacheFeature,\n ElementTreeNode,\n Point,\n Rect,\n Size,\n UIContext,\n} from '@rpascene/core';\nimport type { AbstractInterface } from '@rpascene/core/device';\nimport { sleep } from '@rpascene/core/utils';\nimport {\n DEFAULT_WAIT_FOR_NAVIGATION_TIMEOUT,\n DEFAULT_WAIT_FOR_NETWORK_IDLE_CONCURRENCY,\n DEFAULT_WAIT_FOR_NETWORK_IDLE_TIMEOUT,\n} from '@rpascene/shared/constants';\nimport type { ElementInfo } from '@rpascene/shared/extractor';\nimport { treeToList } from '@rpascene/shared/extractor';\nimport { createImgBase64ByFormat } from '@rpascene/shared/img';\nimport { type DebugFunction, getDebug } from '@rpascene/shared/logger';\nimport {\n getElementInfosScriptContent,\n getExtraReturnLogic,\n} from '@rpascene/shared/node';\nimport { assert } from '@rpascene/shared/utils';\nimport type { Page as PlaywrightPage } from 'playwright';\nimport type { Page as PuppeteerPage } from 'puppeteer';\nimport {\n type KeyInput,\n type MouseButton,\n commonWebActionsForWebPage,\n} from '../web-page';\n\nexport const debugPage = getDebug('web:page');\n\ntype WebElementCacheFeature = ElementCacheFeature & {\n xpaths?: string[];\n};\n\nconst sanitizeXpaths = (xpaths: unknown): string[] => {\n if (!Array.isArray(xpaths)) {\n return [];\n }\n\n return xpaths.filter(\n (xpath): xpath is string => typeof xpath === 'string' && xpath.length > 0,\n );\n};\n\nexport class Page<\n AgentType extends 'puppeteer' | 'playwright',\n InterfaceType extends PuppeteerPage | PlaywrightPage,\n> implements AbstractInterface {\n underlyingPage: InterfaceType;\n protected waitForNavigationTimeout: number;\n protected waitForNetworkIdleTimeout: number;\n private viewportSize?: Size;\n private onBeforeInvokeAction?: AbstractInterface['beforeInvokeAction'];\n private onAfterInvokeAction?: AbstractInterface['afterInvokeAction'];\n private customActions?: DeviceAction<any>[];\n\n interfaceType: AgentType;\n\n actionSpace(): DeviceAction[] {\n const defaultActions = commonWebActionsForWebPage(this);\n const customActions = this.customActions || [];\n return [...defaultActions, ...customActions];\n }\n\n private async evaluate<R>(\n pageFunction: string | ((...args: any[]) => R | Promise<R>),\n arg?: any,\n ): Promise<R> {\n let result: R;\n debugPage('evaluate function begin');\n if (this.interfaceType === 'puppeteer') {\n result = await (this.underlyingPage as PuppeteerPage).evaluate(\n pageFunction,\n arg,\n );\n } else {\n result = await (this.underlyingPage as PlaywrightPage).evaluate(\n pageFunction,\n arg,\n );\n }\n debugPage('evaluate function end');\n return result;\n }\n\n constructor(\n underlyingPage: InterfaceType,\n interfaceType: AgentType,\n opts?: WebPageAgentOpt,\n ) {\n this.underlyingPage = underlyingPage;\n this.interfaceType = interfaceType;\n this.waitForNavigationTimeout =\n opts?.waitForNavigationTimeout ?? DEFAULT_WAIT_FOR_NAVIGATION_TIMEOUT;\n this.waitForNetworkIdleTimeout =\n opts?.waitForNetworkIdleTimeout ?? DEFAULT_WAIT_FOR_NETWORK_IDLE_TIMEOUT;\n this.onBeforeInvokeAction = opts?.beforeInvokeAction;\n this.onAfterInvokeAction = opts?.afterInvokeAction;\n this.customActions = opts?.customActions;\n }\n\n async evaluateJavaScript<T = any>(script: string): Promise<T> {\n return this.evaluate(script);\n }\n\n async waitForNavigation() {\n if (this.waitForNavigationTimeout === 0) {\n debugPage('waitForNavigation timeout is 0, skip waiting');\n return;\n }\n\n // issue: https://github.com/puppeteer/puppeteer/issues/3323\n if (\n this.interfaceType === 'puppeteer' ||\n this.interfaceType === 'playwright'\n ) {\n debugPage('waitForNavigation begin');\n debugPage(`waitForNavigation timeout: ${this.waitForNavigationTimeout}`);\n try {\n await (this.underlyingPage as PuppeteerPage).waitForSelector('html', {\n timeout: this.waitForNavigationTimeout,\n });\n } catch (error) {\n // Ignore timeout error, continue execution\n console.warn(\n '[midscene:warning] Waiting for the \"navigation\" has timed out, but Midscene will continue execution. Please check https://midscenejs.com/faq.html#customize-the-network-timeout for more information on customizing the network timeout',\n );\n }\n debugPage('waitForNavigation end');\n }\n }\n\n async waitForNetworkIdle(): Promise<void> {\n if (this.interfaceType === 'puppeteer') {\n if (this.waitForNetworkIdleTimeout === 0) {\n debugPage('waitForNetworkIdle timeout is 0, skip waiting');\n return;\n }\n\n try {\n await (this.underlyingPage as PuppeteerPage).waitForNetworkIdle({\n idleTime: 200,\n concurrency: DEFAULT_WAIT_FOR_NETWORK_IDLE_CONCURRENCY,\n timeout: this.waitForNetworkIdleTimeout,\n });\n } catch (error) {\n // Ignore timeout error, continue execution\n console.warn(\n '[midscene:warning] Waiting for the \"network idle\" has timed out, but Midscene will continue execution. Please check https://midscenejs.com/faq.html#customize-the-network-timeout for more information on customizing the network timeout',\n );\n }\n } else {\n // TODO: implement playwright waitForNetworkIdle\n }\n }\n\n // @deprecated\n async getElementsInfo() {\n // const scripts = await getExtraReturnLogic();\n // const captureElementSnapshot = await this.evaluate(scripts);\n // return captureElementSnapshot as ElementInfo[];\n await this.waitForNavigation();\n debugPage('getElementsInfo begin');\n const tree = await this.getElementsNodeTree();\n debugPage('getElementsInfo end');\n return treeToList(tree);\n }\n\n async getXpathsById(id: string) {\n const elementInfosScriptContent = getElementInfosScriptContent();\n\n return this.evaluateJavaScript(\n `${elementInfosScriptContent}midscene_element_inspector.getXpathsById(${JSON.stringify(id)})`,\n );\n }\n\n async getXpathsByPoint(point: Point, isOrderSensitive: boolean) {\n const elementInfosScriptContent = getElementInfosScriptContent();\n\n return this.evaluateJavaScript(\n `${elementInfosScriptContent}midscene_element_inspector.getXpathsByPoint({left: ${point.left}, top: ${point.top}}, ${isOrderSensitive})`,\n );\n }\n\n async getElementInfoByXpath(xpath: string) {\n const elementInfosScriptContent = getElementInfosScriptContent();\n\n return this.evaluateJavaScript(\n `${elementInfosScriptContent}midscene_element_inspector.getElementInfoByXpath(${JSON.stringify(xpath)})`,\n );\n }\n\n async cacheFeatureForRect(\n rect: Rect,\n opt?: { _orderSensitive: boolean },\n ): Promise<ElementCacheFeature> {\n const center: Point = {\n left: Math.floor(rect.left + rect.width / 2),\n top: Math.floor(rect.top + rect.height / 2),\n };\n\n try {\n const orderSensitive = opt?._orderSensitive ?? false;\n const xpaths = await this.getXpathsByPoint(center, orderSensitive);\n const sanitized = sanitizeXpaths(xpaths);\n if (!sanitized.length) {\n debugPage('cacheFeatureForRect: no xpath found at rect %o', rect);\n }\n return {\n xpaths: sanitized,\n };\n } catch (error) {\n debugPage('cacheFeatureForRect failed: %s', error);\n return {\n xpaths: [],\n };\n }\n }\n\n async rectMatchesCacheFeature(feature: ElementCacheFeature): Promise<Rect> {\n const webFeature = feature as WebElementCacheFeature;\n const xpaths = sanitizeXpaths(webFeature.xpaths);\n\n for (const xpath of xpaths) {\n try {\n const elementInfo = await this.getElementInfoByXpath(xpath);\n if (elementInfo?.rect) {\n const matchedRect: Rect = {\n left: elementInfo.rect.left,\n top: elementInfo.rect.top,\n width: elementInfo.rect.width,\n height: elementInfo.rect.height,\n };\n\n if (this.viewportSize?.dpr) {\n matchedRect.dpr = this.viewportSize.dpr;\n }\n\n return matchedRect;\n }\n } catch (error) {\n debugPage(\n 'rectMatchesCacheFeature failed for xpath %s: %s',\n xpath,\n error,\n );\n }\n }\n\n throw new Error(\n 'No matching element rect found for the provided cache feature',\n );\n }\n\n async getElementsNodeTree() {\n // ref: packages/web-integration/src/playwright/ai-fixture.ts popup logic\n // During test execution, a new page might be opened through a connection, and the page remains confined to the same page instance.\n // The page may go through opening, closing, and reopening; if the page is closed, evaluate may return undefined, which can lead to errors.\n await this.waitForNavigation();\n\n // 先注入脚本\n const scriptContent = getElementInfosScriptContent()\n const frames = (this.underlyingPage as PuppeteerPage).frames();\n for (let frame of frames) {\n await frame.evaluate(scriptContent);\n }\n\n // 执行脚本\n const scripts = await getExtraReturnLogic(true);\n assert(scripts, 'scripts should be set before writing report in browser');\n const startTime = Date.now();\n const captureElementSnapshot: any = await this.evaluate(scripts);\n const endTime = Date.now();\n debugPage(`getElementsNodeTree end, cost: ${endTime - startTime}ms`);\n const sizeInfo: Size = await this.evaluate(() => {\n return {\n width: document.documentElement.clientWidth,\n height: document.documentElement.clientHeight,\n dpr: window.devicePixelRatio,\n };\n });\n this.viewportSize = sizeInfo;\n return captureElementSnapshot as ElementTreeNode<ElementInfo>;\n }\n\n async size(): Promise<Size> {\n // if (this.viewportSize) return this.viewportSize;\n const sizeInfo: Size = await this.evaluate(() => {\n return {\n width: document.documentElement.clientWidth,\n height: document.documentElement.clientHeight,\n dpr: window.devicePixelRatio,\n };\n });\n this.viewportSize = sizeInfo;\n return sizeInfo;\n }\n\n async screenshotBase64(): Promise<string> {\n const imgType = 'jpeg';\n const quality = 90;\n await this.waitForNavigation();\n const startTime = Date.now();\n debugPage('screenshotBase64 begin');\n\n let base64: string;\n if (this.interfaceType === 'puppeteer') {\n const result = await (this.underlyingPage as PuppeteerPage).screenshot({\n type: imgType,\n quality,\n encoding: 'base64',\n });\n base64 = createImgBase64ByFormat(imgType, result);\n } else if (this.interfaceType === 'playwright') {\n const buffer = await (this.underlyingPage as PlaywrightPage).screenshot({\n type: imgType,\n quality,\n timeout: 10 * 1000,\n });\n base64 = createImgBase64ByFormat(imgType, buffer.toString('base64'));\n } else {\n throw new Error('Unsupported page type for screenshot');\n }\n const endTime = Date.now();\n debugPage(`screenshotBase64 end, cost: ${endTime - startTime}ms`);\n return base64;\n }\n\n async url(): Promise<string> {\n return this.underlyingPage.url();\n }\n\n describe(): string {\n const url = this.underlyingPage.url();\n return url || '';\n }\n\n get mouse() {\n return {\n click: async (\n x: number,\n y: number,\n options?: { button?: MouseButton; count?: number },\n ) => {\n await this.mouse.move(x, y);\n const { button = 'left', count = 1 } = options || {};\n debugPage(`mouse click ${x}, ${y}, ${button}, ${count}`);\n\n if (count === 2 && this.interfaceType === 'playwright') {\n await (this.underlyingPage as PlaywrightPage).mouse.dblclick(x, y, {\n button,\n });\n } else {\n if (this.interfaceType === 'puppeteer') {\n if (button === 'left' && count === 1) {\n await (this.underlyingPage as PuppeteerPage).mouse.click(x, y);\n } else {\n await (this.underlyingPage as PuppeteerPage).mouse.click(x, y, {\n button,\n count,\n });\n }\n } else if (this.interfaceType === 'playwright') {\n (this.underlyingPage as PlaywrightPage).mouse.click(x, y, {\n button,\n clickCount: count,\n });\n }\n }\n },\n wheel: async (deltaX: number, deltaY: number) => {\n debugPage(`mouse wheel ${deltaX}, ${deltaY}`);\n if (this.interfaceType === 'puppeteer') {\n await (this.underlyingPage as PuppeteerPage).mouse.wheel({\n deltaX,\n deltaY,\n });\n } else if (this.interfaceType === 'playwright') {\n await (this.underlyingPage as PlaywrightPage).mouse.wheel(\n deltaX,\n deltaY,\n );\n }\n },\n move: async (x: number, y: number) => {\n this.everMoved = true;\n debugPage(`mouse move to ${x}, ${y}`);\n return this.underlyingPage.mouse.move(x, y);\n },\n drag: async (\n from: { x: number; y: number },\n to: { x: number; y: number },\n ) => {\n debugPage(\n `begin mouse drag from ${from.x}, ${from.y} to ${to.x}, ${to.y}`,\n );\n await (this.underlyingPage as PlaywrightPage).mouse.move(\n from.x,\n from.y,\n );\n await sleep(200);\n await (this.underlyingPage as PlaywrightPage).mouse.down();\n await sleep(300);\n await (this.underlyingPage as PlaywrightPage).mouse.move(to.x, to.y);\n await sleep(500);\n await (this.underlyingPage as PlaywrightPage).mouse.up();\n await sleep(200);\n debugPage(\n `end mouse drag from ${from.x}, ${from.y} to ${to.x}, ${to.y}`,\n );\n },\n };\n }\n\n get keyboard() {\n return {\n type: async (text: string) => {\n debugPage(`keyboard type ${text}`);\n return this.underlyingPage.keyboard.type(text, { delay: 80 });\n },\n press: async (\n action:\n | { key: KeyInput; command?: string }\n | { key: KeyInput; command?: string }[],\n ) => {\n const keys = Array.isArray(action) ? action : [action];\n debugPage('keyboard press', keys);\n for (const k of keys) {\n const commands = k.command ? [k.command] : [];\n await this.underlyingPage.keyboard.down(k.key, { commands });\n }\n for (const k of [...keys].reverse()) {\n await this.underlyingPage.keyboard.up(k.key);\n }\n },\n down: async (key: KeyInput) => {\n debugPage(`keyboard down ${key}`);\n return this.underlyingPage.keyboard.down(key);\n },\n up: async (key: KeyInput) => {\n debugPage(`keyboard up ${key}`);\n return this.underlyingPage.keyboard.up(key);\n },\n };\n }\n\n async clearInput(element: ElementInfo): Promise<void> {\n if (!element) {\n console.warn('No element to clear input');\n return;\n }\n\n const backspace = async () => {\n await sleep(100);\n await this.keyboard.press([{ key: 'Backspace' }]);\n };\n\n const isMac = process.platform === 'darwin';\n debugPage('clearInput begin');\n if (isMac) {\n if (this.interfaceType === 'puppeteer') {\n // https://github.com/segment-boneyard/nightmare/issues/810#issuecomment-452669866\n await this.mouse.click(element.center[0], element.center[1], {\n count: 3,\n });\n await backspace();\n }\n\n await this.mouse.click(element.center[0], element.center[1]);\n await this.underlyingPage.keyboard.down('Meta');\n await this.underlyingPage.keyboard.press('a');\n await this.underlyingPage.keyboard.up('Meta');\n await backspace();\n } else {\n await this.mouse.click(element.center[0], element.center[1]);\n await this.underlyingPage.keyboard.down('Control');\n await this.underlyingPage.keyboard.press('a');\n await this.underlyingPage.keyboard.up('Control');\n await backspace();\n }\n debugPage('clearInput end');\n }\n\n private everMoved = false;\n private async moveToPointBeforeScroll(point?: Point): Promise<void> {\n if (point) {\n await this.mouse.move(point.left, point.top);\n } else if (!this.everMoved) {\n // If the mouse has never moved, move it to the center of the page\n const size = await this.size();\n const targetX = Math.floor(size.width / 2);\n const targetY = Math.floor(size.height / 2);\n await this.mouse.move(targetX, targetY);\n }\n }\n\n async scrollUntilTop(startingPoint?: Point): Promise<void> {\n await this.moveToPointBeforeScroll(startingPoint);\n return this.mouse.wheel(0, -9999999);\n }\n\n async scrollUntilBottom(startingPoint?: Point): Promise<void> {\n await this.moveToPointBeforeScroll(startingPoint);\n return this.mouse.wheel(0, 9999999);\n }\n\n async scrollUntilLeft(startingPoint?: Point): Promise<void> {\n await this.moveToPointBeforeScroll(startingPoint);\n return this.mouse.wheel(-9999999, 0);\n }\n\n async scrollUntilRight(startingPoint?: Point): Promise<void> {\n await this.moveToPointBeforeScroll(startingPoint);\n return this.mouse.wheel(9999999, 0);\n }\n\n async scrollUp(distance?: number, startingPoint?: Point): Promise<void> {\n const innerHeight = await this.evaluate(() => window.innerHeight);\n const scrollDistance = distance || innerHeight * 0.7;\n await this.moveToPointBeforeScroll(startingPoint);\n return this.mouse.wheel(0, -scrollDistance);\n }\n\n async scrollDown(distance?: number, startingPoint?: Point): Promise<void> {\n const innerHeight = await this.evaluate(() => window.innerHeight);\n const scrollDistance = distance || innerHeight * 0.7;\n await this.moveToPointBeforeScroll(startingPoint);\n return this.mouse.wheel(0, scrollDistance);\n }\n\n async scrollLeft(distance?: number, startingPoint?: Point): Promise<void> {\n const innerWidth = await this.evaluate(() => window.innerWidth);\n const scrollDistance = distance || innerWidth * 0.7;\n await this.moveToPointBeforeScroll(startingPoint);\n return this.mouse.wheel(-scrollDistance, 0);\n }\n\n async scrollRight(distance?: number, startingPoint?: Point): Promise<void> {\n const innerWidth = await this.evaluate(() => window.innerWidth);\n const scrollDistance = distance || innerWidth * 0.7;\n await this.moveToPointBeforeScroll(startingPoint);\n return this.mouse.wheel(scrollDistance, 0);\n }\n\n async navigate(url: string): Promise<void> {\n debugPage(`navigate to ${url}`);\n if (this.interfaceType === 'puppeteer') {\n await (this.underlyingPage as PuppeteerPage).goto(url);\n } else if (this.interfaceType === 'playwright') {\n await (this.underlyingPage as PlaywrightPage).goto(url);\n } else {\n throw new Error('Unsupported page type for navigate');\n }\n }\n\n async beforeInvokeAction(name: string, param: any): Promise<void> {\n await Promise.all([this.waitForNavigation(), this.waitForNetworkIdle()]);\n if (this.onBeforeInvokeAction) {\n await this.onBeforeInvokeAction(name, param);\n }\n }\n\n async afterInvokeAction(name: string, param: any): Promise<void> {\n await Promise.all([this.waitForNavigation(), this.waitForNetworkIdle()]);\n if (this.onAfterInvokeAction) {\n await this.onAfterInvokeAction(name, param);\n }\n }\n\n async destroy(): Promise<void> { }\n\n async getContext(): Promise<UIContext> {\n return await WebPageContextParser(this, {});\n }\n async swipe(\n from: { x: number; y: number },\n to: { x: number; y: number },\n duration?: number,\n ) {\n const LONG_PRESS_THRESHOLD = 500;\n const MIN_PRESS_THRESHOLD = 150;\n duration = duration || 100;\n if (duration < MIN_PRESS_THRESHOLD) {\n duration = MIN_PRESS_THRESHOLD;\n }\n if (duration > LONG_PRESS_THRESHOLD) {\n duration = LONG_PRESS_THRESHOLD;\n }\n debugPage(\n `mouse swipe from ${from.x}, ${from.y} to ${to.x}, ${to.y} with duration ${duration}ms`,\n );\n\n if (this.interfaceType === 'puppeteer') {\n const page = this.underlyingPage as PuppeteerPage;\n await page.mouse.move(from.x, from.y);\n await page.mouse.down({ button: 'left' });\n\n const steps = 30;\n const delay = duration / steps;\n for (let i = 1; i <= steps; i++) {\n const x = from.x + (to.x - from.x) * (i / steps);\n const y = from.y + (to.y - from.y) * (i / steps);\n await page.mouse.move(x, y);\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n\n await page.mouse.up({ button: 'left' });\n } else if (this.interfaceType === 'playwright') {\n const page = this.underlyingPage as PlaywrightPage;\n await page.mouse.move(from.x, from.y);\n await page.mouse.down();\n\n const steps = 30;\n const delay = duration / steps;\n for (let i = 1; i <= steps; i++) {\n const x = from.x + (to.x - from.x) * (i / steps);\n const y = from.y + (to.y - from.y) * (i / steps);\n await page.mouse.move(x, y);\n await page.waitForTimeout(delay);\n }\n\n await page.mouse.up({ button: 'left' });\n }\n }\n async longPress(x: number, y: number, duration?: number) {\n duration = duration || 500;\n const LONG_PRESS_THRESHOLD = 600;\n const MIN_PRESS_THRESHOLD = 300;\n if (duration > LONG_PRESS_THRESHOLD) {\n duration = LONG_PRESS_THRESHOLD;\n }\n if (duration < MIN_PRESS_THRESHOLD) {\n duration = MIN_PRESS_THRESHOLD;\n }\n debugPage(`mouse longPress at ${x}, ${y} for ${duration}ms`);\n if (this.interfaceType === 'puppeteer') {\n const page = this.underlyingPage as PuppeteerPage;\n await page.mouse.move(x, y);\n await page.mouse.down({ button: 'left' });\n await new Promise((res) => setTimeout(res, duration));\n await page.mouse.up({ button: 'left' });\n } else if (this.interfaceType === 'playwright') {\n const page = this.underlyingPage as PlaywrightPage;\n await page.mouse.move(x, y);\n await page.mouse.down({ button: 'left' });\n await page.waitForTimeout(duration);\n await page.mouse.up({ button: 'left' });\n }\n }\n}\n\nexport function forceClosePopup(\n page: PuppeteerPage | PlaywrightPage,\n debugProfile: DebugFunction,\n) {\n page.on('popup', async (popup) => {\n if (!popup) {\n console.warn('got a popup event, but the popup is not ready yet, skip');\n return;\n }\n const url = await (popup as PuppeteerPage).url();\n console.log(`Popup opened: ${url}`);\n if (!(popup as PuppeteerPage).isClosed()) {\n try {\n await (popup as PuppeteerPage).close(); // Close the newly opened TAB\n } catch (error) {\n debugProfile(`failed to close popup ${url}, error: ${error}`);\n }\n } else {\n debugProfile(`popup is already closed, skip close ${url}`);\n }\n\n if (!page.isClosed()) {\n try {\n await page.goto(url);\n } catch (error) {\n debugProfile(`failed to goto ${url}, error: ${error}`);\n }\n } else {\n debugProfile(`page is already closed, skip goto ${url}`);\n }\n });\n}\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","debugPage","getDebug","sanitizeXpaths","xpaths","Array","xpath","Page","defaultActions","commonWebActionsForWebPage","customActions","pageFunction","arg","result","script","error","console","DEFAULT_WAIT_FOR_NETWORK_IDLE_CONCURRENCY","tree","treeToList","id","elementInfosScriptContent","getElementInfosScriptContent","JSON","point","isOrderSensitive","rect","opt","center","Math","orderSensitive","sanitized","feature","webFeature","elementInfo","_this_viewportSize","matchedRect","Error","scriptContent","frames","frame","scripts","getExtraReturnLogic","assert","startTime","Date","captureElementSnapshot","endTime","sizeInfo","document","window","imgType","quality","base64","createImgBase64ByFormat","buffer","url","x","y","options","button","count","deltaX","deltaY","from","to","sleep","text","action","keys","k","commands","element","backspace","isMac","process","size","targetX","targetY","startingPoint","distance","innerHeight","scrollDistance","innerWidth","name","param","Promise","WebPageContextParser","duration","LONG_PRESS_THRESHOLD","MIN_PRESS_THRESHOLD","page","steps","delay","i","resolve","setTimeout","res","underlyingPage","interfaceType","opts","DEFAULT_WAIT_FOR_NAVIGATION_TIMEOUT","DEFAULT_WAIT_FOR_NETWORK_IDLE_TIMEOUT","forceClosePopup","debugProfile","popup"],"mappings":"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"}
@@ -99,8 +99,8 @@ async function WebPageContextParser(page, _opt) {
99
99
  };
100
100
  }
101
101
  const limitOpenNewTabScript = `
102
- if (!window.__RPASCENE_NEW_TAB_INTERCEPTOR_INITIALIZED__) {
103
- window.__RPASCENE_NEW_TAB_INTERCEPTOR_INITIALIZED__ = true;
102
+ if (!window.__MIDSCENE_NEW_TAB_INTERCEPTOR_INITIALIZED__) {
103
+ window.__MIDSCENE_NEW_TAB_INTERCEPTOR_INITIALIZED__ = true;
104
104
 
105
105
  // Intercept the window.open method (only once)
106
106
  window.open = function(url) {
@@ -1 +1 @@
1
- {"version":3,"file":"web-element.js","sources":["webpack://@rpascene/web/webpack/runtime/define_property_getters","webpack://@rpascene/web/webpack/runtime/has_own_property","webpack://@rpascene/web/webpack/runtime/make_namespace_object","webpack://@rpascene/web/./src/web-element.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 AgentOpt,\n DeviceAction,\n Rect,\n UIContext,\n WebElementInfo,\n} from '@rpascene/core';\nimport type { AbstractInterface } from '@rpascene/core/device';\nimport { traverseTree } from '@rpascene/shared/extractor';\nimport { getDebug } from '@rpascene/shared/logger';\nimport { _keyDefinitions } from '@rpascene/shared/us-keyboard-layout';\n\nimport { commonContextParser } from '@rpascene/core/agent';\nimport type { NodeType } from '@rpascene/shared/constants';\nimport type ChromeExtensionProxyPage from './chrome-extension/page';\nimport type { PlaywrightWebPage } from './playwright';\nimport type { PuppeteerWebPage } from './puppeteer';\nimport type { StaticPage } from './static';\nexport type { WebElementInfo };\n\nexport type WebPageAgentOpt = AgentOpt & WebPageOpt;\nexport type WebPageOpt = {\n waitForNavigationTimeout?: number;\n waitForNetworkIdleTimeout?: number;\n forceSameTabNavigation?: boolean /* if limit the new tab to the current page, default true */;\n beforeInvokeAction?: () => Promise<void>;\n afterInvokeAction?: () => Promise<void>;\n customActions?: DeviceAction<any>[];\n};\n\nexport type WebPage =\n | PlaywrightWebPage\n | PuppeteerWebPage\n | StaticPage\n | ChromeExtensionProxyPage;\n\nexport class WebElementInfoImpl implements WebElementInfo {\n content: string;\n\n rect: Rect;\n\n center: [number, number];\n\n id: string;\n\n indexId: number;\n\n attributes: {\n nodeType: NodeType;\n [key: string]: string;\n };\n\n xpaths?: string[];\n\n isVisible: boolean;\n\n allPaths?: any;\n\n containerPaths?: any;\n\n constructor({\n content,\n rect,\n id,\n attributes,\n indexId,\n xpaths,\n isVisible,\n allPaths,\n containerPaths\n }: {\n content: string;\n rect: Rect;\n id: string;\n attributes: {\n nodeType: NodeType;\n [key: string]: string;\n };\n indexId: number;\n xpaths?: string[];\n isVisible: boolean;\n allPaths?: any;\n containerPaths?: any;\n }) {\n this.content = content;\n this.rect = rect;\n this.center = [\n Math.floor(rect.left + rect.width / 2),\n Math.floor(rect.top + rect.height / 2),\n ];\n this.id = id;\n this.attributes = attributes;\n this.indexId = indexId;\n this.xpaths = xpaths;\n this.isVisible = isVisible;\n this.allPaths = allPaths;\n this.containerPaths = containerPaths\n }\n}\n\nconst debug = getDebug('web:parse-context');\nexport async function WebPageContextParser(\n page: AbstractInterface,\n _opt: { uploadServerUrl?: string },\n): Promise<UIContext> {\n const basicContext = await commonContextParser(page, {\n uploadServerUrl: _opt.uploadServerUrl,\n });\n\n debug('will traverse element tree');\n const tree = (await page.getElementsNodeTree?.()) || {\n node: null,\n children: [],\n };\n const webTree = traverseTree(tree!, (elementInfo) => {\n const { rect, id, content, attributes, indexId, isVisible, allPaths, containerPaths } = elementInfo;\n return new WebElementInfoImpl({\n rect,\n id,\n content,\n attributes,\n indexId,\n isVisible,\n allPaths,\n containerPaths\n });\n });\n debug('traverse element tree end');\n\n return {\n ...basicContext,\n tree: webTree,\n };\n}\n\nexport const limitOpenNewTabScript = `\nif (!window.__RPASCENE_NEW_TAB_INTERCEPTOR_INITIALIZED__) {\n window.__RPASCENE_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`;\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","WebElementInfoImpl","content","rect","id","attributes","indexId","xpaths","isVisible","allPaths","containerPaths","Math","debug","getDebug","WebPageContextParser","page","_opt","basicContext","commonContextParser","tree","webTree","traverseTree","elementInfo","limitOpenNewTabScript"],"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;;;;;;;;;;;;;;;;;;;;;;AC8BO,MAAMI;IAwBX,YAAY,EACVC,OAAO,EACPC,IAAI,EACJC,EAAE,EACFC,UAAU,EACVC,OAAO,EACPC,MAAM,EACNC,SAAS,EACTC,QAAQ,EACRC,cAAc,EAcf,CAAE;QA9CH;QAEA;QAEA;QAEA;QAEA;QAEA;QAKA;QAEA;QAEA;QAEA;QA0BE,IAAI,CAAC,OAAO,GAAGR;QACf,IAAI,CAAC,IAAI,GAAGC;QACZ,IAAI,CAAC,MAAM,GAAG;YACZQ,KAAK,KAAK,CAACR,KAAK,IAAI,GAAGA,KAAK,KAAK,GAAG;YACpCQ,KAAK,KAAK,CAACR,KAAK,GAAG,GAAGA,KAAK,MAAM,GAAG;SACrC;QACD,IAAI,CAAC,EAAE,GAAGC;QACV,IAAI,CAAC,UAAU,GAAGC;QAClB,IAAI,CAAC,OAAO,GAAGC;QACf,IAAI,CAAC,MAAM,GAAGC;QACd,IAAI,CAAC,SAAS,GAAGC;QACjB,IAAI,CAAC,QAAQ,GAAGC;QAChB,IAAI,CAAC,cAAc,GAAGC;IACxB;AACF;AAEA,MAAME,QAAQC,AAAAA,IAAAA,uBAAAA,QAAAA,AAAAA,EAAS;AAChB,eAAeC,qBACpBC,IAAuB,EACvBC,IAAkC;QAOdD;IALpB,MAAME,eAAe,MAAMC,AAAAA,IAAAA,sBAAAA,mBAAAA,AAAAA,EAAoBH,MAAM;QACnD,iBAAiBC,KAAK,eAAe;IACvC;IAEAJ,MAAM;IACN,MAAMO,OAAQ,eAAMJ,CAAAA,4BAAAA,KAAK,mBAAmB,AAAD,IAAvBA,KAAAA,IAAAA,0BAAAA,IAAAA,CAAAA,KAAI,KAA6B;QACnD,MAAM;QACN,UAAU,EAAE;IACd;IACA,MAAMK,UAAUC,AAAAA,IAAAA,0BAAAA,YAAAA,AAAAA,EAAaF,MAAO,CAACG;QACnC,MAAM,EAAEnB,IAAI,EAAEC,EAAE,EAAEF,OAAO,EAAEG,UAAU,EAAEC,OAAO,EAAEE,SAAS,EAAEC,QAAQ,EAAEC,cAAc,EAAE,GAAGY;QACxF,OAAO,IAAIrB,mBAAmB;YAC5BE;YACAC;YACAF;YACAG;YACAC;YACAE;YACAC;YACAC;QACF;IACF;IACAE,MAAM;IAEN,OAAO;QACL,GAAGK,YAAY;QACf,MAAMG;IACR;AACF;AAEO,MAAMG,wBAAwB,CAAC;;;;;;;;;;;;;;;;;;;;;;AAsBtC,CAAC"}
1
+ {"version":3,"file":"web-element.js","sources":["webpack://@rpascene/web/webpack/runtime/define_property_getters","webpack://@rpascene/web/webpack/runtime/has_own_property","webpack://@rpascene/web/webpack/runtime/make_namespace_object","webpack://@rpascene/web/./src/web-element.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 AgentOpt,\n DeviceAction,\n Rect,\n UIContext,\n WebElementInfo,\n} from '@rpascene/core';\nimport type { AbstractInterface } from '@rpascene/core/device';\nimport { traverseTree } from '@rpascene/shared/extractor';\nimport { getDebug } from '@rpascene/shared/logger';\nimport { _keyDefinitions } from '@rpascene/shared/us-keyboard-layout';\n\nimport { commonContextParser } from '@rpascene/core/agent';\nimport type { NodeType } from '@rpascene/shared/constants';\nimport type ChromeExtensionProxyPage from './chrome-extension/page';\nimport type { PlaywrightWebPage } from './playwright';\nimport type { PuppeteerWebPage } from './puppeteer';\nimport type { StaticPage } from './static';\nexport type { WebElementInfo };\n\nexport type WebPageAgentOpt = AgentOpt & WebPageOpt;\nexport type WebPageOpt = {\n waitForNavigationTimeout?: number;\n waitForNetworkIdleTimeout?: number;\n forceSameTabNavigation?: boolean /* if limit the new tab to the current page, default true */;\n beforeInvokeAction?: () => Promise<void>;\n afterInvokeAction?: () => Promise<void>;\n customActions?: DeviceAction<any>[];\n};\n\nexport type WebPage =\n | PlaywrightWebPage\n | PuppeteerWebPage\n | StaticPage\n | ChromeExtensionProxyPage;\n\nexport class WebElementInfoImpl implements WebElementInfo {\n content: string;\n\n rect: Rect;\n\n center: [number, number];\n\n id: string;\n\n indexId: number;\n\n attributes: {\n nodeType: NodeType;\n [key: string]: string;\n };\n\n xpaths?: string[];\n\n isVisible: boolean;\n\n allPaths?: any;\n\n containerPaths?: any;\n\n constructor({\n content,\n rect,\n id,\n attributes,\n indexId,\n xpaths,\n isVisible,\n allPaths,\n containerPaths\n }: {\n content: string;\n rect: Rect;\n id: string;\n attributes: {\n nodeType: NodeType;\n [key: string]: string;\n };\n indexId: number;\n xpaths?: string[];\n isVisible: boolean;\n allPaths?: any;\n containerPaths?: any;\n }) {\n this.content = content;\n this.rect = rect;\n this.center = [\n Math.floor(rect.left + rect.width / 2),\n Math.floor(rect.top + rect.height / 2),\n ];\n this.id = id;\n this.attributes = attributes;\n this.indexId = indexId;\n this.xpaths = xpaths;\n this.isVisible = isVisible;\n this.allPaths = allPaths;\n this.containerPaths = containerPaths\n }\n}\n\nconst debug = getDebug('web:parse-context');\nexport async function WebPageContextParser(\n page: AbstractInterface,\n _opt: { uploadServerUrl?: string },\n): Promise<UIContext> {\n const basicContext = await commonContextParser(page, {\n uploadServerUrl: _opt.uploadServerUrl,\n });\n\n debug('will traverse element tree');\n const tree = (await page.getElementsNodeTree?.()) || {\n node: null,\n children: [],\n };\n const webTree = traverseTree(tree!, (elementInfo) => {\n const { rect, id, content, attributes, indexId, isVisible, allPaths, containerPaths } = elementInfo;\n return new WebElementInfoImpl({\n rect,\n id,\n content,\n attributes,\n indexId,\n isVisible,\n allPaths,\n containerPaths\n });\n });\n debug('traverse element tree end');\n\n return {\n ...basicContext,\n tree: webTree,\n };\n}\n\nexport 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`;\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","WebElementInfoImpl","content","rect","id","attributes","indexId","xpaths","isVisible","allPaths","containerPaths","Math","debug","getDebug","WebPageContextParser","page","_opt","basicContext","commonContextParser","tree","webTree","traverseTree","elementInfo","limitOpenNewTabScript"],"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;;;;;;;;;;;;;;;;;;;;;;AC8BO,MAAMI;IAwBX,YAAY,EACVC,OAAO,EACPC,IAAI,EACJC,EAAE,EACFC,UAAU,EACVC,OAAO,EACPC,MAAM,EACNC,SAAS,EACTC,QAAQ,EACRC,cAAc,EAcf,CAAE;QA9CH;QAEA;QAEA;QAEA;QAEA;QAEA;QAKA;QAEA;QAEA;QAEA;QA0BE,IAAI,CAAC,OAAO,GAAGR;QACf,IAAI,CAAC,IAAI,GAAGC;QACZ,IAAI,CAAC,MAAM,GAAG;YACZQ,KAAK,KAAK,CAACR,KAAK,IAAI,GAAGA,KAAK,KAAK,GAAG;YACpCQ,KAAK,KAAK,CAACR,KAAK,GAAG,GAAGA,KAAK,MAAM,GAAG;SACrC;QACD,IAAI,CAAC,EAAE,GAAGC;QACV,IAAI,CAAC,UAAU,GAAGC;QAClB,IAAI,CAAC,OAAO,GAAGC;QACf,IAAI,CAAC,MAAM,GAAGC;QACd,IAAI,CAAC,SAAS,GAAGC;QACjB,IAAI,CAAC,QAAQ,GAAGC;QAChB,IAAI,CAAC,cAAc,GAAGC;IACxB;AACF;AAEA,MAAME,QAAQC,AAAAA,IAAAA,uBAAAA,QAAAA,AAAAA,EAAS;AAChB,eAAeC,qBACpBC,IAAuB,EACvBC,IAAkC;QAOdD;IALpB,MAAME,eAAe,MAAMC,AAAAA,IAAAA,sBAAAA,mBAAAA,AAAAA,EAAoBH,MAAM;QACnD,iBAAiBC,KAAK,eAAe;IACvC;IAEAJ,MAAM;IACN,MAAMO,OAAQ,eAAMJ,CAAAA,4BAAAA,KAAK,mBAAmB,AAAD,IAAvBA,KAAAA,IAAAA,0BAAAA,IAAAA,CAAAA,KAAI,KAA6B;QACnD,MAAM;QACN,UAAU,EAAE;IACd;IACA,MAAMK,UAAUC,AAAAA,IAAAA,0BAAAA,YAAAA,AAAAA,EAAaF,MAAO,CAACG;QACnC,MAAM,EAAEnB,IAAI,EAAEC,EAAE,EAAEF,OAAO,EAAEG,UAAU,EAAEC,OAAO,EAAEE,SAAS,EAAEC,QAAQ,EAAEC,cAAc,EAAE,GAAGY;QACxF,OAAO,IAAIrB,mBAAmB;YAC5BE;YACAC;YACAF;YACAG;YACAC;YACAE;YACAC;YACAC;QACF;IACF;IACAE,MAAM;IAEN,OAAO;QACL,GAAGK,YAAY;QACf,MAAMG;IACR;AACF;AAEO,MAAMG,wBAAwB,CAAC;;;;;;;;;;;;;;;;;;;;;;AAsBtC,CAAC"}
@@ -25,7 +25,7 @@ export declare class AgentOverChromeBridge extends Agent<ChromeExtensionPageCliS
25
25
  aiAction(prompt: string, options?: any): Promise<{
26
26
  result: Record<string, any>;
27
27
  } | {
28
- yamlFlow?: import("@rpascene/core").RpasceneYamlFlowItem[];
28
+ yamlFlow?: import("@rpascene/core").MidsceneYamlFlowItem[];
29
29
  } | undefined>;
30
30
  destroy(closeNewTabsAfterDisconnect?: boolean): Promise<void>;
31
31
  }
@@ -14,7 +14,7 @@ export declare enum BridgeEvent {
14
14
  SetDestroyOptions = "setDestroyOptions",
15
15
  SetActiveTabId = "setActiveTabId"
16
16
  }
17
- export declare const BridgeSignalKill = "RPASCENE_BRIDGE_SIGNAL_KILL";
17
+ export declare const BridgeSignalKill = "MIDSCENE_BRIDGE_SIGNAL_KILL";
18
18
  export interface BridgeConnectTabOptions {
19
19
  /**
20
20
  * If true, the page will always track the active tab.
@@ -3,7 +3,7 @@ import type { Agent as PageAgent } from '@rpascene/core/agent';
3
3
  import { type TestInfo, type TestType } from '@playwright/test';
4
4
  import type { Page as OriginPlaywrightPage } from 'playwright';
5
5
  export type APITestType = Pick<TestType<any, any>, 'step'>;
6
- export declare const rpasceneDumpAnnotationId = "RPASCENE_DUMP_ANNOTATION";
6
+ export declare const midsceneDumpAnnotationId = "MIDSCENE_DUMP_ANNOTATION";
7
7
  type PlaywrightCacheConfig = {
8
8
  strategy?: 'read-only' | 'read-write' | 'write-only';
9
9
  id?: string;
@@ -1,12 +1,12 @@
1
1
  import type { FullConfig, Reporter, Suite, TestCase, TestResult } from '@playwright/test/reporter';
2
- interface RpasceneReporterOptions {
2
+ interface MidsceneReporterOptions {
3
3
  type?: 'merged' | 'separate';
4
4
  }
5
- declare class RpasceneReporter implements Reporter {
5
+ declare class MidsceneReporter implements Reporter {
6
6
  private mergedFilename?;
7
7
  private testTitleToFilename;
8
8
  mode?: 'merged' | 'separate';
9
- constructor(options?: RpasceneReporterOptions);
9
+ constructor(options?: MidsceneReporterOptions);
10
10
  private static getMode;
11
11
  private getSeparatedFilename;
12
12
  private getReportFilename;
@@ -15,4 +15,4 @@ declare class RpasceneReporter implements Reporter {
15
15
  onTestBegin(_test: TestCase, _result: TestResult): void;
16
16
  onTestEnd(test: TestCase, result: TestResult): void;
17
17
  }
18
- export default RpasceneReporter;
18
+ export default MidsceneReporter;
@@ -1,5 +1,5 @@
1
1
  import { PuppeteerAgent } from './index';
2
- import type { Cache, RpasceneYamlScriptWebEnv } from '@rpascene/core';
2
+ import type { Cache, MidsceneYamlScriptWebEnv } from '@rpascene/core';
3
3
  import { type Browser } from 'puppeteer';
4
4
  export declare const defaultUA = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36";
5
5
  export declare const defaultViewportWidth = 1440;
@@ -10,14 +10,14 @@ interface FreeFn {
10
10
  name: string;
11
11
  fn: () => void;
12
12
  }
13
- export declare function launchPuppeteerPage(target: RpasceneYamlScriptWebEnv, preference?: {
13
+ export declare function launchPuppeteerPage(target: MidsceneYamlScriptWebEnv, preference?: {
14
14
  headed?: boolean;
15
15
  keepWindow?: boolean;
16
16
  }, browser?: Browser): Promise<{
17
17
  page: import("puppeteer").Page;
18
18
  freeFn: FreeFn[];
19
19
  }>;
20
- export declare function puppeteerAgentForTarget(target: RpasceneYamlScriptWebEnv, preference?: {
20
+ export declare function puppeteerAgentForTarget(target: MidsceneYamlScriptWebEnv, preference?: {
21
21
  headed?: boolean;
22
22
  keepWindow?: boolean;
23
23
  testId?: string;
@@ -48,4 +48,4 @@ export declare class WebElementInfoImpl implements WebElementInfo {
48
48
  export declare function WebPageContextParser(page: AbstractInterface, _opt: {
49
49
  uploadServerUrl?: string;
50
50
  }): Promise<UIContext>;
51
- export declare const limitOpenNewTabScript = "\nif (!window.__RPASCENE_NEW_TAB_INTERCEPTOR_INITIALIZED__) {\n window.__RPASCENE_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";
51
+ 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";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rpascene/web",
3
- "description": "Automate browser actions, extract data, and perform assertions using AI. It offers JavaScript SDK, Chrome extension, and support for scripting in YAML.",
3
+ "description": "RPA Automate browser actions, extract data, and perform assertions using AI. It offers JavaScript SDK, Chrome extension, and support for scripting in YAML.",
4
4
  "keywords": [
5
5
  "AI UI automation",
6
6
  "AI testing",
@@ -8,7 +8,7 @@
8
8
  "Browser use",
9
9
  "Android use"
10
10
  ],
11
- "version": "0.30.8",
11
+ "version": "0.30.9",
12
12
  "repository": "",
13
13
  "homepage": "",
14
14
  "main": "./dist/lib/index.js",
@@ -88,35 +88,43 @@
88
88
  },
89
89
  "watch": {
90
90
  "build": {
91
- "patterns": ["src"],
91
+ "patterns": [
92
+ "src"
93
+ ],
92
94
  "extensions": "tsx,less,scss,css,js,jsx,ts",
93
95
  "quiet": false
94
96
  }
95
97
  },
96
98
  "scripts": {
97
99
  "dev": "npm run build && npx npm-watch",
98
- "dev:server": "npm run build && ./bin/rpascene-playground",
100
+ "dev:server": "npm run build && ./bin/midscene-playground",
99
101
  "build": "rslib build",
100
102
  "build:watch": "rslib build --watch",
101
- "playground": "DEBUG=rpascene:* tsx demo/playground.ts",
103
+ "playground": "DEBUG=midscene:* tsx demo/playground.ts",
102
104
  "test": "vitest --run",
103
105
  "test:u": "vitest --run -u",
104
106
  "test:ai": "AI_TEST_TYPE=web npm run test",
105
- "test:ai:cache": "RPASCENE_CACHE=true npm run test:ai",
107
+ "test:ai:cache": "MIDSCENE_CACHE=true npm run test:ai",
106
108
  "e2e": "playwright test --config=tests/playwright.config.ts",
107
- "e2e:report": "RPASCENE_REPORT=true playwright test --config=tests/playwright.config.ts",
108
- "e2e:cache": "RPASCENE_CACHE=true 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",
109
111
  "e2e:ui": "playwright test --config=tests/playwright.config.ts --ui",
110
- "e2e:ui:cache": "RPASCENE_CACHE=true playwright test --config=tests/playwright.config.ts --ui"
112
+ "e2e:ui:cache": "MIDSCENE_CACHE=true playwright test --config=tests/playwright.config.ts --ui"
111
113
  },
112
114
  "bin": {
113
- "rpascene-playground": "./bin/rpascene-playground"
115
+ "midscene-playground": "./bin/midscene-playground"
114
116
  },
115
- "files": ["static", "dist", "iife-script", "README.md", "bin"],
117
+ "files": [
118
+ "static",
119
+ "dist",
120
+ "iife-script",
121
+ "README.md",
122
+ "bin"
123
+ ],
116
124
  "dependencies": {
117
- "@rpascene/core": "workspace:*",
118
- "@rpascene/playground": "workspace:*",
119
- "@rpascene/shared": "workspace:*",
125
+ "@rpascene/core": "0.30.9",
126
+ "@rpascene/playground": "0.30.9",
127
+ "@rpascene/shared": "0.30.9",
120
128
  "cors": "^2.8.5",
121
129
  "dayjs": "^1.11.11",
122
130
  "dotenv": "^16.4.5",
@@ -161,4 +169,4 @@
161
169
  "registry": "https://registry.npmjs.org"
162
170
  },
163
171
  "license": "MIT"
164
- }
172
+ }