automation_model 1.0.501-dev → 1.0.501

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 (77) hide show
  1. package/README.md +133 -0
  2. package/lib/analyze_helper.js.map +1 -1
  3. package/lib/api.d.ts +2 -2
  4. package/lib/api.js +163 -121
  5. package/lib/api.js.map +1 -1
  6. package/lib/auto_page.d.ts +7 -2
  7. package/lib/auto_page.js +300 -17
  8. package/lib/auto_page.js.map +1 -1
  9. package/lib/browser_manager.d.ts +6 -3
  10. package/lib/browser_manager.js +237 -53
  11. package/lib/browser_manager.js.map +1 -1
  12. package/lib/bruno.d.ts +2 -0
  13. package/lib/bruno.js +381 -0
  14. package/lib/bruno.js.map +1 -0
  15. package/lib/check_performance.d.ts +1 -0
  16. package/lib/check_performance.js +57 -0
  17. package/lib/check_performance.js.map +1 -0
  18. package/lib/command_common.d.ts +5 -4
  19. package/lib/command_common.js +126 -22
  20. package/lib/command_common.js.map +1 -1
  21. package/lib/date_time.js.map +1 -1
  22. package/lib/drawRect.js.map +1 -1
  23. package/lib/environment.d.ts +1 -0
  24. package/lib/environment.js +1 -0
  25. package/lib/environment.js.map +1 -1
  26. package/lib/error-messages.d.ts +6 -0
  27. package/lib/error-messages.js +206 -0
  28. package/lib/error-messages.js.map +1 -0
  29. package/lib/file_checker.d.ts +1 -0
  30. package/lib/file_checker.js +172 -0
  31. package/lib/file_checker.js.map +1 -0
  32. package/lib/find_function.js.map +1 -1
  33. package/lib/generation_scripts.d.ts +4 -0
  34. package/lib/generation_scripts.js +2 -0
  35. package/lib/generation_scripts.js.map +1 -0
  36. package/lib/index.d.ts +3 -0
  37. package/lib/index.js +4 -0
  38. package/lib/index.js.map +1 -1
  39. package/lib/init_browser.d.ts +4 -3
  40. package/lib/init_browser.js +173 -96
  41. package/lib/init_browser.js.map +1 -1
  42. package/lib/locate_element.js +16 -14
  43. package/lib/locate_element.js.map +1 -1
  44. package/lib/locator.d.ts +37 -0
  45. package/lib/locator.js +172 -0
  46. package/lib/locator.js.map +1 -1
  47. package/lib/locator_log.d.ts +26 -0
  48. package/lib/locator_log.js +69 -0
  49. package/lib/locator_log.js.map +1 -0
  50. package/lib/network.d.ts +3 -1
  51. package/lib/network.js +418 -68
  52. package/lib/network.js.map +1 -1
  53. package/lib/route.d.ts +83 -0
  54. package/lib/route.js +691 -0
  55. package/lib/route.js.map +1 -0
  56. package/lib/scripts/axe.mini.js +23989 -0
  57. package/lib/snapshot_validation.d.ts +37 -0
  58. package/lib/snapshot_validation.js +360 -0
  59. package/lib/snapshot_validation.js.map +1 -0
  60. package/lib/stable_browser.d.ts +148 -47
  61. package/lib/stable_browser.js +2623 -824
  62. package/lib/stable_browser.js.map +1 -1
  63. package/lib/table.d.ts +15 -0
  64. package/lib/table.js +257 -0
  65. package/lib/table.js.map +1 -0
  66. package/lib/table_analyze.js.map +1 -1
  67. package/lib/table_helper.d.ts +19 -0
  68. package/lib/table_helper.js +130 -0
  69. package/lib/table_helper.js.map +1 -0
  70. package/lib/test_context.d.ts +6 -0
  71. package/lib/test_context.js +5 -0
  72. package/lib/test_context.js.map +1 -1
  73. package/lib/utils.d.ts +38 -3
  74. package/lib/utils.js +754 -35
  75. package/lib/utils.js.map +1 -1
  76. package/package.json +31 -13
  77. package/lib/axe/axe.mini.js +0 -12
@@ -0,0 +1,172 @@
1
+ import * as fs from "fs"; // sync fs
2
+ import * as path from "path";
3
+ import { promises as fsAsync } from "fs"; // async fs
4
+ import { _commandError, _commandFinally, _preCommand } from "./command_common.js";
5
+ import { Types } from "./stable_browser.js";
6
+ import { replaceWithLocalTestData } from "./utils.js";
7
+ const checkFileAccess = (filePath, accessMode) => {
8
+ return new Promise((resolve) => {
9
+ fs.access(filePath, accessMode, (err) => {
10
+ resolve(!err);
11
+ });
12
+ });
13
+ };
14
+ const getFileName = (filePath) => {
15
+ const platform = process.platform;
16
+ return platform === "win32" ? filePath.split("\\").pop() || "" : filePath.split("/").pop() || "";
17
+ };
18
+ // Simplified regex check
19
+ function testForRegex(text) {
20
+ return text.startsWith("regex:");
21
+ }
22
+ export const verifyFileExists = async (filePath, options, context, world) => {
23
+ if (!options)
24
+ options = {};
25
+ const fileName = getFileName(filePath);
26
+ let isSoft = false;
27
+ const match = filePath.match(/(soft:)?(regex:|exact:|contains:)(.*)/);
28
+ if (match) {
29
+ isSoft = !!match[1]; // true if 'soft:' is present
30
+ }
31
+ const state = {
32
+ locate: false,
33
+ scroll: false,
34
+ screenshot: false,
35
+ highlight: false,
36
+ throwError: !isSoft, // don't throw error for soft assertions
37
+ operation: "verifyFileExists",
38
+ value: filePath,
39
+ text: `Verify file ${fileName} exists`,
40
+ options,
41
+ type: Types.VERIFY_FILE_EXISTS,
42
+ world,
43
+ };
44
+ await _preCommand(state, context.web);
45
+ try {
46
+ filePath = (await replaceWithLocalTestData(filePath, world, true, false, context, context.web, false));
47
+ }
48
+ catch (err) {
49
+ // Ignore error
50
+ }
51
+ try {
52
+ let pathToMatch = filePath;
53
+ if (isSoft) {
54
+ pathToMatch = filePath.replace(/^soft:/, ""); // remove soft: prefix for parsing
55
+ }
56
+ let dir;
57
+ let input;
58
+ console.log("pathSeparator", path.sep);
59
+ if (pathToMatch.includes("regex:")) {
60
+ const regexIndex = pathToMatch.indexOf("regex:");
61
+ // Handle both forward slashes and backslashes before regex:
62
+ let dirPart = pathToMatch.substring(0, regexIndex);
63
+ // Remove trailing slash/backslash
64
+ if (dirPart.endsWith("/") || dirPart.endsWith("\\")) {
65
+ dirPart = dirPart.slice(0, -1);
66
+ }
67
+ dir = dirPart;
68
+ input = pathToMatch.substring(regexIndex);
69
+ }
70
+ else {
71
+ // Use path.sep to handle both forward and backward slashes
72
+ const pathSeparator = path.sep;
73
+ const lastSlashIndex = pathToMatch.lastIndexOf(pathSeparator);
74
+ // If no separator found, try the other separator (for mixed paths)
75
+ if (lastSlashIndex === -1) {
76
+ const alternativeSeparator = pathSeparator === "/" ? "\\" : "/";
77
+ const altLastSlashIndex = pathToMatch.lastIndexOf(alternativeSeparator);
78
+ if (altLastSlashIndex !== -1) {
79
+ dir = pathToMatch.substring(0, altLastSlashIndex);
80
+ input = pathToMatch.substring(altLastSlashIndex + 1);
81
+ }
82
+ else {
83
+ // No separator found, assume current directory
84
+ dir = ".";
85
+ input = pathToMatch;
86
+ }
87
+ }
88
+ else {
89
+ dir = pathToMatch.substring(0, lastSlashIndex);
90
+ input = pathToMatch.substring(lastSlashIndex + 1);
91
+ }
92
+ }
93
+ if (isSoft) {
94
+ dir = dir.slice(0, -5);
95
+ }
96
+ console.log(`Directory to check: ${dir}`);
97
+ console.log(`Input pattern: ${input}`);
98
+ const files = await fsAsync.readdir(dir);
99
+ let found = false;
100
+ if (input.startsWith("exact:")) {
101
+ const target = input.replace("exact:", "");
102
+ found = files.includes(target);
103
+ }
104
+ else if (input.startsWith("contains:")) {
105
+ const target = input.replace("contains:", "");
106
+ found = files.some((f) => f.includes(target));
107
+ }
108
+ else if (input.startsWith("format:")) {
109
+ const extension = input.replace("format:", "");
110
+ found = files.some((f) => f.endsWith(`.${extension}`));
111
+ }
112
+ else if (testForRegex(input)) {
113
+ let raw = input.replace("regex:", "").trim(); // e.g. "/file/i" or "file.*::i"
114
+ let pattern = raw;
115
+ let flags = "";
116
+ // Normalize delimiters: convert backslash delimiters to forward slash delimiters
117
+ // This preserves the regex pattern while standardizing the delimiter format
118
+ if (raw.startsWith("\\") && raw.lastIndexOf("\\") > 0) {
119
+ // Convert \pattern\flags to /pattern/flags format
120
+ const lastBackslash = raw.lastIndexOf("\\");
121
+ const patternPart = raw.substring(1, lastBackslash);
122
+ const flagsPart = raw.substring(lastBackslash + 1);
123
+ raw = `/${patternPart}/${flagsPart}`;
124
+ }
125
+ // Now handle the standardized format
126
+ if (raw.startsWith("/") && raw.lastIndexOf("/") > 0) {
127
+ // Standard regex format: /pattern/flags
128
+ const lastSlash = raw.lastIndexOf("/");
129
+ flags = raw.substring(lastSlash + 1);
130
+ pattern = raw.substring(1, lastSlash);
131
+ }
132
+ else if (raw.includes("::")) {
133
+ // Alternative format: pattern::flags
134
+ [pattern, flags] = raw.split("::");
135
+ }
136
+ console.log(`Regex pattern: ${pattern}, flags: ${flags}`);
137
+ try {
138
+ const regex = new RegExp(pattern, flags);
139
+ found = files.some((f) => {
140
+ const matched = regex.test(f);
141
+ return matched;
142
+ });
143
+ }
144
+ catch (regexError) {
145
+ throw new Error(`Invalid regex pattern: ${pattern}`);
146
+ }
147
+ }
148
+ else {
149
+ // Fallback to exact path check
150
+ found = await checkFileAccess(pathToMatch, fs.constants.F_OK);
151
+ }
152
+ if (!found) {
153
+ console.log(`Available files in '${dir}':`, files);
154
+ if (!isSoft) {
155
+ throw new Error(`No file matched the pattern: ${filePath}`);
156
+ }
157
+ else {
158
+ console.warn(`Soft assertion failed for pattern: ${filePath}`);
159
+ }
160
+ }
161
+ else {
162
+ console.log(`File verification successful for pattern: ${input}`);
163
+ }
164
+ }
165
+ catch (err) {
166
+ await _commandError(state, err, context.web);
167
+ }
168
+ finally {
169
+ await _commandFinally(state, context.web);
170
+ }
171
+ };
172
+ //# sourceMappingURL=file_checker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file_checker.js","sourceRoot":"","sources":["../../src/file_checker.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"find_function.js","sourceRoot":"","sources":["../../src/find_function.ts"],"names":[],"mappings":"AAAA,MAAM,aAAa,GAAG,KAAK,EAAE,KAAiB,EAAE,EAAE;IAChD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;QAChC,OAAO,IAAI,CAAC;KACb;IACD,IAAI,QAAQ,GAAG,IAAI,CAAC;IACpB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;QACxB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YAC7B,QAAQ,GAAG,IAAI,CAAC;YAChB,MAAM;SACP;KACF;IACD,IAAI,CAAC,QAAQ,EAAE;QACb,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;KACrB;IACD,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IAC9C,IAAI,CAAC,cAAc,EAAE;QACnB,OAAO,QAAQ,CAAC;KACjB;IACD,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC;IACnC,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,qCAAqC;IACrC,mBAAmB;IACnB,MAAM;IAEN,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE9C,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;IACf,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACrC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC;QAC/B,IAAI,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;YACrC,SAAS;SACV;QACD,MAAM,mBAAmB,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnE,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE;YACpC,IAAI,mBAAmB,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;gBAC5C,KAAK,EAAE,CAAC;aACT;SACF;QACD,IAAI,KAAK,GAAG,SAAS,EAAE;YACrB,SAAS,GAAG,KAAK,CAAC;YAClB,KAAK,GAAG,CAAC,CAAC;SACX;KACF;IACD,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;QAChB,OAAO,QAAQ,CAAC;KACjB;IACD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC;AACtB,CAAC,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"find_function.js","sourceRoot":"","sources":["../../src/find_function.ts"],"names":[],"mappings":"AAAA,MAAM,aAAa,GAAG,KAAK,EAAE,KAAiB,EAAE,EAAE;IAChD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,QAAQ,GAAG,IAAI,CAAC;IACpB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,QAAQ,GAAG,IAAI,CAAC;YAChB,MAAM;QACR,CAAC;IACH,CAAC;IACD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC;IACD,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IAC9C,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC;IACnC,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,qCAAqC;IACrC,mBAAmB;IACnB,MAAM;IAEN,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE9C,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;IACf,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC;QAC/B,IAAI,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YACtC,SAAS;QACX,CAAC;QACD,MAAM,mBAAmB,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnE,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACrC,IAAI,mBAAmB,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC7C,KAAK,EAAE,CAAC;YACV,CAAC;QACH,CAAC;QACD,IAAI,KAAK,GAAG,SAAS,EAAE,CAAC;YACtB,SAAS,GAAG,KAAK,CAAC;YAClB,KAAK,GAAG,CAAC,CAAC;QACZ,CAAC;IACH,CAAC;IACD,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;QACjB,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC;AACtB,CAAC,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,4 @@
1
+ export interface InitScripts {
2
+ recorderCjs: string | null;
3
+ scripts: string[] | null;
4
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=generation_scripts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generation_scripts.js","sourceRoot":"","sources":["../../src/generation_scripts.ts"],"names":[],"mappings":""}
package/lib/index.d.ts CHANGED
@@ -7,3 +7,6 @@ export * from "./browser_manager.js";
7
7
  export * from "./analyze_helper.js";
8
8
  export * from "./find_function.js";
9
9
  export * from "./utils.js";
10
+ export * from "./table.js";
11
+ export * from "./bruno.js";
12
+ export * from "./file_checker.js";
package/lib/index.js CHANGED
@@ -7,4 +7,8 @@ export * from "./browser_manager.js";
7
7
  export * from "./analyze_helper.js";
8
8
  export * from "./find_function.js";
9
9
  export * from "./utils.js";
10
+ export * from "./table.js";
11
+ export * from "./bruno.js";
12
+ export * from "./file_checker.js";
13
+ //export * from "./profile.js";
10
14
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,+BAA+B"}
@@ -1,8 +1,9 @@
1
1
  import { Environment } from "./environment.js";
2
- import { TestContext } from "./test_context.js";
3
2
  import { StableBrowser } from "./stable_browser.js";
4
3
  import { Browser as PlaywrightBrowser } from "playwright";
5
4
  import { Browser } from "./browser_manager.js";
6
- declare const getContext: (environment: Environment | null, headless: boolean | undefined, world: any, logger?: null, appName?: string | null, createStable?: boolean, stable?: StableBrowser | null, moveToRight?: number) => Promise<TestContext>;
5
+ import { InitScripts } from "./generation_scripts.js";
6
+ declare const getContext: (environment: Environment | null, headless: boolean | undefined, world: any, logger?: null, appName?: string | null, createStable?: boolean, web?: StableBrowser | null, moveToRight?: number, reportFolder?: string | null, initScripts?: InitScripts | null, storageState?: any | null, tags?: string[] | null) => Promise<any>;
7
+ declare const refreshBrowser: (web: any, sessionPath: string, world: any) => Promise<void>;
7
8
  declare const closeBrowser: (browser?: Browser | PlaywrightBrowser) => Promise<void>;
8
- export { getContext, closeBrowser };
9
+ export { getContext, closeBrowser, refreshBrowser };
@@ -1,116 +1,189 @@
1
- import fs from "node:fs";
1
+ import fs from "fs";
2
2
  import path from "path";
3
3
  import { Environment } from "./environment.js";
4
4
  import { browserManager } from "./browser_manager.js";
5
5
  import { TestContext } from "./test_context.js";
6
6
  import { StableBrowser } from "./stable_browser.js";
7
7
  import { Api } from "./api.js";
8
- // let environment = null;
8
+ import { measureAsync } from "./utils.js";
9
9
  // init browser create context and page, if context and page are not null
10
- const getContext = async function (environment, headless = false, world, logger, appName, createStable = true, stable = null, moveToRight = -1) {
11
- if (environment === null) {
12
- environment = initEnvironment();
13
- }
14
- if (appName && !environment.apps && !environment.apps[appName]) {
15
- throw new Error(`App ${appName} not found in environment`);
16
- }
17
- if (appName) {
18
- environment = environment.apps[appName];
19
- }
20
- const { cookies, origins } = environment;
21
- if (cookies) {
22
- for (let i = 0; i < cookies.length; i++) {
23
- const cookie = cookies[i];
24
- if (cookie.expires === "undefined") {
25
- delete cookie.expires;
10
+ const getContext = async function (environment, headless = false, world, logger, appName, createStable = true, web = null, moveToRight = -1, reportFolder = null, initScripts = null, storageState = null, tags = null) {
11
+ return measureAsync("browser Launch", async () => {
12
+ if (environment === null) {
13
+ environment = initEnvironment();
14
+ }
15
+ if (appName && !environment.apps && !environment.apps[appName]) {
16
+ throw new Error(`App ${appName} not found in environment`);
17
+ }
18
+ if (appName) {
19
+ environment = environment.apps[appName];
20
+ }
21
+ const { cookies, origins } = environment;
22
+ if (cookies) {
23
+ for (let i = 0; i < cookies.length; i++) {
24
+ const cookie = cookies[i];
25
+ if (cookie.expires === "undefined") {
26
+ delete cookie.expires;
27
+ }
26
28
  }
27
29
  }
28
- }
29
- let extensionPath = undefined;
30
- let userDataDirPath = undefined;
31
- let aiConfigFile = "ai_config.json";
32
- if (process.env.PROJECT_PATH) {
33
- aiConfigFile = path.join(process.env.PROJECT_PATH, "ai_config.json");
34
- }
35
- if (fs.existsSync(aiConfigFile)) {
36
- const configuration = JSON.parse(fs.readFileSync(aiConfigFile, "utf8"));
37
- if (configuration.userDataDirPath) {
38
- userDataDirPath = configuration.userDataDirPath;
30
+ let extensionPath = undefined;
31
+ let userDataDirPath = undefined;
32
+ let userAgent = undefined;
33
+ let aiConfigFile = "ai_config.json";
34
+ let channel = undefined;
35
+ if (process.env.PROJECT_PATH) {
36
+ aiConfigFile = path.join(process.env.PROJECT_PATH, "ai_config.json");
39
37
  }
40
- if (configuration.extensionPath) {
41
- extensionPath = configuration.extensionPath;
38
+ let configuration = {};
39
+ if (fs.existsSync(aiConfigFile)) {
40
+ configuration = JSON.parse(fs.readFileSync(aiConfigFile, "utf8"));
41
+ if (configuration.userDataDirPath) {
42
+ userDataDirPath = configuration.userDataDirPath;
43
+ }
44
+ if (configuration.extensionPath) {
45
+ extensionPath = configuration.extensionPath;
46
+ }
47
+ if (configuration.useGoogleChrome === true) {
48
+ channel = "chrome";
49
+ }
50
+ else if (configuration.useMicrosoftEdge === true) {
51
+ channel = "msedge";
52
+ }
53
+ if (configuration.overrideUserAgent) {
54
+ userAgent = configuration.overrideUserAgent;
55
+ }
56
+ }
57
+ let usedStorageState = null;
58
+ usedStorageState = { cookies, origins };
59
+ let downloadsPath = "downloads";
60
+ if (reportFolder) {
61
+ downloadsPath = path.join(reportFolder, "downloads");
62
+ }
63
+ else if (web && web.context && web.context.reportFolder) {
64
+ reportFolder = web.context.reportFolder;
65
+ downloadsPath = path.join(web.context.reportFolder, "downloads");
66
+ }
67
+ if (world) {
68
+ world.downloadsPath = downloadsPath;
69
+ }
70
+ if (web && web.context) {
71
+ web.context.downloadsPath = downloadsPath;
72
+ }
73
+ // check if data.json exists in the report folder
74
+ // and if it contain storageState field, if so, use it
75
+ if (reportFolder) {
76
+ const dataFile = path.join(reportFolder, "data.json");
77
+ if (fs.existsSync(dataFile)) {
78
+ const data = fs.readFileSync(dataFile, "utf8");
79
+ const dataObject = JSON.parse(data);
80
+ if (dataObject.storageState) {
81
+ console.log("Init browser with storage state");
82
+ usedStorageState = dataObject.storageState;
83
+ }
84
+ }
85
+ }
86
+ if (storageState) {
87
+ usedStorageState = storageState;
88
+ }
89
+ let browser = await browserManager.createBrowser(headless, usedStorageState, extensionPath, userDataDirPath, reportFolder ? reportFolder : ".", userAgent, channel, configuration, initScripts, tags);
90
+ let context = new TestContext();
91
+ context.browser = browser.browser;
92
+ context.browserObject = browser;
93
+ context.playContext = browser.context;
94
+ context.page = browser.page;
95
+ context.headless = headless;
96
+ context.environment = environment;
97
+ context.browserName = browser.browser ? browser.browser.browserType().name() : "unknown";
98
+ context.reportFolder = reportFolder;
99
+ context.initScripts = initScripts;
100
+ if (process.env.CDP_CONNECT_URL) {
101
+ // settin it to true will not navigate
102
+ context.navigate = true;
103
+ }
104
+ if (createStable) {
105
+ context.stable = new StableBrowser(context.browser, context.page, logger, context, world);
106
+ context.web = context.stable;
107
+ }
108
+ else {
109
+ context.stable = web;
110
+ context.web = web;
111
+ }
112
+ context.api = new Api(logger);
113
+ if (moveToRight === -1) {
114
+ moveToRight = parseInt(process.env.CHROME_POSITION || "-1", 10);
115
+ }
116
+ if (moveToRight > 0 && context.browserName === "chromium") {
117
+ const playContext = context.playContext;
118
+ const client = await playContext.newCDPSession(context.page);
119
+ const { windowId } = await client.send("Browser.getWindowForTarget");
120
+ const window = await client.send("Browser.getWindowBounds", {
121
+ windowId,
122
+ });
123
+ await client.send("Browser.setWindowBounds", {
124
+ windowId,
125
+ bounds: {
126
+ left: window.bounds.left + moveToRight,
127
+ top: 0,
128
+ },
129
+ });
130
+ await client.detach();
131
+ }
132
+ return context;
133
+ });
134
+ };
135
+ const refreshBrowser = async function (web, sessionPath, world) {
136
+ if (web.trace) {
137
+ if (web.traceGroupName) {
138
+ await web.context.playContext.tracing.groupEnd();
139
+ }
140
+ await web.context.playContext.tracing.stop();
141
+ }
142
+ await web.context.browserObject.close();
143
+ web.context.pages = [];
144
+ let storageState = null;
145
+ if (sessionPath) {
146
+ if (!fs.existsSync(sessionPath)) {
147
+ throw new Error("Session path not found: " + sessionPath);
148
+ }
149
+ const data = fs.readFileSync(sessionPath, "utf8");
150
+ storageState = JSON.parse(data).storageState;
151
+ }
152
+ const newContext = await getContext(web.context.environment, web.context.headless, world, null, web.context.appName, false, web, -1, web.context.reportFolder, web.context.initScripts, storageState, web.tags);
153
+ web.context.browser = newContext.browser;
154
+ web.context.browserObject = newContext.browserObject;
155
+ web.context.playContext = newContext.playContext;
156
+ web.context.page = newContext.page;
157
+ web.page = newContext.page;
158
+ web.context.pages.push(newContext.page);
159
+ web.context.headless = newContext.headless;
160
+ web.context.environment = newContext.environment;
161
+ web.context.browserName = newContext.browserName;
162
+ web.context.reportFolder = newContext.reportFolder;
163
+ web.context.initScripts = newContext.initScripts;
164
+ if (web.trace) {
165
+ await web.context.playContext.tracing.start({ screenshots: true, snapshots: true });
166
+ if (web.traceGroupName) {
167
+ // start trace group again
168
+ await web.context.playContext.tracing.group(web.traceGroupName);
42
169
  }
43
170
  }
44
- const storageState = { cookies, origins };
45
- let downloadsPath = "downloads";
46
- if (world && world.reportFolder) {
47
- downloadsPath = path.join(world.reportFolder, "downloads");
48
- }
49
- else if (stable && stable.context && stable.context.reportFolder) {
50
- downloadsPath = path.join(stable.context.reportFolder, "downloads");
51
- }
52
- if (world) {
53
- world.downloadsPath = downloadsPath;
54
- }
55
- if (stable && stable.context) {
56
- stable.context.downloadsPath = downloadsPath;
57
- }
58
- let browser = await browserManager.createBrowser(headless, storageState, extensionPath, userDataDirPath);
59
- let context = new TestContext();
60
- context.browser = browser.browser;
61
- context.playContext = browser.context;
62
- context.page = browser.page;
63
- context.headless = headless;
64
- context.environment = environment;
65
- context.browserName = browser.browser ? browser.browser.browserType().name() : "unknown";
66
- if (createStable) {
67
- context.stable = new StableBrowser(context.browser, context.page, logger, context, world);
68
- }
69
- else {
70
- context.stable = stable;
71
- }
72
- context.api = new Api(logger);
73
- if (moveToRight > 0 && context.browserName === "chromium") {
74
- // move the borwser to the top right corner of the screen
75
- // create a cdp session
76
- // Get CDP session
77
- const playContext = context.playContext;
78
- const client = await playContext.newCDPSession(context.page);
79
- // Get window ID for the current target
80
- const { windowId } = await client.send("Browser.getWindowForTarget");
81
- //console.log(windowId);
82
- // get the window for the current target
83
- const window = await client.send("Browser.getWindowBounds", {
84
- windowId,
85
- });
86
- //console.log(window);
87
- await client.send("Browser.setWindowBounds", {
88
- windowId,
89
- bounds: {
90
- left: window.bounds.left + moveToRight,
91
- },
92
- });
93
- // close cdp
94
- await client.detach();
95
- }
96
- // await _initCookies(context);
97
- return context;
171
+ await web.goto(web.context.environment.baseUrl);
98
172
  };
99
173
  const closeBrowser = async function (browser) {
100
174
  await browserManager.closeBrowser(browser);
101
175
  };
102
176
  const initEnvironment = function () {
103
- // if (environment === null) {
104
177
  const environment = new Environment();
105
178
  try {
106
179
  let envFile = "";
107
180
  const envArgVal = checkForEnvArg();
108
- if (envArgVal) {
109
- envFile = envArgVal;
110
- }
111
- else if (process.env.BLINQ_ENV) {
181
+ if (process.env.BLINQ_ENV) {
112
182
  envFile = process.env.BLINQ_ENV;
113
183
  }
184
+ else if (envArgVal) {
185
+ envFile = envArgVal;
186
+ }
114
187
  else if (fs.existsSync(path.join(process.cwd(), "env.json"))) {
115
188
  envFile = path.join(process.cwd(), "env.json");
116
189
  }
@@ -124,19 +197,23 @@ const initEnvironment = function () {
124
197
  }
125
198
  }
126
199
  }
127
- // console.log("envFile: ", envFile);
200
+ if (!envFile || !fs.existsSync(envFile)) {
201
+ throw new Error(envFile + " not found");
202
+ }
128
203
  const data = fs.readFileSync(envFile, "utf8");
129
- //console.log("data", data);
130
204
  const envObject = JSON.parse(data);
131
- //console.log("envObject", envObject);
132
205
  Object.assign(environment, envObject);
133
- //console.log("env", environment);
206
+ if (process.env.FAST_MODE === "true") {
207
+ console.log("Fast mode enabled");
208
+ }
209
+ if (process.env.SCREENSHOT_ON_FAILURE_ONLY === "true") {
210
+ console.log("Screenshot on failure only mode enabled");
211
+ }
134
212
  console.log("Base url: " + environment.baseUrl);
135
213
  }
136
214
  catch (err) {
137
215
  console.error("Error reading env.json", err);
138
216
  }
139
- // }
140
217
  return environment;
141
218
  };
142
219
  const checkForEnvArg = function () {
@@ -150,5 +227,5 @@ const checkForEnvArg = function () {
150
227
  }
151
228
  return null;
152
229
  };
153
- export { getContext, closeBrowser };
230
+ export { getContext, closeBrowser, refreshBrowser };
154
231
  //# sourceMappingURL=init_browser.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init_browser.js","sourceRoot":"","sources":["../../src/init_browser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init_browser.js","sourceRoot":"","sources":["../../src/init_browser.ts"],"names":[],"mappings":"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"}