automation_model 1.0.408-dev → 1.0.408

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 (54) hide show
  1. package/lib/api.d.ts +43 -1
  2. package/lib/api.js +225 -41
  3. package/lib/api.js.map +1 -1
  4. package/lib/auto_page.d.ts +2 -1
  5. package/lib/auto_page.js +43 -17
  6. package/lib/auto_page.js.map +1 -1
  7. package/lib/browser_manager.d.ts +7 -3
  8. package/lib/browser_manager.js +120 -39
  9. package/lib/browser_manager.js.map +1 -1
  10. package/lib/command_common.d.ts +6 -0
  11. package/lib/command_common.js +160 -0
  12. package/lib/command_common.js.map +1 -0
  13. package/lib/environment.d.ts +3 -0
  14. package/lib/environment.js +5 -2
  15. package/lib/environment.js.map +1 -1
  16. package/lib/error-messages.d.ts +6 -0
  17. package/lib/error-messages.js +188 -0
  18. package/lib/error-messages.js.map +1 -0
  19. package/lib/generation_scripts.d.ts +4 -0
  20. package/lib/generation_scripts.js +2 -0
  21. package/lib/generation_scripts.js.map +1 -0
  22. package/lib/index.d.ts +1 -0
  23. package/lib/index.js +1 -0
  24. package/lib/index.js.map +1 -1
  25. package/lib/init_browser.d.ts +3 -1
  26. package/lib/init_browser.js +67 -4
  27. package/lib/init_browser.js.map +1 -1
  28. package/lib/locate_element.d.ts +7 -0
  29. package/lib/locate_element.js +215 -0
  30. package/lib/locate_element.js.map +1 -0
  31. package/lib/locator.d.ts +36 -0
  32. package/lib/locator.js +165 -0
  33. package/lib/locator.js.map +1 -1
  34. package/lib/locator_log.d.ts +26 -0
  35. package/lib/locator_log.js +69 -0
  36. package/lib/locator_log.js.map +1 -0
  37. package/lib/network.d.ts +3 -0
  38. package/lib/network.js +157 -0
  39. package/lib/network.js.map +1 -0
  40. package/lib/scripts/axe.mini.js +12 -0
  41. package/lib/scripts/find_text.js +126 -0
  42. package/lib/stable_browser.d.ts +75 -32
  43. package/lib/stable_browser.js +1188 -1187
  44. package/lib/stable_browser.js.map +1 -1
  45. package/lib/table.d.ts +13 -0
  46. package/lib/table.js +187 -0
  47. package/lib/table.js.map +1 -0
  48. package/lib/test_context.d.ts +4 -0
  49. package/lib/test_context.js +12 -9
  50. package/lib/test_context.js.map +1 -1
  51. package/lib/utils.d.ts +14 -1
  52. package/lib/utils.js +304 -5
  53. package/lib/utils.js.map +1 -1
  54. package/package.json +13 -8
@@ -1,5 +1,12 @@
1
1
  import { chromium, firefox, webkit, } from "playwright";
2
+ import fs from "fs";
3
+ import path from "path";
4
+ import { fileURLToPath } from "url";
5
+ // Get __filename and __dirname in ESM
6
+ const __filename = fileURLToPath(import.meta.url);
7
+ const __dirname = path.dirname(__filename);
2
8
  class BrowserManager {
9
+ browsers;
3
10
  constructor(browsers = []) {
4
11
  this.browsers = browsers;
5
12
  }
@@ -22,26 +29,41 @@ class BrowserManager {
22
29
  }
23
30
  }
24
31
  }
25
- async createBrowser(headless = false, storageState, extensionPath, userDataDirPath) {
32
+ async createBrowser(headless = false, storageState, extensionPath, userDataDirPath, reportFolder, userAgent, channel, aiConfig, initScripts = null) {
26
33
  const browser = new Browser();
27
- await browser.init(headless, storageState, extensionPath, userDataDirPath);
34
+ await browser.init(headless, storageState, extensionPath, userDataDirPath, reportFolder, userAgent, channel, aiConfig, initScripts);
28
35
  this.browsers.push(browser);
29
36
  return browser;
30
37
  }
31
- async getBrowser(headless = false, storageState, extensionPath, userDataDirPath) {
32
- if (this.browsers.length === 0) {
33
- return await this.createBrowser(headless, storageState, extensionPath, userDataDirPath);
34
- }
35
- return this.browsers[0];
36
- }
37
38
  }
38
39
  class Browser {
40
+ browser;
41
+ context;
42
+ page;
43
+ headless = false;
44
+ reportFolder = null;
45
+ trace = false;
46
+ traceFolder = null;
39
47
  constructor() {
40
48
  this.browser = null;
41
49
  this.context = null;
42
50
  this.page = null;
43
51
  }
44
- async init(headless = false, storageState, extensionPath, userDataDirPath) {
52
+ async init(headless = false, storageState, extensionPath, userDataDirPath, reportFolder, userAgent, channel, aiConfig, initScripts = null) {
53
+ if (!aiConfig) {
54
+ aiConfig = {};
55
+ }
56
+ // if (!downloadsPath) {
57
+ // downloadsPath = "downloads";
58
+ // }
59
+ // // check if downloads path exists
60
+ // if (!fs.existsSync(downloadsPath)) {
61
+ // fs.mkdirSync(downloadsPath, { recursive: true });
62
+ // }
63
+ this.headless = headless;
64
+ if (reportFolder) {
65
+ this.reportFolder = reportFolder;
66
+ }
45
67
  let viewport = null;
46
68
  if (process.env.HEADLESS === "true") {
47
69
  headless = true;
@@ -60,29 +82,9 @@ class Browser {
60
82
  bypassCSP: true,
61
83
  args: ["--ignore-https-errors", "--no-incognito", "--ignore-certificate-errors"],
62
84
  });
63
- // this.browser = await chromium.connectOverCDP({
64
- // endpointURL: `http://localhost:${cdpPort}`,
65
- // });
66
- // if (!this.browser) {
67
- // throw new Error("Could not connect to browser");
68
- // }
69
- // this.context = await this.browser.newContext();
70
- //this.page = await this.context.newPage();
71
- // if (this.browser.contexts?.length > 0) {
72
- // this.context = (this.browser.contexts as BrowserContext[])[0];
73
- // //this.context = await this.browser.contexts[0];
74
- // if (this.context.pages.length > 0) {
75
- // this.page = await this.context.pages[0];
76
- // } else {
77
- // this.page = await this.context.newPage();
78
- // }
79
- // } else {
80
- // this.context = await this.browser.newContext();
81
- // this.page = await this.context.newPage();
82
- // }
83
85
  }
84
86
  else if (extensionPath) {
85
- this.context = await chromium.launchPersistentContext(userDataDirPath !== null && userDataDirPath !== void 0 ? userDataDirPath : "", {
87
+ this.context = await chromium.launchPersistentContext(userDataDirPath ?? "", {
86
88
  headless: headless,
87
89
  timeout: 0,
88
90
  bypassCSP: true,
@@ -101,6 +103,7 @@ class Browser {
101
103
  headless: headless,
102
104
  timeout: 0,
103
105
  args: ["--ignore-https-errors", "--ignore-certificate-errors"],
106
+ //downloadsPath: downloadsPath,
104
107
  });
105
108
  }
106
109
  else if (process.env.BROWSER === "webkit") {
@@ -108,16 +111,37 @@ class Browser {
108
111
  headless: headless,
109
112
  timeout: 0,
110
113
  args: ["--ignore-https-errors", "--ignore-certificate-errors"],
114
+ //downloadsPath: downloadsPath,
111
115
  });
112
116
  }
117
+ else if (channel) {
118
+ {
119
+ this.browser = await chromium.launch({
120
+ headless: headless,
121
+ timeout: 0,
122
+ args: ["--ignore-https-errors", "--ignore-certificate-errors"],
123
+ channel: channel,
124
+ //downloadsPath: downloadsPath,
125
+ });
126
+ }
127
+ }
113
128
  else {
114
129
  this.browser = await chromium.launch({
115
130
  headless: headless,
116
131
  timeout: 0,
117
132
  args: ["--ignore-https-errors", "--ignore-certificate-errors"],
133
+ //downloadsPath: downloadsPath,
118
134
  });
119
135
  }
136
+ // downloadsPath
120
137
  let contextOptions = {};
138
+ if (aiConfig.contextOptions) {
139
+ contextOptions = aiConfig.contextOptions;
140
+ console.log("contextOptions: " + JSON.stringify(contextOptions));
141
+ }
142
+ if (!contextOptions["acceptDownloads"]) {
143
+ contextOptions["acceptDownloads"] = true;
144
+ }
121
145
  if (storageState) {
122
146
  contextOptions.storageState = storageState;
123
147
  contextOptions.bypassCSP = true;
@@ -126,12 +150,76 @@ class Browser {
126
150
  if (viewport) {
127
151
  contextOptions.viewport = viewport;
128
152
  }
129
- this.context = await this.browser.newContext(contextOptions);
153
+ if (userAgent) {
154
+ contextOptions.userAgent = userAgent;
155
+ }
156
+ if (!this.context && this.browser) {
157
+ this.context = await this.browser.newContext(contextOptions);
158
+ }
130
159
  }
131
- // }
160
+ if ((process.env.TRACE === "true" || aiConfig.trace === true) && this.context) {
161
+ this.trace = true;
162
+ const traceFolder = path.join(this.reportFolder, "trace");
163
+ //const traceFile = path.join(traceFolder, "trace.zip");
164
+ if (!fs.existsSync(traceFolder)) {
165
+ fs.mkdirSync(traceFolder, { recursive: true });
166
+ }
167
+ this.traceFolder = traceFolder;
168
+ await this.context.tracing.start({ screenshots: true, snapshots: true });
169
+ }
170
+ if (initScripts && this.context) {
171
+ if (initScripts.recorderCjs) {
172
+ await this.context.addInitScript({
173
+ content: `
174
+ (() => {
175
+ const module = {};
176
+ ${initScripts.recorderCjs}
177
+ const sss = new (module.exports.InjectedScript())(
178
+ window,
179
+ true,
180
+ "javascript",
181
+ [],
182
+ ${0},
183
+ "${this.browser?.browserType().name()}",
184
+ []
185
+ );
186
+ })();`,
187
+ });
188
+ }
189
+ if (initScripts.scripts) {
190
+ for (let script of initScripts.scripts) {
191
+ await this.context.addInitScript({
192
+ content: script,
193
+ });
194
+ }
195
+ }
196
+ }
197
+ let axeMinJsPath = path.join(__dirname, "..", "scripts", "axe.mini.js");
198
+ // Check if the file exists
199
+ if (!fs.existsSync(axeMinJsPath)) {
200
+ axeMinJsPath = path.join(__dirname, "scripts", "axe.mini.js");
201
+ }
202
+ // Read the content of axe.min.js synchronously
203
+ const axeMinJsContent = fs.readFileSync(axeMinJsPath, "utf-8");
204
+ await this.context?.addInitScript({
205
+ content: axeMinJsContent,
206
+ });
207
+ let findTextPath = path.join(__dirname, "..", "scripts", "find_text.js");
208
+ // Check if the file exists
209
+ if (!fs.existsSync(findTextPath)) {
210
+ findTextPath = path.join(__dirname, "scripts", "find_text.js");
211
+ }
212
+ // Read the content of find_text.js synchronously
213
+ const findTextContent = fs.readFileSync(findTextPath, "utf-8");
214
+ await this.context?.addInitScript({
215
+ content: findTextContent,
216
+ });
132
217
  this.page = await this.context.newPage();
133
218
  }
134
219
  async close() {
220
+ // if (this.context && this.trace) {
221
+ // await this.context.tracing.stop({ path: traceFile });
222
+ // }
135
223
  if (this.browser !== null) {
136
224
  await this.browser.close();
137
225
  this.browser = null;
@@ -142,11 +230,4 @@ class Browser {
142
230
  }
143
231
  const browserManager = new BrowserManager();
144
232
  export { browserManager };
145
- // let browser = await browserManager.createBrowser();
146
- // browser.page.goto("https://www.cnn.com");
147
- // let browser2 = await browserManager.createBrowser();
148
- // await browser2.page.goto("https://www.google.com");
149
- // // sleep for 2 seconds
150
- // await new Promise((r) => setTimeout(r, 1000));
151
- // await browserManager.closeAll();
152
233
  //# sourceMappingURL=browser_manager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"browser_manager.js","sourceRoot":"","sources":["../../src/browser_manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"browser_manager.js","sourceRoot":"","sources":["../../src/browser_manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare function _preCommand(state: any, stable: any): Promise<void>;
2
+ export declare function _commandError(state: any, error: any, stable: any): Promise<void>;
3
+ export declare function _screenshot(state: any, stable: any): Promise<void>;
4
+ export declare function _commandFinally(state: any, stable: any): void;
5
+ export declare function _validateSelectors(selectors: any): void;
6
+ export declare function _reportToWorld(world: any, properties: any): void;
@@ -0,0 +1,160 @@
1
+ import { getHumanReadableErrorMessage } from "./error-messages.js";
2
+ import { LocatorLog } from "./locator_log.js";
3
+ import { _fixUsingParams, maskValue } from "./utils.js";
4
+ export async function _preCommand(state, stable) {
5
+ if (!state) {
6
+ return;
7
+ }
8
+ if (state.selectors) {
9
+ _validateSelectors(state.selectors);
10
+ const originalSelectors = state.selectors;
11
+ state.selectors = JSON.parse(JSON.stringify(state.selectors));
12
+ if (originalSelectors.frame) {
13
+ state.selectors.frame = originalSelectors.frame;
14
+ }
15
+ }
16
+ if (state.locate !== false) {
17
+ state.locate = true;
18
+ }
19
+ if (state.scroll !== false) {
20
+ state.scroll = true;
21
+ }
22
+ if (state.screenshot !== false) {
23
+ state.screenshot = true;
24
+ }
25
+ if (state.highlight !== false) {
26
+ state.highlight = true;
27
+ }
28
+ if (state.throwError !== false) {
29
+ state.throwError = true;
30
+ }
31
+ state.info = {};
32
+ if (state.value) {
33
+ state.value = _fixUsingParams(state.value, state._params);
34
+ state.info.value = state.value;
35
+ }
36
+ if (state.attribute) {
37
+ state.info.attribute = state.attribute;
38
+ }
39
+ state.startTime = Date.now();
40
+ state.info.selectors = state.selectors;
41
+ state.info.log = state.log ? state.log : "";
42
+ if (state.selectors) {
43
+ state.info.locatorLog = new LocatorLog();
44
+ state.info.locatorLog.mission = state.info.log.trim();
45
+ }
46
+ state.info.operation = state.operation;
47
+ state.info.failCause = {};
48
+ state.error = null;
49
+ state.screenshotId = null;
50
+ state.screenshotPath = null;
51
+ if (state.locate === true) {
52
+ let timeout = null;
53
+ if (state.options && state.options.timeout) {
54
+ timeout = state.options.timeout;
55
+ }
56
+ state.element = await stable._locate(state.selectors, state.info, state._params, timeout);
57
+ }
58
+ if (state.scroll === true) {
59
+ await stable.scrollIfNeeded(state.element, state.info);
60
+ }
61
+ if (state.screenshot === true) {
62
+ await _screenshot(state, stable);
63
+ }
64
+ if (state.highlight === true) {
65
+ try {
66
+ await stable._highlightElements(state.element);
67
+ }
68
+ catch (e) {
69
+ // ignore
70
+ }
71
+ }
72
+ state.info.failCause.operationFailed = true;
73
+ }
74
+ export async function _commandError(state, error, stable) {
75
+ if (!state.info) {
76
+ state.info = {};
77
+ }
78
+ if (!state.info.failCause) {
79
+ state.info.failCause = {};
80
+ }
81
+ stable.logger.error(state.text + " failed");
82
+ if (state.info.locatorLog) {
83
+ const lines = state.info.locatorLog.toString().split("\n");
84
+ for (let line of lines) {
85
+ stable.logger.error(line);
86
+ }
87
+ }
88
+ const { screenshotId, screenshotPath } = await stable._screenShot(state.options, state.world, state.info);
89
+ state.screenshotId = screenshotId;
90
+ state.screenshotPath = screenshotPath;
91
+ state.info.screenshotPath = screenshotPath;
92
+ // state.info.failCause.error = error;
93
+ state.info.failCause.fail = true;
94
+ const errorClassification = getHumanReadableErrorMessage(error, state.info);
95
+ state.info.errorType = errorClassification.errorType;
96
+ state.info.errorMessage = errorClassification.errorMessage;
97
+ Object.assign(error, { info: state.info });
98
+ state.error = error;
99
+ state.commandError = true;
100
+ if (state.throwError) {
101
+ throw error;
102
+ }
103
+ }
104
+ export async function _screenshot(state, stable) {
105
+ const { screenshotId, screenshotPath } = await stable._screenShot(state.options, state.world, state.info);
106
+ state.screenshotId = screenshotId;
107
+ state.screenshotPath = screenshotPath;
108
+ }
109
+ export function _commandFinally(state, stable) {
110
+ if (state && !state.commandError === true) {
111
+ state.info.failCause = {};
112
+ }
113
+ state.endTime = Date.now();
114
+ const reportObject = {
115
+ element_name: state.selectors ? state.selectors.element_name : null,
116
+ type: state.type,
117
+ text: state.text,
118
+ value: state.originalValue ? maskValue(state.originalValue) : state.value,
119
+ screenshotId: state.screenshotId,
120
+ result: state.error
121
+ ? {
122
+ status: "FAILED",
123
+ startTime: state.startTime,
124
+ endTime: state.endTime,
125
+ message: state.error?.message,
126
+ }
127
+ : {
128
+ status: "PASSED",
129
+ startTime: state.startTime,
130
+ endTime: state.endTime,
131
+ },
132
+ info: state.info,
133
+ locatorLog: state.info.locatorLog ? state.info.locatorLog.toString() : null,
134
+ };
135
+ if (state.originalValue && state.info) {
136
+ state.info.value = maskValue(state.originalValue);
137
+ }
138
+ _reportToWorld(state.world, reportObject);
139
+ }
140
+ export function _validateSelectors(selectors) {
141
+ if (!selectors) {
142
+ throw new Error("selectors is null");
143
+ }
144
+ if (!selectors.locators) {
145
+ throw new Error("selectors.locators is null");
146
+ }
147
+ if (!Array.isArray(selectors.locators)) {
148
+ throw new Error("selectors.locators expected to be array");
149
+ }
150
+ if (selectors.locators.length === 0) {
151
+ throw new Error("selectors.locators expected to be non empty array");
152
+ }
153
+ }
154
+ export function _reportToWorld(world, properties) {
155
+ if (!world || !world.attach) {
156
+ return;
157
+ }
158
+ world.attach(JSON.stringify(properties), { mediaType: "application/json" });
159
+ }
160
+ //# sourceMappingURL=command_common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command_common.js","sourceRoot":"","sources":["../../src/command_common.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,9 @@ declare class Environment {
19
19
  extensionPath?: string;
20
20
  constructor(baseUrl?: string | undefined);
21
21
  setBaseUrl(url: string): void;
22
+ apps: {
23
+ [key: string]: Environment;
24
+ };
22
25
  }
23
26
  export { Environment };
24
27
  export type { Cookie, LocalStorage };
@@ -1,12 +1,15 @@
1
1
  class Environment {
2
+ baseUrl;
3
+ cookies = [];
4
+ origins = [];
5
+ extensionPath;
2
6
  constructor(baseUrl) {
3
7
  this.baseUrl = baseUrl;
4
- this.cookies = [];
5
- this.origins = [];
6
8
  }
7
9
  setBaseUrl(url) {
8
10
  this.baseUrl = url;
9
11
  }
12
+ apps = {};
10
13
  }
11
14
  export { Environment };
12
15
  //# sourceMappingURL=environment.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"environment.js","sourceRoot":"","sources":["../../src/environment.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW;IAIf,YAAmB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;QAHnC,YAAO,GAAa,EAAE,CAAC;QACvB,YAAO,GAAqD,EAAE,CAAC;IAEzB,CAAC;IACvC,UAAU,CAAC,GAAW;QACpB,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;IACrB,CAAC;CACF;AACD,OAAO,EAAE,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"environment.js","sourceRoot":"","sources":["../../src/environment.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW;IAII;IAHnB,OAAO,GAAa,EAAE,CAAC;IACvB,OAAO,GAAqD,EAAE,CAAC;IAC/D,aAAa,CAAU;IACvB,YAAmB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IACvC,UAAU,CAAC,GAAW;QACpB,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;IACrB,CAAC;IACD,IAAI,GAAmC,EAAE,CAAC;CAC3C;AACD,OAAO,EAAE,WAAW,EAAE,CAAC"}
@@ -0,0 +1,6 @@
1
+ type ErrorClassification = {
2
+ errorType: string;
3
+ errorMessage: string;
4
+ };
5
+ declare const getHumanReadableErrorMessage: (error: Error, info: any) => ErrorClassification;
6
+ export { getHumanReadableErrorMessage };
@@ -0,0 +1,188 @@
1
+ function classifyPlaywrightError(error) {
2
+ const errorMessage = error.message.toLowerCase();
3
+ // Timeout Errors
4
+ if (error.name === "TimeoutError" || errorMessage.includes("timeout")) {
5
+ return {
6
+ errorType: "TimeoutError",
7
+ errorMessage: error.message,
8
+ };
9
+ }
10
+ // Network Errors
11
+ if (errorMessage.includes("connect econnrefused") ||
12
+ errorMessage.includes("net::") ||
13
+ errorMessage.includes("network") ||
14
+ errorMessage.includes("connection refused") ||
15
+ errorMessage.includes("failed to fetch")) {
16
+ return {
17
+ errorType: "NetworkError",
18
+ errorMessage: error.message,
19
+ };
20
+ }
21
+ // Selector Errors
22
+ if (errorMessage.includes("no element matches selector") ||
23
+ errorMessage.includes("no node found for selector") ||
24
+ errorMessage.includes("resolved to") ||
25
+ errorMessage.includes("element not found")) {
26
+ return {
27
+ errorType: "SelectorError",
28
+ errorMessage: error.message,
29
+ };
30
+ }
31
+ // Frame Errors
32
+ if (errorMessage.includes("frame was detached") ||
33
+ errorMessage.includes("frame not found") ||
34
+ errorMessage.includes("execution context was destroyed")) {
35
+ return {
36
+ errorType: "FrameError",
37
+ errorMessage: error.message,
38
+ };
39
+ }
40
+ // Element State Errors
41
+ if (errorMessage.includes("element is not clickable") ||
42
+ errorMessage.includes("element is outside of viewport") ||
43
+ errorMessage.includes("element is not visible") ||
44
+ errorMessage.includes("element is disabled")) {
45
+ return {
46
+ errorType: "ElementStateError",
47
+ errorMessage: error.message,
48
+ };
49
+ }
50
+ // Browser Context Errors
51
+ if (errorMessage.includes("target closed") ||
52
+ errorMessage.includes("browser has been closed") ||
53
+ errorMessage.includes("connection closed")) {
54
+ return {
55
+ errorType: "BrowserContextError",
56
+ errorMessage: error.message,
57
+ };
58
+ }
59
+ // Screenshot Errors
60
+ if (errorMessage.includes("failed to save screenshot") ||
61
+ errorMessage.includes("screenshot") ||
62
+ (errorMessage.includes("enoent") && errorMessage.includes("screenshots"))) {
63
+ return {
64
+ errorType: "ScreenshotError",
65
+ errorMessage: error.message,
66
+ };
67
+ }
68
+ // Type Errors
69
+ if (errorMessage.includes("cannot type") ||
70
+ errorMessage.includes("element is not an <input>") ||
71
+ errorMessage.includes("element is not focusable")) {
72
+ return {
73
+ errorType: "TypeError",
74
+ errorMessage: error.message,
75
+ };
76
+ }
77
+ // Evaluation Errors
78
+ if (errorMessage.includes("evaluation failed") ||
79
+ errorMessage.includes("execution context was destroyed") ||
80
+ errorMessage.includes("cannot execute in detached frame")) {
81
+ return {
82
+ errorType: "EvaluationError",
83
+ errorMessage: error.message,
84
+ };
85
+ }
86
+ // Assertion Errors
87
+ if (error.name === "AssertionError" || errorMessage.includes("expect(") || errorMessage.includes("assertion")) {
88
+ return {
89
+ errorType: "AssertionError",
90
+ errorMessage: error.message,
91
+ };
92
+ }
93
+ // Default case for unrecognized errors
94
+ return {
95
+ errorType: "UnknownError",
96
+ errorMessage: error.message,
97
+ };
98
+ }
99
+ function classifyJSError(error) {
100
+ const errorMessage = error.message.toLowerCase();
101
+ // Syntax Errors
102
+ if (error.name === "SyntaxError" || errorMessage.includes("syntax error")) {
103
+ return {
104
+ errorType: "SyntaxError",
105
+ errorMessage: error.message,
106
+ };
107
+ }
108
+ // Reference Errors
109
+ if (error.name === "ReferenceError" || errorMessage.includes("reference error")) {
110
+ return {
111
+ errorType: "ReferenceError",
112
+ errorMessage: error.message,
113
+ };
114
+ }
115
+ // Type Errors
116
+ if (error.name === "TypeError" || errorMessage.includes("type error")) {
117
+ return {
118
+ errorType: "TypeError",
119
+ errorMessage: error.message,
120
+ };
121
+ }
122
+ // Range Errors
123
+ if (error.name === "RangeError" || errorMessage.includes("range error")) {
124
+ return {
125
+ errorType: "RangeError",
126
+ errorMessage: error.message,
127
+ };
128
+ }
129
+ // Default case for unrecognized errors
130
+ return {
131
+ errorType: "UnknownError",
132
+ errorMessage: error.message,
133
+ };
134
+ }
135
+ const classifyErrorFromInfo = (error, info) => {
136
+ const failCause = info?.failCause;
137
+ if (!failCause) {
138
+ return {
139
+ errorType: "UnknownError",
140
+ errorMessage: error.message,
141
+ };
142
+ }
143
+ if (failCause.textNotFound) {
144
+ return {
145
+ errorType: "TextNotFoundError",
146
+ errorMessage: failCause.lastError,
147
+ };
148
+ }
149
+ if (failCause.iframeNotFound) {
150
+ return {
151
+ errorType: "IframeNotFoundError",
152
+ errorMessage: failCause.lastError,
153
+ };
154
+ }
155
+ if (failCause.locatorNotFound) {
156
+ return {
157
+ errorType: "ElementNotFoundError",
158
+ errorMessage: failCause.lastError,
159
+ };
160
+ }
161
+ if (failCause.foundMultiple) {
162
+ return {
163
+ errorType: "MultipleElementsFoundError",
164
+ errorMessage: failCause.lastError ?? `Found ${failCause.count} elements`,
165
+ };
166
+ }
167
+ return {
168
+ errorType: "UnknownError",
169
+ errorMessage: error.message,
170
+ };
171
+ };
172
+ const getHumanReadableErrorMessage = (error, info) => {
173
+ // @ts-ignore
174
+ if (error.errors && error.errors.length > 0) {
175
+ // @ts-ignore
176
+ return getHumanReadableErrorMessage(error.errors[0], info);
177
+ }
178
+ let errorClassification = classifyErrorFromInfo(error, info);
179
+ if (errorClassification.errorType === "UnknownError") {
180
+ errorClassification = classifyPlaywrightError(error);
181
+ }
182
+ if (errorClassification.errorType === "UnknownError") {
183
+ errorClassification = classifyJSError(error);
184
+ }
185
+ return errorClassification;
186
+ };
187
+ export { getHumanReadableErrorMessage };
188
+ //# sourceMappingURL=error-messages.js.map