donobu 2.7.0 → 2.9.0
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.
- package/dist/assets/generated/parameter-schemas.json +32 -0
- package/dist/assets/generated/version +1 -1
- package/dist/bindings/FocusPage.d.ts.map +1 -1
- package/dist/bindings/FocusPage.js.map +1 -1
- package/dist/bindings/PageInteractionTracker.d.ts +1 -1
- package/dist/bindings/PageInteractionTracker.d.ts.map +1 -1
- package/dist/bindings/PageInteractionTracker.js +1 -1
- package/dist/bindings/PageInteractionTracker.js.map +1 -1
- package/dist/bindings/ToggleDonobuAnnotations.d.ts +18 -0
- package/dist/bindings/ToggleDonobuAnnotations.d.ts.map +1 -0
- package/dist/bindings/ToggleDonobuAnnotations.js +29 -0
- package/dist/bindings/ToggleDonobuAnnotations.js.map +1 -0
- package/dist/clients/GoogleGptClient.d.ts.map +1 -1
- package/dist/clients/GoogleGptClient.js +34 -32
- package/dist/clients/GoogleGptClient.js.map +1 -1
- package/dist/envVars.d.ts +5 -5
- package/dist/envVars.d.ts.map +1 -1
- package/dist/envVars.js +5 -5
- package/dist/envVars.js.map +1 -1
- package/dist/esm/assets/generated/parameter-schemas.json +32 -0
- package/dist/esm/assets/generated/version +1 -1
- package/dist/esm/bindings/FocusPage.d.ts.map +1 -1
- package/dist/esm/bindings/FocusPage.js.map +1 -1
- package/dist/esm/bindings/PageInteractionTracker.d.ts +1 -1
- package/dist/esm/bindings/PageInteractionTracker.d.ts.map +1 -1
- package/dist/esm/bindings/PageInteractionTracker.js +1 -1
- package/dist/esm/bindings/PageInteractionTracker.js.map +1 -1
- package/dist/esm/bindings/ToggleDonobuAnnotations.d.ts +18 -0
- package/dist/esm/bindings/ToggleDonobuAnnotations.d.ts.map +1 -0
- package/dist/esm/bindings/ToggleDonobuAnnotations.js +29 -0
- package/dist/esm/bindings/ToggleDonobuAnnotations.js.map +1 -0
- package/dist/esm/clients/GoogleGptClient.d.ts.map +1 -1
- package/dist/esm/clients/GoogleGptClient.js +34 -32
- package/dist/esm/clients/GoogleGptClient.js.map +1 -1
- package/dist/esm/envVars.d.ts +5 -5
- package/dist/esm/envVars.d.ts.map +1 -1
- package/dist/esm/envVars.js +5 -5
- package/dist/esm/envVars.js.map +1 -1
- package/dist/esm/main.d.ts.map +1 -1
- package/dist/esm/main.js +1 -9
- package/dist/esm/main.js.map +1 -1
- package/dist/esm/managers/CodeGenerator.d.ts.map +1 -1
- package/dist/esm/managers/CodeGenerator.js +19 -4
- package/dist/esm/managers/CodeGenerator.js.map +1 -1
- package/dist/esm/managers/DonobuFlow.d.ts +10 -1
- package/dist/esm/managers/DonobuFlow.d.ts.map +1 -1
- package/dist/esm/managers/DonobuFlow.js +78 -8
- package/dist/esm/managers/DonobuFlow.js.map +1 -1
- package/dist/esm/managers/DonobuFlowsManager.d.ts +1 -1
- package/dist/esm/managers/DonobuFlowsManager.d.ts.map +1 -1
- package/dist/esm/managers/DonobuFlowsManager.js +14 -5
- package/dist/esm/managers/DonobuFlowsManager.js.map +1 -1
- package/dist/esm/managers/TestFileUpdater.d.ts +56 -0
- package/dist/esm/managers/TestFileUpdater.d.ts.map +1 -0
- package/dist/esm/managers/TestFileUpdater.js +224 -0
- package/dist/esm/managers/TestFileUpdater.js.map +1 -0
- package/dist/esm/models/BrowserFramework.d.ts +8 -0
- package/dist/esm/models/BrowserFramework.d.ts.map +1 -1
- package/dist/esm/models/BrowserFramework.js +118 -17
- package/dist/esm/models/BrowserFramework.js.map +1 -1
- package/dist/esm/models/BrowserStorageState.d.ts +4 -0
- package/dist/esm/models/BrowserStorageState.d.ts.map +1 -1
- package/dist/esm/playwrightTestExtensions.d.ts +1 -1
- package/dist/esm/playwrightTestExtensions.d.ts.map +1 -1
- package/dist/esm/playwrightTestExtensions.js +171 -27
- package/dist/esm/playwrightTestExtensions.js.map +1 -1
- package/dist/esm/tools/DetectBrokenLinksTool.d.ts.map +1 -1
- package/dist/esm/tools/DetectBrokenLinksTool.js +34 -18
- package/dist/esm/tools/DetectBrokenLinksTool.js.map +1 -1
- package/dist/esm/tools/GoToWebpageTool.d.ts.map +1 -1
- package/dist/esm/tools/GoToWebpageTool.js +5 -1
- package/dist/esm/tools/GoToWebpageTool.js.map +1 -1
- package/dist/esm/utils/JsonUtils.d.ts.map +1 -1
- package/dist/esm/utils/JsonUtils.js +70 -10
- package/dist/esm/utils/JsonUtils.js.map +1 -1
- package/dist/esm/utils/MiscUtils.d.ts +10 -0
- package/dist/esm/utils/MiscUtils.d.ts.map +1 -1
- package/dist/esm/utils/MiscUtils.js +54 -0
- package/dist/esm/utils/MiscUtils.js.map +1 -1
- package/dist/esm/utils/PlaywrightUtils.d.ts.map +1 -1
- package/dist/esm/utils/PlaywrightUtils.js +1 -4
- package/dist/esm/utils/PlaywrightUtils.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +1 -9
- package/dist/main.js.map +1 -1
- package/dist/managers/CodeGenerator.d.ts.map +1 -1
- package/dist/managers/CodeGenerator.js +19 -4
- package/dist/managers/CodeGenerator.js.map +1 -1
- package/dist/managers/DonobuFlow.d.ts +10 -1
- package/dist/managers/DonobuFlow.d.ts.map +1 -1
- package/dist/managers/DonobuFlow.js +78 -8
- package/dist/managers/DonobuFlow.js.map +1 -1
- package/dist/managers/DonobuFlowsManager.d.ts +1 -1
- package/dist/managers/DonobuFlowsManager.d.ts.map +1 -1
- package/dist/managers/DonobuFlowsManager.js +14 -5
- package/dist/managers/DonobuFlowsManager.js.map +1 -1
- package/dist/managers/TestFileUpdater.d.ts +56 -0
- package/dist/managers/TestFileUpdater.d.ts.map +1 -0
- package/dist/managers/TestFileUpdater.js +224 -0
- package/dist/managers/TestFileUpdater.js.map +1 -0
- package/dist/models/BrowserFramework.d.ts +8 -0
- package/dist/models/BrowserFramework.d.ts.map +1 -1
- package/dist/models/BrowserFramework.js +118 -17
- package/dist/models/BrowserFramework.js.map +1 -1
- package/dist/models/BrowserStorageState.d.ts +4 -0
- package/dist/models/BrowserStorageState.d.ts.map +1 -1
- package/dist/playwrightTestExtensions.d.ts +1 -1
- package/dist/playwrightTestExtensions.d.ts.map +1 -1
- package/dist/playwrightTestExtensions.js +171 -27
- package/dist/playwrightTestExtensions.js.map +1 -1
- package/dist/tools/DetectBrokenLinksTool.d.ts.map +1 -1
- package/dist/tools/DetectBrokenLinksTool.js +34 -18
- package/dist/tools/DetectBrokenLinksTool.js.map +1 -1
- package/dist/tools/GoToWebpageTool.d.ts.map +1 -1
- package/dist/tools/GoToWebpageTool.js +5 -1
- package/dist/tools/GoToWebpageTool.js.map +1 -1
- package/dist/utils/JsonUtils.d.ts.map +1 -1
- package/dist/utils/JsonUtils.js +70 -10
- package/dist/utils/JsonUtils.js.map +1 -1
- package/dist/utils/MiscUtils.d.ts +10 -0
- package/dist/utils/MiscUtils.d.ts.map +1 -1
- package/dist/utils/MiscUtils.js +54 -0
- package/dist/utils/MiscUtils.js.map +1 -1
- package/dist/utils/PlaywrightUtils.d.ts.map +1 -1
- package/dist/utils/PlaywrightUtils.js +1 -4
- package/dist/utils/PlaywrightUtils.js.map +1 -1
- package/package.json +2 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BrowserFramework.d.ts","sourceRoot":"","sources":["../../../src/models/BrowserFramework.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,cAAc,EAGf,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"BrowserFramework.d.ts","sourceRoot":"","sources":["../../../src/models/BrowserFramework.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,cAAc,EAGf,MAAM,YAAY,CAAC;AAIpB,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAA0B,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIxE,qBAAa,gBAAgB;aAIT,aAAa,EAAE,aAAa;aAC5B,OAAO,EAAE,OAAO;aAChB,cAAc,EAAE,cAAc;IAC9C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;IANnC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAsB;IAEjE,OAAO;IAOP;;;OAGG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA2CnC;;;;;;;OAOG;WACW,mBAAmB,IAAI,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC;WAY3C,MAAM,CACxB,aAAa,EAAE,aAAa,EAC5B,SAAS,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,mBAAmB,GACjC,OAAO,CAAC,gBAAgB,CAAC;IA6D5B;;;;;OAKG;IACU,sBAAsB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IA6EnE;;;;OAIG;mBACkB,gBAAgB;IA6BrC;;;OAGG;mBACkB,SAAS;IAiF9B;;;;;;;;;OASG;mBACkB,cAAc;IA2BnC;;;;OAIG;mBACkB,2BAA2B;IAsChD,OAAO,CAAC,MAAM,CAAC,kBAAkB;mBAaZ,oCAAoC;CA0C1D"}
|
|
@@ -4,8 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.BrowserFramework = void 0;
|
|
7
|
-
const
|
|
8
|
-
const puppeteer_extra_plugin_stealth_1 = __importDefault(require("puppeteer-extra-plugin-stealth"));
|
|
7
|
+
const playwright_1 = require("playwright");
|
|
9
8
|
const JsonUtils_1 = require("../utils/JsonUtils");
|
|
10
9
|
const InvalidParamValueException_1 = require("../exceptions/InvalidParamValueException");
|
|
11
10
|
const path_1 = __importDefault(require("path"));
|
|
@@ -37,6 +36,10 @@ class BrowserFramework {
|
|
|
37
36
|
}
|
|
38
37
|
if (this.browserConfig.using.type === 'browserBase' &&
|
|
39
38
|
this.browserBaseData) {
|
|
39
|
+
const body = {
|
|
40
|
+
projectId: this.browserBaseData.projectId,
|
|
41
|
+
status: 'REQUEST_RELEASE',
|
|
42
|
+
};
|
|
40
43
|
const password = process.env[envVars_1.ENV_VAR_NAMES.BROWSERBASE_API_KEY] ?? '';
|
|
41
44
|
const options = {
|
|
42
45
|
method: 'POST',
|
|
@@ -44,7 +47,7 @@ class BrowserFramework {
|
|
|
44
47
|
'X-BB-API-Key': password,
|
|
45
48
|
'Content-Type': 'application/json',
|
|
46
49
|
},
|
|
47
|
-
body:
|
|
50
|
+
body: JSON.stringify(body),
|
|
48
51
|
};
|
|
49
52
|
try {
|
|
50
53
|
await fetch(`https://api.browserbase.com/v1/sessions/${this.browserBaseData.id}`, options);
|
|
@@ -72,24 +75,97 @@ class BrowserFramework {
|
|
|
72
75
|
}
|
|
73
76
|
static async create(browserConfig, outputDir, storageState) {
|
|
74
77
|
const type = browserConfig.using.type;
|
|
78
|
+
let browserFramework;
|
|
75
79
|
switch (type) {
|
|
76
80
|
case 'device': {
|
|
77
81
|
const { browser, browserContext } = await BrowserFramework.forDevice(browserConfig.using.deviceName ??
|
|
78
82
|
BrowserFramework.DEFAULT_DEVICE_NAME, browserConfig.using.headless ?? false, outputDir, storageState);
|
|
79
|
-
|
|
83
|
+
browserFramework = new BrowserFramework(browserConfig, browser, browserContext);
|
|
84
|
+
break;
|
|
80
85
|
}
|
|
81
86
|
case 'remoteInstance': {
|
|
82
87
|
const { browser, browserContext } = await BrowserFramework.forRemoteBrowser(browserConfig.using.url, outputDir, storageState);
|
|
83
|
-
|
|
88
|
+
browserFramework = new BrowserFramework(browserConfig, browser, browserContext);
|
|
89
|
+
break;
|
|
84
90
|
}
|
|
85
91
|
case 'browserBase': {
|
|
86
92
|
const { browser, browserContext, browserBaseData } = await BrowserFramework.forBrowserBase(browserConfig.using.sessionArgs, outputDir, storageState);
|
|
87
|
-
|
|
93
|
+
browserFramework = new BrowserFramework(browserConfig, browser, browserContext, browserBaseData);
|
|
94
|
+
break;
|
|
88
95
|
}
|
|
89
96
|
default: {
|
|
90
97
|
throw new InvalidParamValueException_1.InvalidParamValueException('type', type);
|
|
91
98
|
}
|
|
92
99
|
}
|
|
100
|
+
await BrowserFramework.attachSessionStorageToBrowserContext(browserFramework.browserContext, storageState);
|
|
101
|
+
return browserFramework;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Gets the browser storage state including cookies, localStorage, and sessionStorage.
|
|
105
|
+
*
|
|
106
|
+
* @param browserContext The browser context to extract storage state from.
|
|
107
|
+
* @returns A promise that resolves to the complete browser storage state.
|
|
108
|
+
*/
|
|
109
|
+
async getBrowserStorageState() {
|
|
110
|
+
let result;
|
|
111
|
+
try {
|
|
112
|
+
// First get the standard storage state (cookies and localStorage)
|
|
113
|
+
result = await this.browserContext.storageState({
|
|
114
|
+
indexedDB: true,
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
Logger_1.appLogger.warn('Failed to get storage state with indexedDB, falling back to cookies only', error);
|
|
119
|
+
result = await this.browserContext.storageState({
|
|
120
|
+
indexedDB: false,
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
// Get all pages in the context
|
|
124
|
+
const pages = this.browserContext.pages();
|
|
125
|
+
// Process each page to collect sessionStorage data
|
|
126
|
+
for (const page of pages) {
|
|
127
|
+
try {
|
|
128
|
+
// Get the origin for the current page
|
|
129
|
+
const pageOrigin = new URL(page.url()).origin;
|
|
130
|
+
// Find if we already have an entry for this origin
|
|
131
|
+
let originEntry = result.origins.find((entry) => entry.origin === pageOrigin);
|
|
132
|
+
// If not, create a new entry
|
|
133
|
+
if (!originEntry) {
|
|
134
|
+
originEntry = {
|
|
135
|
+
origin: pageOrigin,
|
|
136
|
+
localStorage: [],
|
|
137
|
+
sessionStorage: [],
|
|
138
|
+
};
|
|
139
|
+
result.origins.push(originEntry);
|
|
140
|
+
}
|
|
141
|
+
else if (!('sessionStorage' in originEntry)) {
|
|
142
|
+
// If the entry exists but doesn't have sessionStorage yet, add the property
|
|
143
|
+
originEntry.sessionStorage = [];
|
|
144
|
+
}
|
|
145
|
+
// Extract sessionStorage from the page
|
|
146
|
+
const sessionStorageItems = await page.evaluate(() => {
|
|
147
|
+
const items = [];
|
|
148
|
+
for (let i = 0; i < sessionStorage.length; i++) {
|
|
149
|
+
const name = sessionStorage.key(i);
|
|
150
|
+
if (name) {
|
|
151
|
+
items.push({
|
|
152
|
+
name,
|
|
153
|
+
value: sessionStorage.getItem(name) || '',
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return items;
|
|
158
|
+
});
|
|
159
|
+
// Add sessionStorage items to the origin entry
|
|
160
|
+
originEntry.sessionStorage = sessionStorageItems;
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
Logger_1.appLogger.warn(`Failed to extract sessionStorage for page: ${page.url()}`, error);
|
|
164
|
+
// Skip pages that might have navigation errors or are about:blank.
|
|
165
|
+
continue;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return result;
|
|
93
169
|
}
|
|
94
170
|
/**
|
|
95
171
|
* Connects to an existing Chromium browser using the Chrome DevTools Protocol (CDP) at the given
|
|
@@ -99,7 +175,7 @@ class BrowserFramework {
|
|
|
99
175
|
static async forRemoteBrowser(remoteBrowserInstanceUrl, outputDir, storageState) {
|
|
100
176
|
const expandedUrl = this.expandEnvVariables(remoteBrowserInstanceUrl);
|
|
101
177
|
try {
|
|
102
|
-
const browser = await
|
|
178
|
+
const browser = await playwright_1.chromium.connectOverCDP(expandedUrl);
|
|
103
179
|
const contextOptions = {
|
|
104
180
|
recordVideo: { dir: outputDir },
|
|
105
181
|
};
|
|
@@ -158,20 +234,20 @@ class BrowserFramework {
|
|
|
158
234
|
let browser;
|
|
159
235
|
switch (device.defaultBrowserType.toLowerCase()) {
|
|
160
236
|
case 'firefox':
|
|
161
|
-
browser = await
|
|
237
|
+
browser = await playwright_1.firefox.launch(launchOptions);
|
|
162
238
|
break;
|
|
163
239
|
case 'chromium':
|
|
164
|
-
browser = await
|
|
240
|
+
browser = await playwright_1.chromium.launch(launchOptions);
|
|
165
241
|
break;
|
|
166
242
|
case 'chrome':
|
|
167
|
-
browser = await
|
|
243
|
+
browser = await playwright_1.chromium.launch({
|
|
168
244
|
...launchOptions,
|
|
169
245
|
channel: 'chrome',
|
|
170
246
|
});
|
|
171
247
|
break;
|
|
172
248
|
case 'webkit':
|
|
173
249
|
case 'ios':
|
|
174
|
-
browser = await
|
|
250
|
+
browser = await playwright_1.webkit.launch(launchOptions);
|
|
175
251
|
break;
|
|
176
252
|
default:
|
|
177
253
|
throw new InvalidParamValueException_1.InvalidParamValueException('browserType', device.defaultBrowserType);
|
|
@@ -197,7 +273,7 @@ class BrowserFramework {
|
|
|
197
273
|
*/
|
|
198
274
|
static async forBrowserBase(sessionArgs, outputDir, storageState) {
|
|
199
275
|
const browserBaseData = await BrowserFramework.establishBrowserBaseSession(sessionArgs);
|
|
200
|
-
const browser = await
|
|
276
|
+
const browser = await playwright_1.chromium.connectOverCDP(browserBaseData.connectUrl);
|
|
201
277
|
const contextOptions = {
|
|
202
278
|
recordVideo: { dir: outputDir },
|
|
203
279
|
};
|
|
@@ -245,12 +321,37 @@ class BrowserFramework {
|
|
|
245
321
|
return envVarValue;
|
|
246
322
|
});
|
|
247
323
|
}
|
|
324
|
+
static async attachSessionStorageToBrowserContext(browserContext, storageState) {
|
|
325
|
+
// Add init script to restore sessionStorage if storage state is provided
|
|
326
|
+
if (storageState && storageState.origins) {
|
|
327
|
+
// Transform the storage state to map origins to their sessionStorage
|
|
328
|
+
const sessionStorageByOrigin = {};
|
|
329
|
+
for (const origin of storageState.origins) {
|
|
330
|
+
if (origin.sessionStorage && origin.sessionStorage.length > 0) {
|
|
331
|
+
// Create a key-value map for this origin's sessionStorage
|
|
332
|
+
const sessionStorageMap = {};
|
|
333
|
+
for (const item of origin.sessionStorage) {
|
|
334
|
+
sessionStorageMap[item.name] = item.value;
|
|
335
|
+
}
|
|
336
|
+
sessionStorageByOrigin[origin.origin] = sessionStorageMap;
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
// Add the init script to restore sessionStorage based on the page's origin
|
|
340
|
+
await browserContext.addInitScript((storageData) => {
|
|
341
|
+
// Get current origin
|
|
342
|
+
const currentOrigin = window.location.origin;
|
|
343
|
+
// Check if we have sessionStorage data for this origin
|
|
344
|
+
if (storageData[currentOrigin]) {
|
|
345
|
+
// Restore the sessionStorage items
|
|
346
|
+
for (const [key, value] of Object.entries(storageData[currentOrigin])) {
|
|
347
|
+
window.sessionStorage.setItem(key, value);
|
|
348
|
+
}
|
|
349
|
+
console.log(`Restored ${Object.keys(storageData[currentOrigin]).length} sessionStorage items for ${currentOrigin}`);
|
|
350
|
+
}
|
|
351
|
+
}, sessionStorageByOrigin);
|
|
352
|
+
}
|
|
353
|
+
}
|
|
248
354
|
}
|
|
249
355
|
exports.BrowserFramework = BrowserFramework;
|
|
250
356
|
BrowserFramework.DEFAULT_DEVICE_NAME = 'Desktop Chromium';
|
|
251
|
-
(() => {
|
|
252
|
-
playwright_extra_1.firefox.use((0, puppeteer_extra_plugin_stealth_1.default)());
|
|
253
|
-
playwright_extra_1.chromium.use((0, puppeteer_extra_plugin_stealth_1.default)());
|
|
254
|
-
playwright_extra_1.webkit.use((0, puppeteer_extra_plugin_stealth_1.default)());
|
|
255
|
-
})();
|
|
256
357
|
//# sourceMappingURL=BrowserFramework.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BrowserFramework.js","sourceRoot":"","sources":["../../../src/models/BrowserFramework.ts"],"names":[],"mappings":";;;;;;AAMA,
|
|
1
|
+
{"version":3,"file":"BrowserFramework.js","sourceRoot":"","sources":["../../../src/models/BrowserFramework.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,6 +21,10 @@ export type BrowserStorageState = {
|
|
|
21
21
|
readonly name: string;
|
|
22
22
|
readonly value: string;
|
|
23
23
|
}>;
|
|
24
|
+
readonly sessionStorage?: Array<{
|
|
25
|
+
readonly name: string;
|
|
26
|
+
readonly value: string;
|
|
27
|
+
}>;
|
|
24
28
|
}>;
|
|
25
29
|
};
|
|
26
30
|
//# sourceMappingURL=BrowserStorageState.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BrowserStorageState.d.ts","sourceRoot":"","sources":["../../../src/models/BrowserStorageState.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;QACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAEtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAEvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QAExB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAEtB;;WAEG;QACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAEzB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;QAE3B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;QAEzB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;KAC9C,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;QACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QAExB,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAC;YAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;YAEtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;SACxB,CAAC,CAAC;KACJ,CAAC,CAAC;CACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"BrowserStorageState.d.ts","sourceRoot":"","sources":["../../../src/models/BrowserStorageState.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;QACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAEtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAEvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QAExB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAEtB;;WAEG;QACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAEzB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;QAE3B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;QAEzB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;KAC9C,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;QACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QAExB,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAC;YAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;YAEtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;SACxB,CAAC,CAAC;QAEH,QAAQ,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC;YAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;YAEtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;SACxB,CAAC,CAAC;KACJ,CAAC,CAAC;CACJ,CAAC"}
|
|
@@ -132,7 +132,7 @@ export declare function vercelAiClientFixture(model: LanguageModel): TestFixture
|
|
|
132
132
|
* If the modelName is not specified, it will be defaulted according to the
|
|
133
133
|
* DEFAULT_GPT_MODEL_FOR_PLATFORM mapping.
|
|
134
134
|
*/
|
|
135
|
-
export declare function
|
|
135
|
+
export declare function createGptClient(modelName?: string): Promise<GptClient>;
|
|
136
136
|
export declare function gptClientFixture(modelName?: string): TestFixture<GptClient, any>;
|
|
137
137
|
export * from 'playwright/test';
|
|
138
138
|
export declare const test: import("@playwright/test").TestType<import("@playwright/test").PlaywrightTestArgs & import("@playwright/test").PlaywrightTestOptions & {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"playwrightTestExtensions.d.ts","sourceRoot":"","sources":["../../src/playwrightTestExtensions.ts"],"names":[],"mappings":"AAKA,OAAO,EAAgB,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EAAE,IAAI,
|
|
1
|
+
{"version":3,"file":"playwrightTestExtensions.d.ts","sourceRoot":"","sources":["../../src/playwrightTestExtensions.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,7 +27,7 @@ exports.googleGeminiClientFixture = googleGeminiClientFixture;
|
|
|
27
27
|
exports.openAiClient = openAiClient;
|
|
28
28
|
exports.openAiClientFixture = openAiClientFixture;
|
|
29
29
|
exports.vercelAiClientFixture = vercelAiClientFixture;
|
|
30
|
-
exports.
|
|
30
|
+
exports.createGptClient = createGptClient;
|
|
31
31
|
exports.gptClientFixture = gptClientFixture;
|
|
32
32
|
/**
|
|
33
33
|
* This code extends the Playwright Page object and test fixture with
|
|
@@ -43,15 +43,110 @@ const MiscUtils_1 = require("./utils/MiscUtils");
|
|
|
43
43
|
const DonobuDeploymentEnvironment_1 = require("./models/DonobuDeploymentEnvironment");
|
|
44
44
|
const GptClientFactory_1 = require("./clients/GptClientFactory");
|
|
45
45
|
const VercelAiGptClient_1 = require("./clients/VercelAiGptClient");
|
|
46
|
+
const GoToWebpageTool_1 = require("./tools/GoToWebpageTool");
|
|
46
47
|
const DonobuStack_1 = require("./managers/DonobuStack");
|
|
47
48
|
const DonobuFlow_1 = require("./managers/DonobuFlow");
|
|
48
|
-
const
|
|
49
|
+
const Logger_1 = require("./utils/Logger");
|
|
50
|
+
const envVars_1 = require("./envVars");
|
|
51
|
+
const TestFileUpdater_1 = require("./managers/TestFileUpdater");
|
|
52
|
+
const PLACEHOLDER_FLOW_URL = 'https://example.com';
|
|
49
53
|
const DEFAULT_GPT_MODEL_FOR_PLATFORM = {
|
|
50
54
|
ANTHROPIC: 'claude-3-5-sonnet-latest',
|
|
51
55
|
GOOGLE_GEMINI: 'gemini-2.0-flash',
|
|
52
56
|
OPENAI: 'gpt-4o',
|
|
53
57
|
};
|
|
54
58
|
let donobuStack = undefined;
|
|
59
|
+
/**
|
|
60
|
+
* Self-heals a test that has failed by creating and running a new autonomous
|
|
61
|
+
* flow using the same objective of the failed test. If the new flow is
|
|
62
|
+
* successful, it uses the TestFileUpdater to update the specific failed test case
|
|
63
|
+
* in the original test file.
|
|
64
|
+
*
|
|
65
|
+
* @param testInfo The test information object that contains the failed test's
|
|
66
|
+
* annotations and other metadata.
|
|
67
|
+
* @param donobuFlowMetadata The metadata of the flow that is being self-healed.
|
|
68
|
+
*/
|
|
69
|
+
async function selfHeal(testInfo, donobuFlowMetadata) {
|
|
70
|
+
if (!donobuStack) {
|
|
71
|
+
// If DonobuStack is not initialized, we cannot self-heal.
|
|
72
|
+
Logger_1.appLogger.warn('Will not self-heal due to the Donobu stack not being initialized.');
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
else if (!donobuFlowMetadata || !donobuFlowMetadata.overallObjective) {
|
|
76
|
+
// We cannot self-heal without an flow metadata or objective.
|
|
77
|
+
Logger_1.appLogger.warn('Will not self-heal due to no test flow metadata and/or objective being provided.');
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
let gptClient;
|
|
81
|
+
try {
|
|
82
|
+
gptClient = await createGptClient();
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
// If we cannot create a GPT client, we cannot self-heal.
|
|
86
|
+
Logger_1.appLogger.warn('Will not self-heal due to no GPT client being configured:', error);
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
try {
|
|
90
|
+
const selfHealTimeoutMs = 300000; // 5 minutes
|
|
91
|
+
testInfo.setTimeout(testInfo.timeout + selfHealTimeoutMs);
|
|
92
|
+
Logger_1.appLogger.info(`Extending the test timeout ${selfHealTimeoutMs}ms for self-healing...`);
|
|
93
|
+
Logger_1.appLogger.info('Attempting to self-heal by creating a new autonomous flow...');
|
|
94
|
+
const newFlow = await donobuStack.flowsManager.createFlow({
|
|
95
|
+
targetWebsite: donobuFlowMetadata.targetWebsite,
|
|
96
|
+
overallObjective: donobuFlowMetadata.overallObjective,
|
|
97
|
+
name: donobuFlowMetadata.name ?? undefined,
|
|
98
|
+
browser: donobuFlowMetadata.browser,
|
|
99
|
+
callbackUrl: undefined,
|
|
100
|
+
customTools: donobuFlowMetadata.customTools ?? undefined,
|
|
101
|
+
maxIterations: 15,
|
|
102
|
+
gptConfigNameOverride: undefined,
|
|
103
|
+
defaultToolTipDurationMilliseconds: undefined,
|
|
104
|
+
initialRunMode: 'AUTONOMOUS',
|
|
105
|
+
isControlPanelEnabled: false,
|
|
106
|
+
allowedTools: undefined,
|
|
107
|
+
toolCallsOnStart: undefined,
|
|
108
|
+
resultJsonSchema: undefined,
|
|
109
|
+
}, gptClient);
|
|
110
|
+
Logger_1.appLogger.info('Running the new autonomous flow...');
|
|
111
|
+
await newFlow.job;
|
|
112
|
+
if (newFlow.donobuFlow.metadata.state === 'SUCCESS') {
|
|
113
|
+
Logger_1.appLogger.info('Self-heal succeeded! The new autonomous flow completed successfully. Generating revised test...');
|
|
114
|
+
const newTestCode = await donobuStack.flowsManager.getFlowAsPlaywrightScript(newFlow.donobuFlow.metadata.id);
|
|
115
|
+
// Save the fixed test as an attachment
|
|
116
|
+
await testInfo.attach('fixed-test.ts', {
|
|
117
|
+
body: newTestCode,
|
|
118
|
+
contentType: 'application/typescript',
|
|
119
|
+
});
|
|
120
|
+
// Get the failed test file path
|
|
121
|
+
const testFilePath = testInfo.file;
|
|
122
|
+
if (testFilePath) {
|
|
123
|
+
try {
|
|
124
|
+
Logger_1.appLogger.info(`Updating test file: ${testFilePath}`);
|
|
125
|
+
const updateSuccess = await TestFileUpdater_1.TestFileUpdater.updateTestCase(testFilePath, testInfo.title, newTestCode);
|
|
126
|
+
if (updateSuccess) {
|
|
127
|
+
Logger_1.appLogger.info(`Successfully updated test file with fixed test code.`);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
Logger_1.appLogger.warn(`Test file update did not complete successfully.`);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
catch (fileUpdateError) {
|
|
134
|
+
Logger_1.appLogger.error(`Error updating test file ${testFilePath}:`, fileUpdateError);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
Logger_1.appLogger.warn('Could not update test file: test file path is not available.');
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
Logger_1.appLogger.error('Self-heal failed! The new autonomous flow did not complete successfully.');
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
Logger_1.appLogger.error('Error creating new flow when attempting to self heal:', error);
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
55
150
|
async function getOrCreateDonobuStack() {
|
|
56
151
|
if (!donobuStack) {
|
|
57
152
|
donobuStack = await (0, DonobuStack_1.setupDonobuStack)(DonobuDeploymentEnvironment_1.DonobuDeploymentEnvironment.LOCAL, new RequestContextHolder_1.RequestContextHolder());
|
|
@@ -165,7 +260,7 @@ function vercelAiClientFixture(model) {
|
|
|
165
260
|
* If the modelName is not specified, it will be defaulted according to the
|
|
166
261
|
* DEFAULT_GPT_MODEL_FOR_PLATFORM mapping.
|
|
167
262
|
*/
|
|
168
|
-
async function
|
|
263
|
+
async function createGptClient(modelName) {
|
|
169
264
|
// Check which API keys are available
|
|
170
265
|
const hasAnthropicKey = !!process.env.ANTHROPIC_API_KEY;
|
|
171
266
|
const hasGoogleKey = !!process.env.GOOGLE_GENERATIVE_AI_API_KEY;
|
|
@@ -200,7 +295,7 @@ Alternatively, set a flow-runner agent via POST /api/agents/flow-runner or via t
|
|
|
200
295
|
}
|
|
201
296
|
function gptClientFixture(modelName) {
|
|
202
297
|
return async ({}, use) => {
|
|
203
|
-
const client = await
|
|
298
|
+
const client = await createGptClient(modelName);
|
|
204
299
|
await use(client);
|
|
205
300
|
};
|
|
206
301
|
}
|
|
@@ -227,9 +322,10 @@ exports.test = test_1.test.extend({
|
|
|
227
322
|
await page
|
|
228
323
|
.context()
|
|
229
324
|
.addInitScript(PlaywrightUtils_1.PlaywrightUtils.smartSelectorGeneratorInitScript());
|
|
230
|
-
let
|
|
325
|
+
let isTestRunInitialized = false;
|
|
326
|
+
let isTestRunFailed = false;
|
|
231
327
|
async function maybeInitDonobu() {
|
|
232
|
-
if (
|
|
328
|
+
if (isTestRunInitialized) {
|
|
233
329
|
return;
|
|
234
330
|
}
|
|
235
331
|
const donobuTestFlowMetadata = {
|
|
@@ -250,7 +346,7 @@ exports.test = test_1.test.extend({
|
|
|
250
346
|
runMode: 'DETERMINISTIC',
|
|
251
347
|
isControlPanelEnabled: false,
|
|
252
348
|
callbackUrl: null,
|
|
253
|
-
targetWebsite:
|
|
349
|
+
targetWebsite: PLACEHOLDER_FLOW_URL,
|
|
254
350
|
overallObjective: testInfo.annotations.find((v) => {
|
|
255
351
|
return v.type === 'objective';
|
|
256
352
|
})?.description ?? null,
|
|
@@ -269,7 +365,7 @@ exports.test = test_1.test.extend({
|
|
|
269
365
|
const persistenceLayer = await donobu.flowsPersistenceFactory.createPersistenceLayer();
|
|
270
366
|
await persistenceLayer.saveMetadata(donobuTestFlowMetadata);
|
|
271
367
|
page._donobuFlowMetadata = donobuTestFlowMetadata;
|
|
272
|
-
|
|
368
|
+
isTestRunInitialized = true;
|
|
273
369
|
}
|
|
274
370
|
const originalGoto = page.goto;
|
|
275
371
|
// Intercept 'page.goto' so that Donobu can later re-run it as a standard
|
|
@@ -282,7 +378,7 @@ exports.test = test_1.test.extend({
|
|
|
282
378
|
const persistenceLayer = await donobu.flowsPersistenceFactory.createPersistenceLayer();
|
|
283
379
|
// Update the target website to whatever the first place we are
|
|
284
380
|
// navigating to is.
|
|
285
|
-
if (page._donobuFlowMetadata.targetWebsite ===
|
|
381
|
+
if (page._donobuFlowMetadata.targetWebsite === PLACEHOLDER_FLOW_URL) {
|
|
286
382
|
page._donobuFlowMetadata = {
|
|
287
383
|
...page._donobuFlowMetadata,
|
|
288
384
|
targetWebsite: url,
|
|
@@ -291,19 +387,24 @@ exports.test = test_1.test.extend({
|
|
|
291
387
|
}
|
|
292
388
|
try {
|
|
293
389
|
const resp = await originalGoto.call(page, url, options);
|
|
390
|
+
await PlaywrightUtils_1.PlaywrightUtils.waitForPageStability(page);
|
|
391
|
+
const pageTitle = await page.title();
|
|
294
392
|
const postCallImage = await PlaywrightUtils_1.PlaywrightUtils.takePngScreenshot(page);
|
|
295
393
|
const postCallImageId = await persistenceLayer.savePngScreenShot(flowId, postCallImage);
|
|
296
394
|
const completedAt = new Date().getTime();
|
|
297
395
|
await persistenceLayer.saveToolCall(flowId, {
|
|
298
396
|
id: MiscUtils_1.MiscUtils.createAdHocToolCallId(),
|
|
299
|
-
toolName:
|
|
397
|
+
toolName: GoToWebpageTool_1.GoToWebpageTool.NAME,
|
|
300
398
|
parameters: {
|
|
301
399
|
url: url,
|
|
302
400
|
},
|
|
303
401
|
outcome: {
|
|
304
402
|
isSuccessful: true,
|
|
305
403
|
forLlm: `Successfully navigated to ${url}`,
|
|
306
|
-
metadata:
|
|
404
|
+
metadata: {
|
|
405
|
+
pageTitle: pageTitle,
|
|
406
|
+
resolvedUrl: page.url(),
|
|
407
|
+
},
|
|
307
408
|
},
|
|
308
409
|
postCallImageId: postCallImageId,
|
|
309
410
|
page: url,
|
|
@@ -332,6 +433,8 @@ exports.test = test_1.test.extend({
|
|
|
332
433
|
startedAt: startedAt,
|
|
333
434
|
completedAt: completedAt,
|
|
334
435
|
});
|
|
436
|
+
// Mark test as failed for later callback
|
|
437
|
+
isTestRunFailed = true;
|
|
335
438
|
throw error;
|
|
336
439
|
}
|
|
337
440
|
};
|
|
@@ -353,14 +456,21 @@ exports.test = test_1.test.extend({
|
|
|
353
456
|
metadata: page._donobuFlowMetadata,
|
|
354
457
|
toolCallId: clonedParams.toolCallId ?? MiscUtils_1.MiscUtils.createAdHocToolCallId(),
|
|
355
458
|
};
|
|
356
|
-
|
|
357
|
-
.invokeTool(toolCallContext, toolName, clonedParams, false)
|
|
358
|
-
.then(async (result) => {
|
|
459
|
+
try {
|
|
460
|
+
const result = await new ToolManager_1.ToolManager(ToolManager_1.ToolManager.ALL_TOOLS).invokeTool(toolCallContext, toolName, clonedParams, false);
|
|
359
461
|
await persistenceLayer.saveMetadata(page._donobuFlowMetadata);
|
|
360
462
|
await persistenceLayer.saveToolCall(page._donobuFlowMetadata.id, result);
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
463
|
+
// Check if tool execution was successful
|
|
464
|
+
if (!result.outcome.isSuccessful) {
|
|
465
|
+
throw new Error(`${toolName} execution failed: ${JSON.stringify(result, null, 2)}`);
|
|
466
|
+
}
|
|
467
|
+
return result.outcome;
|
|
468
|
+
}
|
|
469
|
+
catch (error) {
|
|
470
|
+
// Mark test as failed if an exception occurs during tool execution
|
|
471
|
+
isTestRunFailed = true;
|
|
472
|
+
throw error;
|
|
473
|
+
}
|
|
364
474
|
};
|
|
365
475
|
page.analyzePageText = async (params) => {
|
|
366
476
|
return page.run('analyzePageText', params);
|
|
@@ -380,16 +490,23 @@ exports.test = test_1.test.extend({
|
|
|
380
490
|
page.extract = async (params) => {
|
|
381
491
|
await maybeInitDonobu();
|
|
382
492
|
if (!gptClient) {
|
|
493
|
+
isTestRunFailed = true;
|
|
383
494
|
throw Error('Cannot extract an object from page without a GPT client set up!');
|
|
384
495
|
}
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
496
|
+
try {
|
|
497
|
+
const persistenceLayer = await donobu.flowsPersistenceFactory.createPersistenceLayer();
|
|
498
|
+
const toolCallHistory = await persistenceLayer.getToolCalls(page._donobuFlowMetadata.id);
|
|
499
|
+
const structuredOutputMessage = await (0, DonobuFlow_1.extractFromPage)(params.instruction ??
|
|
500
|
+
'Generate an object conforming to the given JSON-schema', params.schema, page, toolCallHistory, gptClient);
|
|
501
|
+
page._donobuFlowMetadata.resultJsonSchema = params.schema;
|
|
502
|
+
page._donobuFlowMetadata.result = structuredOutputMessage.output;
|
|
503
|
+
await persistenceLayer.saveMetadata(page._donobuFlowMetadata);
|
|
504
|
+
return structuredOutputMessage.output;
|
|
505
|
+
}
|
|
506
|
+
catch (error) {
|
|
507
|
+
isTestRunFailed = true;
|
|
508
|
+
throw error;
|
|
509
|
+
}
|
|
393
510
|
};
|
|
394
511
|
page.hoverOverElement = async (params) => {
|
|
395
512
|
return page.run('hover', params);
|
|
@@ -415,19 +532,46 @@ exports.test = test_1.test.extend({
|
|
|
415
532
|
try {
|
|
416
533
|
// Let Playwright continue and give tests the patched page.
|
|
417
534
|
await use(page);
|
|
535
|
+
// Check if the test status is failed in the testInfo
|
|
536
|
+
// This catches failures that were marked by Playwright itself
|
|
537
|
+
if (testInfo.status === 'failed' || testInfo.status === 'timedOut') {
|
|
538
|
+
isTestRunFailed = true;
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
catch (error) {
|
|
542
|
+
// Mark test as failed if an uncaught exception occurs during the test
|
|
543
|
+
isTestRunFailed = true;
|
|
544
|
+
throw error;
|
|
418
545
|
}
|
|
419
546
|
finally {
|
|
420
547
|
try {
|
|
421
548
|
const persistenceLayer = await donobu.flowsPersistenceFactory.createPersistenceLayer();
|
|
422
549
|
if (page._donobuFlowMetadata) {
|
|
423
|
-
|
|
550
|
+
// Update metadata with final status
|
|
551
|
+
page._donobuFlowMetadata.state = isTestRunFailed
|
|
552
|
+
? 'FAILED'
|
|
553
|
+
: 'SUCCESS';
|
|
424
554
|
page._donobuFlowMetadata.completedAt = new Date().getTime();
|
|
425
555
|
await persistenceLayer.saveMetadata(page._donobuFlowMetadata);
|
|
556
|
+
await testInfo.attach('test-flow-metadata.json', {
|
|
557
|
+
body: JSON.stringify(page._donobuFlowMetadata, null, 2),
|
|
558
|
+
contentType: 'application/json',
|
|
559
|
+
});
|
|
426
560
|
}
|
|
427
561
|
}
|
|
428
562
|
catch (error) {
|
|
429
563
|
// Log but don't throw, to ensure cleanup continues.
|
|
430
|
-
|
|
564
|
+
Logger_1.appLogger.error('Error during test cleanup:', error);
|
|
565
|
+
}
|
|
566
|
+
const isSelfHealEnabledEnvVar = process.env[envVars_1.ENV_VAR_NAMES.SELF_HEAL_TESTS_ENABLED]?.trim();
|
|
567
|
+
if (isTestRunFailed &&
|
|
568
|
+
(isSelfHealEnabledEnvVar === 'true' || isSelfHealEnabledEnvVar === '1')) {
|
|
569
|
+
try {
|
|
570
|
+
await selfHeal(testInfo, page._donobuFlowMetadata);
|
|
571
|
+
}
|
|
572
|
+
catch (selfHealError) {
|
|
573
|
+
Logger_1.appLogger.error('Error when attempting to self heal:', selfHealError);
|
|
574
|
+
}
|
|
431
575
|
}
|
|
432
576
|
}
|
|
433
577
|
},
|