automation_model 1.0.0-amdocs

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 (75) hide show
  1. package/README.md +130 -0
  2. package/lib/analyze_helper.d.ts +9 -0
  3. package/lib/analyze_helper.js +161 -0
  4. package/lib/analyze_helper.js.map +1 -0
  5. package/lib/api.d.ts +55 -0
  6. package/lib/api.js +349 -0
  7. package/lib/api.js.map +1 -0
  8. package/lib/auto_page.d.ts +7 -0
  9. package/lib/auto_page.js +199 -0
  10. package/lib/auto_page.js.map +1 -0
  11. package/lib/browser_manager.d.ts +32 -0
  12. package/lib/browser_manager.js +257 -0
  13. package/lib/browser_manager.js.map +1 -0
  14. package/lib/command_common.d.ts +6 -0
  15. package/lib/command_common.js +182 -0
  16. package/lib/command_common.js.map +1 -0
  17. package/lib/date_time.d.ts +10 -0
  18. package/lib/date_time.js +45 -0
  19. package/lib/date_time.js.map +1 -0
  20. package/lib/drawRect.d.ts +2 -0
  21. package/lib/drawRect.js +25 -0
  22. package/lib/drawRect.js.map +1 -0
  23. package/lib/environment.d.ts +27 -0
  24. package/lib/environment.js +15 -0
  25. package/lib/environment.js.map +1 -0
  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/find_function.d.ts +2 -0
  30. package/lib/find_function.js +51 -0
  31. package/lib/find_function.js.map +1 -0
  32. package/lib/generation_scripts.d.ts +4 -0
  33. package/lib/generation_scripts.js +2 -0
  34. package/lib/generation_scripts.js.map +1 -0
  35. package/lib/index.d.ts +10 -0
  36. package/lib/index.js +11 -0
  37. package/lib/index.js.map +1 -0
  38. package/lib/init_browser.d.ts +10 -0
  39. package/lib/init_browser.js +216 -0
  40. package/lib/init_browser.js.map +1 -0
  41. package/lib/locate_element.d.ts +7 -0
  42. package/lib/locate_element.js +215 -0
  43. package/lib/locate_element.js.map +1 -0
  44. package/lib/locator.d.ts +70 -0
  45. package/lib/locator.js +392 -0
  46. package/lib/locator.js.map +1 -0
  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 -0
  51. package/lib/network.js +183 -0
  52. package/lib/network.js.map +1 -0
  53. package/lib/popups.d.ts +0 -0
  54. package/lib/popups.js +36 -0
  55. package/lib/popups.js.map +1 -0
  56. package/lib/scripts/axe.mini.js +12 -0
  57. package/lib/stable_browser.d.ts +188 -0
  58. package/lib/stable_browser.js +3322 -0
  59. package/lib/stable_browser.js.map +1 -0
  60. package/lib/table.d.ts +13 -0
  61. package/lib/table.js +187 -0
  62. package/lib/table.js.map +1 -0
  63. package/lib/table_analyze.d.ts +4 -0
  64. package/lib/table_analyze.js +95 -0
  65. package/lib/table_analyze.js.map +1 -0
  66. package/lib/table_helper.d.ts +19 -0
  67. package/lib/table_helper.js +101 -0
  68. package/lib/table_helper.js.map +1 -0
  69. package/lib/test_context.d.ts +21 -0
  70. package/lib/test_context.js +17 -0
  71. package/lib/test_context.js.map +1 -0
  72. package/lib/utils.d.ts +21 -0
  73. package/lib/utils.js +601 -0
  74. package/lib/utils.js.map +1 -0
  75. package/package.json +56 -0
package/lib/api.js ADDED
@@ -0,0 +1,349 @@
1
+ import axios from "axios";
2
+ import { existsSync, readFileSync } from "fs";
3
+ import path from "path";
4
+ import tunnel from "tunnel";
5
+ import objectPath from "object-path";
6
+ import { _commandFinally } from "./command_common.js";
7
+ import { getHumanReadableErrorMessage } from "./error-messages.js";
8
+ class Api {
9
+ logger;
10
+ axiosClient;
11
+ constructor(logger) {
12
+ this.logger = logger;
13
+ if (!logger) {
14
+ this.logger = console;
15
+ }
16
+ const agent = this.getProxyObject(process.env.PROXY);
17
+ if (agent) {
18
+ this.logger.debug("proxy object");
19
+ this.logger.debug(agent);
20
+ }
21
+ this.axiosClient = axios.create({
22
+ httpsAgent: agent,
23
+ proxy: false,
24
+ });
25
+ }
26
+ getProxyObject(proxy) {
27
+ if (!proxy) {
28
+ proxy = process.env.PROXY;
29
+ }
30
+ if (!proxy) {
31
+ return null;
32
+ }
33
+ try {
34
+ const url = new URL(proxy);
35
+ const proxyObject = {
36
+ host: url.hostname,
37
+ port: Number(url.port),
38
+ };
39
+ const { username, password } = url;
40
+ if (username && password) {
41
+ proxyObject.proxyAuth = `${username}:${password}`;
42
+ }
43
+ return tunnel.httpsOverHttp({ proxy: proxyObject });
44
+ }
45
+ catch (error) {
46
+ this.logger.error("Error while parsing proxy url");
47
+ this.logger.error(error);
48
+ return null;
49
+ }
50
+ }
51
+ async axiosClientRequest(config) {
52
+ for (let i = 0; i < 2; i++) {
53
+ try {
54
+ const res = this.axiosClient(config);
55
+ // this.logger.info("axios response");
56
+ // this.logger.info(res);
57
+ return res;
58
+ }
59
+ catch (error) {
60
+ this.logger.info("axios error");
61
+ this.logger.info(error);
62
+ if (i === 1) {
63
+ this.logger.error("Error while sending request " + error.message);
64
+ throw error;
65
+ }
66
+ if ((error.response && error.response.data.includes("self signed certificate")) ||
67
+ (error.message && error.message.includes("self signed certificate"))) {
68
+ process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
69
+ this.logger.info("NODE_TLS_REJECT_UNAUTHORIZED = " + process.env.NODE_TLS_REJECT_UNAUTHORIZED);
70
+ }
71
+ }
72
+ }
73
+ this.logger.debug("axios request");
74
+ this.logger.debug(config);
75
+ throw new Error("Request failed after 2 attempts"); // Throw an error or return a value explicitly here
76
+ }
77
+ setProxy(proxy) {
78
+ const agent = this.getProxyObject(proxy);
79
+ this.logger.info(agent);
80
+ this.axiosClient = axios.create({ proxy: false, httpsAgent: agent });
81
+ }
82
+ async request(config, params, testData, world) {
83
+ // return await this.axiosClientRequest<T>(config);
84
+ const startTime = Date.now();
85
+ let result = null;
86
+ const state = {
87
+ startTime,
88
+ params,
89
+ testData,
90
+ world,
91
+ element_name: "API",
92
+ type: "api_test",
93
+ text: `Api test`,
94
+ info: {},
95
+ };
96
+ const info = {
97
+ tests: config.tests,
98
+ testsPassed: 0,
99
+ failCause: {},
100
+ };
101
+ info.tests?.forEach((test) => {
102
+ test.fail = true;
103
+ });
104
+ state.info = info;
105
+ let error = null;
106
+ const fixedUrl = repStrWParamTData(config.url, params, testData);
107
+ const fixedQueryParams = config.queryParams.map((param) => {
108
+ return {
109
+ key: repStrWParamTData(param.key, params, testData),
110
+ value: repStrWParamTData(param.value, params, testData),
111
+ };
112
+ });
113
+ const fixedReqHeaders = config.headers.map((header) => {
114
+ return {
115
+ key: repStrWParamTData(header.key, params, testData),
116
+ value: repStrWParamTData(header.value, params, testData),
117
+ enabled: header.enabled,
118
+ };
119
+ });
120
+ if (config.authType === "Bearer") {
121
+ //@ts-ignore
122
+ config.tokens.token = repStrWParamTData(config.tokens.token, params, testData);
123
+ }
124
+ else if (config.authType === "Basic") {
125
+ //@ts-ignore
126
+ config.tokens.username = repStrWParamTData(config.tokens.username, params, testData);
127
+ //@ts-ignore
128
+ config.tokens.password = repStrWParamTData(config.tokens.password, params, testData);
129
+ }
130
+ const formattedUrl = fixedQueryParams.filter((data) => !!data.key).length > 0
131
+ ? `${fixedUrl}?${fixedQueryParams.map((data) => `${data.key}=${data.value}`).join("&")}`
132
+ : fixedUrl;
133
+ const axiosConfig = {
134
+ method: config.method,
135
+ url: formattedUrl,
136
+ headers: fixedReqHeaders.reduce((acc, header) => {
137
+ if (header.enabled && header.key.length > 0)
138
+ acc[header.key] = header.value;
139
+ return acc;
140
+ }, {}),
141
+ data: config.bodyType === "raw" ? config.body : undefined,
142
+ maxRedirects: config.settings.maxRedirects,
143
+ validateStatus: config.settings.strictHttpParser ? (status) => status >= 200 && status < 300 : null,
144
+ };
145
+ if (config.authType === "Bearer") {
146
+ //@ts-ignore
147
+ axiosConfig.headers["Authorization"] = `Bearer ${config.tokens.token}`;
148
+ }
149
+ else if (config.authType === "Basic" && config.tokens.username && config.tokens.password) {
150
+ //@ts-ignore
151
+ axiosConfig.headers["Authorization"] = `Basic ${btoa(`${config.tokens.username}:${config.tokens.password}`)}`;
152
+ }
153
+ // const tests = config.tests;
154
+ // let testsPassed = 0;
155
+ let res = {};
156
+ try {
157
+ res = await this.axiosClientRequest(axiosConfig);
158
+ if (res.status != config.status) {
159
+ throw new Error(`The returned status code ${res.status} doesn't match the saved status code ${config.status}`);
160
+ }
161
+ if (info.tests) {
162
+ info.tests?.forEach((test) => {
163
+ test.fail = true;
164
+ const receivedValue = getValue(res.data, test.pattern);
165
+ test.receivedValue = receivedValue;
166
+ switch (test.operator) {
167
+ case "eq":
168
+ test.fail = receivedValue !== test.value;
169
+ break;
170
+ case "ne":
171
+ test.fail = receivedValue === test.value;
172
+ break;
173
+ case "gt":
174
+ test.fail = receivedValue <= test.value;
175
+ break;
176
+ case "lt":
177
+ test.fail = receivedValue >= test.value;
178
+ break;
179
+ case "gte":
180
+ test.fail = receivedValue < test.value;
181
+ break;
182
+ case "lte":
183
+ test.fail = receivedValue > test.value;
184
+ break;
185
+ case "mat":
186
+ test.fail = !new RegExp(test.value).test(receivedValue);
187
+ break;
188
+ default:
189
+ test.fail = true;
190
+ break;
191
+ }
192
+ });
193
+ const testsFailed = info.tests.filter((test) => test.fail);
194
+ info.testsPassed = info.tests.length - testsFailed.length;
195
+ state.info.headers = res.headers;
196
+ state.info.status = res.status;
197
+ state.info.data = res.data;
198
+ if (testsFailed.length > 0) {
199
+ throw new Error("Tests failed");
200
+ }
201
+ }
202
+ return res;
203
+ }
204
+ catch (e) {
205
+ error = e;
206
+ process.env.NO_RETRAIN = "false";
207
+ this.logger.error("Error while sending request " + error.message ? error.message : error.code);
208
+ error.stack = "";
209
+ state.info.failCause.fail = true;
210
+ const errorClassification = getHumanReadableErrorMessage(error, state.info);
211
+ state.info.errorType = errorClassification.errorType;
212
+ state.info.errorMessage = errorClassification.errorMessage;
213
+ Object.assign(error, { info: state.info });
214
+ state.error = error;
215
+ state.commandError = true;
216
+ throw error;
217
+ }
218
+ finally {
219
+ const statusText = res.statusText ? res.statusText : error ? error.code : null;
220
+ state.info.statusText = statusText;
221
+ _commandFinally(state, this);
222
+ }
223
+ }
224
+ async requestWithAuth(methodName, world, token, params) {
225
+ const startTime = Date.now();
226
+ let error = null,
227
+ // tests: any = {},
228
+ res = null;
229
+ // testsPassed = 0;
230
+ const state = {
231
+ startTime,
232
+ params,
233
+ world,
234
+ element_name: "API",
235
+ type: "api_test",
236
+ text: `Api test for ${methodName}`,
237
+ info: {},
238
+ };
239
+ const apiFilePath = path.join("./features", "apis", methodName + ".json");
240
+ let result = null;
241
+ if (existsSync(apiFilePath)) {
242
+ try {
243
+ const apiRequests = JSON.parse(readFileSync(apiFilePath, "utf8"));
244
+ const info = {
245
+ tests: apiRequests.tests,
246
+ testsPassed: 0,
247
+ failCause: {},
248
+ };
249
+ state.info = info;
250
+ const useAuthHeaders = apiRequests.useAuthHeaders;
251
+ const config = JSON.parse(apiRequests.config);
252
+ if (useAuthHeaders) {
253
+ config.headers = {
254
+ ...config.headers,
255
+ Authorization: token,
256
+ };
257
+ }
258
+ res = await this.axiosClientRequest(JSON.parse(apiRequests.config));
259
+ info.tests = apiRequests.tests;
260
+ info.tests?.forEach((test) => {
261
+ test.fail = true;
262
+ const path = test === null || test === void 0 ? void 0 : test.pattern.split(".");
263
+ let lengthExists = false;
264
+ if (path[path.length - 1] === "length") {
265
+ path.pop();
266
+ lengthExists = true;
267
+ }
268
+ const value = objectPath.get(res.data, path.join("."));
269
+ if (lengthExists && value?.length == test.value) {
270
+ test.fail = false;
271
+ }
272
+ else if (Array.isArray(value)) {
273
+ test.fail = test.value != "exists";
274
+ }
275
+ else if (value == test.value) {
276
+ test.fail = false;
277
+ }
278
+ test.receivedValue = value;
279
+ });
280
+ const statusCode = config.status || 200;
281
+ if (res.status != statusCode) {
282
+ throw new Error(`The returned status code ${res.status} doesn't match the saved status code ${statusCode}`);
283
+ }
284
+ const testsFailed = info.tests.filter((test) => test.fail);
285
+ info.testsPassed = info.tests.length - testsFailed.length;
286
+ state.info.headers = res.headers;
287
+ state.info.status = res.status;
288
+ state.info.data = res.data;
289
+ if (testsFailed.length > 0) {
290
+ throw new Error("Tests failed");
291
+ }
292
+ return res;
293
+ }
294
+ catch (e) {
295
+ error = e;
296
+ process.env.NO_RETRAIN = "false";
297
+ this.logger.error("Error while sending request " + error.message ? error.message : error.code);
298
+ error.stack = "";
299
+ state.info.failCause.fail = true;
300
+ const errorClassification = getHumanReadableErrorMessage(error, state.info);
301
+ state.info.errorType = errorClassification.errorType;
302
+ state.info.errorMessage = errorClassification.errorMessage;
303
+ Object.assign(error, { info: state.info });
304
+ state.error = error;
305
+ state.commandError = true;
306
+ if (error?.stack) {
307
+ error.stack = "";
308
+ }
309
+ throw error;
310
+ }
311
+ finally {
312
+ const statusText = res.statusText ? res.statusText : error ? error.code : null;
313
+ state.info.statusText = statusText;
314
+ _commandFinally(state, this);
315
+ }
316
+ }
317
+ }
318
+ }
319
+ const repStrWParamTData = (str, params, testData) => {
320
+ let newStr = str;
321
+ Object.keys(params).forEach((key) => {
322
+ newStr = newStr.replaceAll(`"<${key.slice(1)}>"`, params[key]);
323
+ });
324
+ Object.keys(testData).forEach((key) => {
325
+ newStr = newStr.replaceAll(`{{${key}}}`, testData[key]);
326
+ });
327
+ return newStr;
328
+ };
329
+ const getValue = (data, pattern) => {
330
+ const path = pattern.split(".");
331
+ let lengthExists = false;
332
+ if (path[path.length - 1] === "length") {
333
+ path.pop();
334
+ lengthExists = true;
335
+ }
336
+ const value = objectPath.get(data, pattern);
337
+ if (lengthExists && Array.isArray(value)) {
338
+ return value?.length;
339
+ }
340
+ else if (hasValue(value)) {
341
+ return value;
342
+ }
343
+ return undefined;
344
+ };
345
+ const hasValue = (value) => {
346
+ return value !== undefined;
347
+ };
348
+ export { Api };
349
+ //# sourceMappingURL=api.js.map
package/lib/api.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { InitScripts } from "./generation_scripts.js";
2
+ declare const navigate: (path?: string) => Promise<void>;
3
+ declare const initContext: (path: string, doNavigate?: boolean, headless?: boolean, world?: any, moveToRight?: number, initScript?: InitScripts | null, envName?: string | null) => Promise<any>;
4
+ declare const closeContext: () => Promise<void>;
5
+ declare const getTestData: (currentEnv: string, world: any, dataFile?: string) => Promise<void>;
6
+ declare const resetTestData: (envPath: string, world: any) => Promise<void>;
7
+ export { initContext, navigate, closeContext, resetTestData, getTestData };
@@ -0,0 +1,199 @@
1
+ import { browserManager } from "./browser_manager.js";
2
+ import { getContext } from "./init_browser.js";
3
+ import fs, { existsSync } from "fs";
4
+ import path from "path";
5
+ import { _getDataFile, decrypt } from "./utils.js";
6
+ let context = null;
7
+ let reportFolder = "";
8
+ const navigate = async (path = "") => {
9
+ if (path === null && context.navigate === true) {
10
+ return;
11
+ }
12
+ let url = null;
13
+ if (path === null) {
14
+ url = context.environment.baseUrl;
15
+ }
16
+ else {
17
+ url = new URL(path, context.environment.baseUrl).href;
18
+ }
19
+ await context.stable.goto(url);
20
+ context.navigate = true;
21
+ await context.stable.waitForPageLoad();
22
+ };
23
+ const _findEmptyFolder = (folder) => {
24
+ if (!folder) {
25
+ folder = "./runs";
26
+ }
27
+ if (!fs.existsSync(folder)) {
28
+ fs.mkdirSync(folder);
29
+ }
30
+ if (process.env.REPORT_FOLDER) {
31
+ return process.env.REPORT_FOLDER;
32
+ }
33
+ if (process.env.REPORT_ID) {
34
+ return path.join(folder, process.env.REPORT_ID);
35
+ }
36
+ let nextIndex = 1;
37
+ while (fs.existsSync(path.join(folder, nextIndex.toString()))) {
38
+ nextIndex++;
39
+ }
40
+ return path.join(folder, nextIndex.toString());
41
+ };
42
+ const initContext = async (path, doNavigate = true, headless = false, world = null, moveToRight = -1, initScript = null, envName = null) => {
43
+ if (context && context.playContext && context.playContext.isClosed !== true) {
44
+ return context;
45
+ }
46
+ if (world && world.context && world.context.playContext && world.context.playContext.isClosed !== true) {
47
+ return world.context;
48
+ }
49
+ if (!reportFolder) {
50
+ reportFolder = _findEmptyFolder();
51
+ if (world && world.attach) {
52
+ world.attach(reportFolder, { mediaType: "text/plain" });
53
+ }
54
+ }
55
+ const globalTestDataFile = process.env.GLOBAL_TEST_DATA_FILE;
56
+ if (globalTestDataFile) {
57
+ // check if file exists
58
+ if (!fs.existsSync(globalTestDataFile)) {
59
+ console.log("GLOBAL_TEST_DATA_FILE not found: " + process.env.GLOBAL_TEST_DATA_FILE);
60
+ }
61
+ else {
62
+ // if report folder does not exist, create it
63
+ if (!fs.existsSync(reportFolder)) {
64
+ fs.mkdirSync(reportFolder, { recursive: true });
65
+ }
66
+ // copy the test data file to the report folder as data.json
67
+ fs.copyFileSync(globalTestDataFile, reportFolder + "/data.json");
68
+ }
69
+ }
70
+ const screenshotPath = reportFolder + "/screenshots/";
71
+ if (!fs.existsSync(screenshotPath)) {
72
+ fs.mkdirSync(screenshotPath, { recursive: true });
73
+ }
74
+ if (world) {
75
+ world.reportFolder = reportFolder;
76
+ world.screenshotPath = screenshotPath;
77
+ world.screenshot = true;
78
+ }
79
+ context = await getContext(null, headless, world, null, null, true, null, moveToRight, reportFolder, initScript);
80
+ if (world) {
81
+ world.context = context;
82
+ if (world.attach) {
83
+ world.attach(JSON.stringify(context.environment), {
84
+ mediaType: "application/json+env",
85
+ });
86
+ }
87
+ }
88
+ context.reportFolder = reportFolder;
89
+ if (doNavigate) {
90
+ await navigate(path);
91
+ }
92
+ if (context) {
93
+ const env = getEnv(envName);
94
+ if (env) {
95
+ await getTestData(env, world);
96
+ }
97
+ }
98
+ return context;
99
+ };
100
+ const getEnv = (envName) => {
101
+ let env = process.env.BLINQ_ENV;
102
+ if (envName) {
103
+ env = envName;
104
+ }
105
+ if (env) {
106
+ try {
107
+ const content = JSON.parse(fs.readFileSync(env, "utf8"));
108
+ return content.name;
109
+ }
110
+ catch (e) {
111
+ console.log("Error reading env file: " + e);
112
+ return null;
113
+ }
114
+ }
115
+ return null;
116
+ };
117
+ const closeContext = async () => {
118
+ try {
119
+ if (context && context.browser) {
120
+ await browserManager.closeBrowser(context.browser);
121
+ }
122
+ }
123
+ catch (e) {
124
+ // eslint-disable-next-line no-console
125
+ // ignore
126
+ }
127
+ context = null;
128
+ reportFolder = "";
129
+ };
130
+ const getTestData = async (currentEnv, world, dataFile) => {
131
+ try {
132
+ if (fs.existsSync(path.join("data", "data.json"))) {
133
+ const data = fs.readFileSync(path.join("data", "data.json"), "utf8");
134
+ const jsonData = JSON.parse(data);
135
+ const testData = {};
136
+ const allEnvData = jsonData["*"];
137
+ const currentEnvData = jsonData[currentEnv];
138
+ if (allEnvData) {
139
+ for (let i = 0; i < allEnvData.length; i++) {
140
+ const item = allEnvData[i];
141
+ if (process.env[item.key] && item.key.toLowerCase() !== "username" && item.key.toLowerCase() !== "user") {
142
+ testData[item.key] = process.env[item.key];
143
+ continue;
144
+ }
145
+ let useValue = item.value;
146
+ if (item.DataType === "secret") {
147
+ testData[item.key] = "secret:" + item.value;
148
+ // decrypt the secret
149
+ useValue = await decrypt("secret:" + item.value);
150
+ }
151
+ else if (item.DataType === "totp") {
152
+ testData[item.key] = "totp:" + item.value;
153
+ useValue = "totp:" + item.value;
154
+ }
155
+ else {
156
+ testData[item.key] = item.value;
157
+ }
158
+ // if the key is not part of process.env, add it so any test dava value can be access via process.env
159
+ process.env[item.key] = useValue;
160
+ }
161
+ }
162
+ if (currentEnvData) {
163
+ for (let i = 0; i < currentEnvData.length; i++) {
164
+ const item = currentEnvData[i];
165
+ if (process.env[item.key] && item.key.toLowerCase() !== "username" && item.key.toLowerCase() !== "user") {
166
+ testData[item.key] = process.env[item.key];
167
+ continue;
168
+ }
169
+ if (item.DataType === "secret") {
170
+ testData[item.key] = "secret:" + item.value;
171
+ }
172
+ else if (item.DataType === "totp") {
173
+ testData[item.key] = "totp:" + item.value;
174
+ }
175
+ else {
176
+ testData[item.key] = item.value;
177
+ }
178
+ }
179
+ }
180
+ if (dataFile && !existsSync(path.dirname(dataFile))) {
181
+ fs.mkdirSync(path.dirname(dataFile), { recursive: true });
182
+ }
183
+ if (!dataFile)
184
+ dataFile = _getDataFile(world, context, context?.stable);
185
+ fs.writeFileSync(dataFile, JSON.stringify(testData, null, 2));
186
+ }
187
+ }
188
+ catch (e) {
189
+ console.log("Error reading data.json file: " + e);
190
+ }
191
+ };
192
+ const resetTestData = async (envPath, world) => {
193
+ const envName = getEnv(envPath);
194
+ if (envName) {
195
+ getTestData(envName, world);
196
+ }
197
+ };
198
+ export { initContext, navigate, closeContext, resetTestData, getTestData };
199
+ //# sourceMappingURL=auto_page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto_page.js","sourceRoot":"","sources":["../../src/auto_page.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { Browser as PlaywrightBrowser, BrowserContext, Page } from "playwright";
2
+ import type { Cookie, LocalStorage } from "./environment.js";
3
+ import { InitScripts } from "./generation_scripts.js";
4
+ type StorageState = {
5
+ cookies: Cookie[];
6
+ origins: {
7
+ origin: string;
8
+ localStorage: LocalStorage;
9
+ }[];
10
+ };
11
+ declare class BrowserManager {
12
+ browsers: Browser[];
13
+ constructor(browsers?: Browser[]);
14
+ closeAll(): Promise<void>;
15
+ closeBrowser(browser?: PlaywrightBrowser | Browser): Promise<void>;
16
+ createBrowser(headless?: boolean, storageState?: StorageState, extensionPath?: string, userDataDirPath?: string, reportFolder?: string, userAgent?: string, channel?: string, aiConfig?: any, initScripts?: InitScripts | null): Promise<Browser>;
17
+ }
18
+ declare class Browser {
19
+ browser: PlaywrightBrowser | null;
20
+ context: BrowserContext | null;
21
+ page: Page | null;
22
+ headless: boolean;
23
+ reportFolder: string | null;
24
+ trace: boolean;
25
+ traceFolder: string | null;
26
+ constructor();
27
+ init(headless?: boolean, storageState?: StorageState, extensionPath?: string, userDataDirPath?: string, reportFolder?: string, userAgent?: string, channel?: string, aiConfig?: any, initScripts?: InitScripts | null): Promise<void>;
28
+ close(): Promise<void>;
29
+ }
30
+ declare const browserManager: BrowserManager;
31
+ export { browserManager };
32
+ export type { BrowserManager, Browser };