automation_model 1.0.402-dev → 1.0.402-main

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.
@@ -12,15 +12,18 @@ declare class BrowserManager {
12
12
  constructor(browsers?: Browser[]);
13
13
  closeAll(): Promise<void>;
14
14
  closeBrowser(browser?: PlaywrightBrowser | Browser): Promise<void>;
15
- createBrowser(headless?: boolean, storageState?: StorageState, extensionPath?: string, userDataDirPath?: string): Promise<Browser>;
16
- getBrowser(headless?: boolean, storageState?: StorageState, extensionPath?: string, userDataDirPath?: string): Promise<Browser>;
15
+ createBrowser(headless?: boolean, storageState?: StorageState, extensionPath?: string, userDataDirPath?: string, reportFolder?: string): Promise<Browser>;
17
16
  }
18
17
  declare class Browser {
19
18
  browser: PlaywrightBrowser | null;
20
19
  context: BrowserContext | null;
21
20
  page: Page | null;
21
+ headless: boolean;
22
+ reportFolder: string | null;
23
+ trace: boolean;
24
+ traceFolder: string | null;
22
25
  constructor();
23
- init(headless?: boolean, storageState?: StorageState, extensionPath?: string, userDataDirPath?: string): Promise<void>;
26
+ init(headless?: boolean, storageState?: StorageState, extensionPath?: string, userDataDirPath?: string, reportFolder?: string): Promise<void>;
24
27
  close(): Promise<void>;
25
28
  }
26
29
  declare const browserManager: BrowserManager;
@@ -1,5 +1,8 @@
1
1
  import { chromium, firefox, webkit, } from "playwright";
2
+ import fs from "fs";
3
+ import path from "path";
2
4
  class BrowserManager {
5
+ browsers;
3
6
  constructor(browsers = []) {
4
7
  this.browsers = browsers;
5
8
  }
@@ -22,26 +25,38 @@ class BrowserManager {
22
25
  }
23
26
  }
24
27
  }
25
- async createBrowser(headless = false, storageState, extensionPath, userDataDirPath) {
28
+ async createBrowser(headless = false, storageState, extensionPath, userDataDirPath, reportFolder) {
26
29
  const browser = new Browser();
27
- await browser.init(headless, storageState, extensionPath, userDataDirPath);
30
+ await browser.init(headless, storageState, extensionPath, userDataDirPath, reportFolder);
28
31
  this.browsers.push(browser);
29
32
  return browser;
30
33
  }
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
34
  }
38
35
  class Browser {
36
+ browser;
37
+ context;
38
+ page;
39
+ headless = false;
40
+ reportFolder = null;
41
+ trace = false;
42
+ traceFolder = null;
39
43
  constructor() {
40
44
  this.browser = null;
41
45
  this.context = null;
42
46
  this.page = null;
43
47
  }
44
- async init(headless = false, storageState, extensionPath, userDataDirPath) {
48
+ async init(headless = false, storageState, extensionPath, userDataDirPath, reportFolder) {
49
+ // if (!downloadsPath) {
50
+ // downloadsPath = "downloads";
51
+ // }
52
+ // // check if downloads path exists
53
+ // if (!fs.existsSync(downloadsPath)) {
54
+ // fs.mkdirSync(downloadsPath, { recursive: true });
55
+ // }
56
+ this.headless = headless;
57
+ if (reportFolder) {
58
+ this.reportFolder = reportFolder;
59
+ }
45
60
  let viewport = null;
46
61
  if (process.env.HEADLESS === "true") {
47
62
  headless = true;
@@ -82,7 +97,7 @@ class Browser {
82
97
  // }
83
98
  }
84
99
  else if (extensionPath) {
85
- this.context = await chromium.launchPersistentContext(userDataDirPath !== null && userDataDirPath !== void 0 ? userDataDirPath : "", {
100
+ this.context = await chromium.launchPersistentContext(userDataDirPath ?? "", {
86
101
  headless: headless,
87
102
  timeout: 0,
88
103
  bypassCSP: true,
@@ -101,6 +116,7 @@ class Browser {
101
116
  headless: headless,
102
117
  timeout: 0,
103
118
  args: ["--ignore-https-errors", "--ignore-certificate-errors"],
119
+ //downloadsPath: downloadsPath,
104
120
  });
105
121
  }
106
122
  else if (process.env.BROWSER === "webkit") {
@@ -108,6 +124,7 @@ class Browser {
108
124
  headless: headless,
109
125
  timeout: 0,
110
126
  args: ["--ignore-https-errors", "--ignore-certificate-errors"],
127
+ //downloadsPath: downloadsPath,
111
128
  });
112
129
  }
113
130
  else {
@@ -115,9 +132,13 @@ class Browser {
115
132
  headless: headless,
116
133
  timeout: 0,
117
134
  args: ["--ignore-https-errors", "--ignore-certificate-errors"],
135
+ //downloadsPath: downloadsPath,
118
136
  });
119
137
  }
120
- let contextOptions = {};
138
+ // downloadsPath
139
+ let contextOptions = {
140
+ acceptDownloads: true,
141
+ };
121
142
  if (storageState) {
122
143
  contextOptions.storageState = storageState;
123
144
  contextOptions.bypassCSP = true;
@@ -126,12 +147,26 @@ class Browser {
126
147
  if (viewport) {
127
148
  contextOptions.viewport = viewport;
128
149
  }
129
- this.context = await this.browser.newContext(contextOptions);
150
+ if (!this.context && this.browser) {
151
+ this.context = await this.browser.newContext(contextOptions);
152
+ }
153
+ }
154
+ if (process.env.TRACE === "true" && this.context) {
155
+ this.trace = true;
156
+ const traceFolder = path.join(this.reportFolder, "trace");
157
+ //const traceFile = path.join(traceFolder, "trace.zip");
158
+ if (!fs.existsSync(traceFolder)) {
159
+ fs.mkdirSync(traceFolder, { recursive: true });
160
+ }
161
+ this.traceFolder = traceFolder;
162
+ await this.context.tracing.start({ screenshots: true, snapshots: true });
130
163
  }
131
- // }
132
164
  this.page = await this.context.newPage();
133
165
  }
134
166
  async close() {
167
+ // if (this.context && this.trace) {
168
+ // await this.context.tracing.stop({ path: traceFile });
169
+ // }
135
170
  if (this.browser !== null) {
136
171
  await this.browser.close();
137
172
  this.browser = null;
@@ -142,11 +177,4 @@ class Browser {
142
177
  }
143
178
  const browserManager = new BrowserManager();
144
179
  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
180
  //# 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,5 @@
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;
@@ -0,0 +1,132 @@
1
+ import { getHumanReadableErrorMessage } from "./error-messages.js";
2
+ import { maskValue } from "./utils.js";
3
+ export async function _preCommand(state, stable) {
4
+ if (!state) {
5
+ return;
6
+ }
7
+ if (state.selectors) {
8
+ _validateSelectors(state.selectors);
9
+ state.selectors = JSON.parse(JSON.stringify(state.selectors));
10
+ }
11
+ if (state.locate !== false) {
12
+ state.locate = true;
13
+ }
14
+ if (state.scroll !== false) {
15
+ state.scroll = true;
16
+ }
17
+ if (state.screenshot !== false) {
18
+ state.screenshot = true;
19
+ }
20
+ if (state.highlight !== false) {
21
+ state.highlight = true;
22
+ }
23
+ if (state.throwError !== false) {
24
+ state.throwError = true;
25
+ }
26
+ state.info = {};
27
+ if (state.value) {
28
+ state.value = stable._fixUsingParams(state.value, state._params);
29
+ state.info.value = state.value;
30
+ }
31
+ if (state.attribute) {
32
+ state.info.attribute = state.attribute;
33
+ }
34
+ state.startTime = Date.now();
35
+ state.info.selectors = state.selectors;
36
+ state.info.log = state.log ? state.log : "";
37
+ state.info.operation = state.operation;
38
+ state.info.failCause = {};
39
+ state.error = null;
40
+ state.screenshotId = null;
41
+ state.screenshotPath = null;
42
+ if (state.locate === true) {
43
+ let timeout = null;
44
+ if (state.options && state.options.timeout) {
45
+ timeout = state.options.timeout;
46
+ }
47
+ state.element = await stable._locate(state.selectors, state.info, state._params, timeout);
48
+ }
49
+ if (state.scroll === true) {
50
+ await stable.scrollIfNeeded(state.element, state.info);
51
+ }
52
+ if (state.screenshot === true) {
53
+ await _screenshot(state, stable);
54
+ }
55
+ if (state.highlight === true) {
56
+ try {
57
+ await stable._highlightElements(state.element);
58
+ }
59
+ catch (e) {
60
+ // ignore
61
+ }
62
+ }
63
+ state.info.failCause.operationFailed = true;
64
+ }
65
+ export async function _commandError(state, error, stable) {
66
+ stable.logger.error(state.text + " failed " + state.info.log);
67
+ const { screenshotId, screenshotPath } = await stable._screenShot(state.options, state.world, state.info);
68
+ state.screenshotId = screenshotId;
69
+ state.screenshotPath = screenshotPath;
70
+ state.info.screenshotPath = screenshotPath;
71
+ // state.info.failCause.error = error;
72
+ state.info.failCause.fail = true;
73
+ const errorClassification = getHumanReadableErrorMessage(error, state.info);
74
+ state.info.errorType = errorClassification.errorType;
75
+ state.info.errorMessage = errorClassification.errorMessage;
76
+ Object.assign(error, { info: state.info });
77
+ state.error = error;
78
+ state.commandError = true;
79
+ if (state.throwError) {
80
+ throw error;
81
+ }
82
+ }
83
+ export async function _screenshot(state, stable) {
84
+ const { screenshotId, screenshotPath } = await stable._screenShot(state.options, state.world, state.info);
85
+ state.screenshotId = screenshotId;
86
+ state.screenshotPath = screenshotPath;
87
+ }
88
+ export function _commandFinally(state, stable) {
89
+ if (state && !state.commandError === true) {
90
+ state.info.failCause = {};
91
+ }
92
+ state.endTime = Date.now();
93
+ const reportObject = {
94
+ element_name: state.selectors ? state.selectors.element_name : null,
95
+ type: state.type,
96
+ text: state.text,
97
+ value: state.originalValue ? maskValue(state.originalValue) : state.value,
98
+ screenshotId: state.screenshotId,
99
+ result: state.error
100
+ ? {
101
+ status: "FAILED",
102
+ startTime: state.startTime,
103
+ endTime: state.endTime,
104
+ message: state.error?.message,
105
+ }
106
+ : {
107
+ status: "PASSED",
108
+ startTime: state.startTime,
109
+ endTime: state.endTime,
110
+ },
111
+ info: state.info,
112
+ };
113
+ if (state.originalValue && state.info) {
114
+ state.info.value = maskValue(state.originalValue);
115
+ }
116
+ stable._reportToWorld(state.world, reportObject);
117
+ }
118
+ export function _validateSelectors(selectors) {
119
+ if (!selectors) {
120
+ throw new Error("selectors is null");
121
+ }
122
+ if (!selectors.locators) {
123
+ throw new Error("selectors.locators is null");
124
+ }
125
+ if (!Array.isArray(selectors.locators)) {
126
+ throw new Error("selectors.locators expected to be array");
127
+ }
128
+ if (selectors.locators.length === 0) {
129
+ throw new Error("selectors.locators expected to be non empty array");
130
+ }
131
+ }
132
+ //# 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,182 @@
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("net::") ||
12
+ errorMessage.includes("network") ||
13
+ errorMessage.includes("connection refused") ||
14
+ errorMessage.includes("failed to fetch")) {
15
+ return {
16
+ errorType: "NetworkError",
17
+ errorMessage: error.message,
18
+ };
19
+ }
20
+ // Selector Errors
21
+ if (errorMessage.includes("no element matches selector") ||
22
+ errorMessage.includes("no node found for selector") ||
23
+ errorMessage.includes("resolved to") ||
24
+ errorMessage.includes("element not found")) {
25
+ return {
26
+ errorType: "SelectorError",
27
+ errorMessage: error.message,
28
+ };
29
+ }
30
+ // Frame Errors
31
+ if (errorMessage.includes("frame was detached") ||
32
+ errorMessage.includes("frame not found") ||
33
+ errorMessage.includes("execution context was destroyed")) {
34
+ return {
35
+ errorType: "FrameError",
36
+ errorMessage: error.message,
37
+ };
38
+ }
39
+ // Element State Errors
40
+ if (errorMessage.includes("element is not clickable") ||
41
+ errorMessage.includes("element is outside of viewport") ||
42
+ errorMessage.includes("element is not visible") ||
43
+ errorMessage.includes("element is disabled")) {
44
+ return {
45
+ errorType: "ElementStateError",
46
+ errorMessage: error.message,
47
+ };
48
+ }
49
+ // Browser Context Errors
50
+ if (errorMessage.includes("target closed") ||
51
+ errorMessage.includes("browser has been closed") ||
52
+ errorMessage.includes("connection closed")) {
53
+ return {
54
+ errorType: "BrowserContextError",
55
+ errorMessage: error.message,
56
+ };
57
+ }
58
+ // Screenshot Errors
59
+ if (errorMessage.includes("failed to save screenshot") ||
60
+ errorMessage.includes("screenshot") ||
61
+ (errorMessage.includes("enoent") && errorMessage.includes("screenshots"))) {
62
+ return {
63
+ errorType: "ScreenshotError",
64
+ errorMessage: error.message,
65
+ };
66
+ }
67
+ // Type Errors
68
+ if (errorMessage.includes("cannot type") ||
69
+ errorMessage.includes("element is not an <input>") ||
70
+ errorMessage.includes("element is not focusable")) {
71
+ return {
72
+ errorType: "TypeError",
73
+ errorMessage: error.message,
74
+ };
75
+ }
76
+ // Evaluation Errors
77
+ if (errorMessage.includes("evaluation failed") ||
78
+ errorMessage.includes("execution context was destroyed") ||
79
+ errorMessage.includes("cannot execute in detached frame")) {
80
+ return {
81
+ errorType: "EvaluationError",
82
+ errorMessage: error.message,
83
+ };
84
+ }
85
+ // Assertion Errors
86
+ if (error.name === "AssertionError" || errorMessage.includes("expect(") || errorMessage.includes("assertion")) {
87
+ return {
88
+ errorType: "AssertionError",
89
+ errorMessage: error.message,
90
+ };
91
+ }
92
+ // Default case for unrecognized errors
93
+ return {
94
+ errorType: "UnknownError",
95
+ errorMessage: error.message,
96
+ };
97
+ }
98
+ function classifyJSError(error) {
99
+ const errorMessage = error.message.toLowerCase();
100
+ // Syntax Errors
101
+ if (error.name === "SyntaxError" || errorMessage.includes("syntax error")) {
102
+ return {
103
+ errorType: "SyntaxError",
104
+ errorMessage: error.message,
105
+ };
106
+ }
107
+ // Reference Errors
108
+ if (error.name === "ReferenceError" || errorMessage.includes("reference error")) {
109
+ return {
110
+ errorType: "ReferenceError",
111
+ errorMessage: error.message,
112
+ };
113
+ }
114
+ // Type Errors
115
+ if (error.name === "TypeError" || errorMessage.includes("type error")) {
116
+ return {
117
+ errorType: "TypeError",
118
+ errorMessage: error.message,
119
+ };
120
+ }
121
+ // Range Errors
122
+ if (error.name === "RangeError" || errorMessage.includes("range error")) {
123
+ return {
124
+ errorType: "RangeError",
125
+ errorMessage: error.message,
126
+ };
127
+ }
128
+ // Default case for unrecognized errors
129
+ return {
130
+ errorType: "UnknownError",
131
+ errorMessage: error.message,
132
+ };
133
+ }
134
+ const classifyErrorFromInfo = (error, info) => {
135
+ const failCause = info?.failCause;
136
+ if (!failCause) {
137
+ return {
138
+ errorType: "UnknownError",
139
+ errorMessage: error.message,
140
+ };
141
+ }
142
+ if (failCause.texxtNotFound) {
143
+ return {
144
+ errorType: "TextNotFoundError",
145
+ errorMessage: failCause.lastError,
146
+ };
147
+ }
148
+ if (failCause.iframeNotFound) {
149
+ return {
150
+ errorType: "IframeNotFoundError",
151
+ errorMessage: failCause.lastError,
152
+ };
153
+ }
154
+ if (failCause.locatorNotFound) {
155
+ return {
156
+ errorType: "ElementNotFoundError",
157
+ errorMessage: failCause.lastError,
158
+ };
159
+ }
160
+ if (failCause.foundMultiple) {
161
+ return {
162
+ errorType: "MultipleElementsFoundError",
163
+ errorMessage: failCause.lastError ?? `Found ${failCause.count} elements`,
164
+ };
165
+ }
166
+ return {
167
+ errorType: "UnknownError",
168
+ errorMessage: error.message,
169
+ };
170
+ };
171
+ const getHumanReadableErrorMessage = (error, info) => {
172
+ let errorClassification = classifyErrorFromInfo(error, info);
173
+ if (errorClassification.errorType === "UnknownError") {
174
+ errorClassification = classifyPlaywrightError(error);
175
+ }
176
+ if (errorClassification.errorType === "UnknownError") {
177
+ errorClassification = classifyJSError(error);
178
+ }
179
+ return errorClassification;
180
+ };
181
+ export { getHumanReadableErrorMessage };
182
+ //# sourceMappingURL=error-messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-messages.js","sourceRoot":"","sources":["../../src/error-messages.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
1
  import { Environment } from "./environment.js";
2
2
  import { TestContext } from "./test_context.js";
3
+ import { StableBrowser } from "./stable_browser.js";
3
4
  import { Browser as PlaywrightBrowser } from "playwright";
4
5
  import { Browser } from "./browser_manager.js";
5
- declare const getContext: (environment: Environment | null, headless?: boolean, logger?: null) => Promise<TestContext>;
6
+ declare const getContext: (environment: Environment | null, headless: boolean | undefined, world: any, logger?: null, appName?: string | null, createStable?: boolean, stable?: StableBrowser | null, moveToRight?: number, reportFolder?: string | null) => Promise<TestContext>;
6
7
  declare const closeBrowser: (browser?: Browser | PlaywrightBrowser) => Promise<void>;
7
8
  export { getContext, closeBrowser };
@@ -7,10 +7,16 @@ import { StableBrowser } from "./stable_browser.js";
7
7
  import { Api } from "./api.js";
8
8
  // let environment = null;
9
9
  // init browser create context and page, if context and page are not null
10
- const getContext = async function (environment, headless = false, logger) {
10
+ const getContext = async function (environment, headless = false, world, logger, appName, createStable = true, stable = null, moveToRight = -1, reportFolder = null) {
11
11
  if (environment === null) {
12
12
  environment = initEnvironment();
13
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
+ }
14
20
  const { cookies, origins } = environment;
15
21
  if (cookies) {
16
22
  for (let i = 0; i < cookies.length; i++) {
@@ -36,14 +42,59 @@ const getContext = async function (environment, headless = false, logger) {
36
42
  }
37
43
  }
38
44
  const storageState = { cookies, origins };
39
- let browser = await browserManager.getBrowser(headless, storageState, extensionPath, userDataDirPath);
45
+ let downloadsPath = "downloads";
46
+ if (reportFolder) {
47
+ downloadsPath = path.join(reportFolder, "downloads");
48
+ }
49
+ else if (stable && stable.context && stable.context.reportFolder) {
50
+ reportFolder = stable.context.reportFolder;
51
+ downloadsPath = path.join(stable.context.reportFolder, "downloads");
52
+ }
53
+ if (world) {
54
+ world.downloadsPath = downloadsPath;
55
+ }
56
+ if (stable && stable.context) {
57
+ stable.context.downloadsPath = downloadsPath;
58
+ }
59
+ let browser = await browserManager.createBrowser(headless, storageState, extensionPath, userDataDirPath, reportFolder ? reportFolder : ".");
40
60
  let context = new TestContext();
41
61
  context.browser = browser.browser;
62
+ context.browserObject = browser;
42
63
  context.playContext = browser.context;
43
64
  context.page = browser.page;
44
65
  context.environment = environment;
45
- context.stable = new StableBrowser(context.browser, context.page, logger, context);
66
+ context.browserName = browser.browser ? browser.browser.browserType().name() : "unknown";
67
+ context.reportFolder = reportFolder;
68
+ if (createStable) {
69
+ context.stable = new StableBrowser(context.browser, context.page, logger, context, world);
70
+ }
71
+ else {
72
+ context.stable = stable;
73
+ }
46
74
  context.api = new Api(logger);
75
+ if (moveToRight > 0 && context.browserName === "chromium") {
76
+ // move the borwser to the top right corner of the screen
77
+ // create a cdp session
78
+ // Get CDP session
79
+ const playContext = context.playContext;
80
+ const client = await playContext.newCDPSession(context.page);
81
+ // Get window ID for the current target
82
+ const { windowId } = await client.send("Browser.getWindowForTarget");
83
+ //console.log(windowId);
84
+ // get the window for the current target
85
+ const window = await client.send("Browser.getWindowBounds", {
86
+ windowId,
87
+ });
88
+ //console.log(window);
89
+ await client.send("Browser.setWindowBounds", {
90
+ windowId,
91
+ bounds: {
92
+ left: window.bounds.left + moveToRight,
93
+ },
94
+ });
95
+ // close cdp
96
+ await client.detach();
97
+ }
47
98
  // await _initCookies(context);
48
99
  return context;
49
100
  };