donobu 2.25.1 → 2.26.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/apis/ToolsApi.d.ts +1 -6
- package/dist/apis/ToolsApi.d.ts.map +1 -1
- package/dist/apis/ToolsApi.js +3 -6
- package/dist/apis/ToolsApi.js.map +1 -1
- package/dist/assets/generated/version +1 -1
- package/dist/esm/apis/ToolsApi.d.ts +1 -6
- package/dist/esm/apis/ToolsApi.d.ts.map +1 -1
- package/dist/esm/apis/ToolsApi.js +3 -6
- package/dist/esm/apis/ToolsApi.js.map +1 -1
- package/dist/esm/assets/generated/version +1 -1
- package/dist/esm/lib/fixtures/gptClients.js +1 -1
- package/dist/esm/lib/testExtension.d.ts.map +1 -1
- package/dist/esm/lib/testExtension.js +8 -1
- package/dist/esm/lib/testExtension.js.map +1 -1
- package/dist/esm/main.d.ts.map +1 -1
- package/dist/esm/main.js +5 -0
- package/dist/esm/main.js.map +1 -1
- package/dist/esm/managers/AdminApiController.d.ts.map +1 -1
- package/dist/esm/managers/AdminApiController.js +1 -2
- package/dist/esm/managers/AdminApiController.js.map +1 -1
- package/dist/esm/managers/CodeGenerator.d.ts.map +1 -1
- package/dist/esm/managers/CodeGenerator.js +2 -1
- package/dist/esm/managers/CodeGenerator.js.map +1 -1
- package/dist/esm/managers/DonobuFlowsManager.d.ts.map +1 -1
- package/dist/esm/managers/DonobuFlowsManager.js +15 -15
- package/dist/esm/managers/DonobuFlowsManager.js.map +1 -1
- package/dist/esm/managers/GptConfigsManager.d.ts.map +1 -1
- package/dist/esm/managers/GptConfigsManager.js +3 -6
- package/dist/esm/managers/GptConfigsManager.js.map +1 -1
- package/dist/esm/managers/PluginLoader.d.ts +4 -0
- package/dist/esm/managers/PluginLoader.d.ts.map +1 -0
- package/dist/esm/managers/PluginLoader.js +103 -0
- package/dist/esm/managers/PluginLoader.js.map +1 -0
- package/dist/esm/managers/ToolManager.d.ts +3 -1
- package/dist/esm/managers/ToolManager.d.ts.map +1 -1
- package/dist/esm/managers/ToolManager.js +12 -1
- package/dist/esm/managers/ToolManager.js.map +1 -1
- package/dist/lib/fixtures/gptClients.js +1 -1
- package/dist/lib/testExtension.d.ts.map +1 -1
- package/dist/lib/testExtension.js +8 -1
- package/dist/lib/testExtension.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +5 -0
- package/dist/main.js.map +1 -1
- package/dist/managers/AdminApiController.d.ts.map +1 -1
- package/dist/managers/AdminApiController.js +1 -2
- package/dist/managers/AdminApiController.js.map +1 -1
- package/dist/managers/CodeGenerator.d.ts.map +1 -1
- package/dist/managers/CodeGenerator.js +2 -1
- package/dist/managers/CodeGenerator.js.map +1 -1
- package/dist/managers/DonobuFlowsManager.d.ts.map +1 -1
- package/dist/managers/DonobuFlowsManager.js +15 -15
- package/dist/managers/DonobuFlowsManager.js.map +1 -1
- package/dist/managers/GptConfigsManager.d.ts.map +1 -1
- package/dist/managers/GptConfigsManager.js +3 -6
- package/dist/managers/GptConfigsManager.js.map +1 -1
- package/dist/managers/PluginLoader.d.ts +4 -0
- package/dist/managers/PluginLoader.d.ts.map +1 -0
- package/dist/managers/PluginLoader.js +104 -0
- package/dist/managers/PluginLoader.js.map +1 -0
- package/dist/managers/ToolManager.d.ts +3 -1
- package/dist/managers/ToolManager.d.ts.map +1 -1
- package/dist/managers/ToolManager.js +12 -1
- package/dist/managers/ToolManager.js.map +1 -1
- package/dist/models/FlowMetadata.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/esm/lib/utils/SelfHealingDebugReporter.d.ts +0 -69
- package/dist/esm/lib/utils/SelfHealingDebugReporter.d.ts.map +0 -1
- package/dist/esm/lib/utils/SelfHealingDebugReporter.js +0 -486
- package/dist/esm/lib/utils/SelfHealingDebugReporter.js.map +0 -1
- package/dist/esm/lib/utils/SelfHealingTestUtils.d.ts +0 -55
- package/dist/esm/lib/utils/SelfHealingTestUtils.d.ts.map +0 -1
- package/dist/esm/lib/utils/SelfHealingTestUtils.js +0 -335
- package/dist/esm/lib/utils/SelfHealingTestUtils.js.map +0 -1
- package/dist/esm/lib/utils/VideoArtifactManager.d.ts +0 -57
- package/dist/esm/lib/utils/VideoArtifactManager.d.ts.map +0 -1
- package/dist/esm/lib/utils/VideoArtifactManager.js +0 -343
- package/dist/esm/lib/utils/VideoArtifactManager.js.map +0 -1
- package/dist/esm/plugin/PluginLoader.d.ts +0 -3
- package/dist/esm/plugin/PluginLoader.d.ts.map +0 -1
- package/dist/esm/plugin/PluginLoader.js +0 -44
- package/dist/esm/plugin/PluginLoader.js.map +0 -1
- package/dist/esm/plugin/PluginModule.d.ts +0 -9
- package/dist/esm/plugin/PluginModule.d.ts.map +0 -1
- package/dist/esm/plugin/PluginModule.js +0 -3
- package/dist/esm/plugin/PluginModule.js.map +0 -1
- package/dist/lib/utils/SelfHealingDebugReporter.d.ts +0 -69
- package/dist/lib/utils/SelfHealingDebugReporter.d.ts.map +0 -1
- package/dist/lib/utils/SelfHealingDebugReporter.js +0 -486
- package/dist/lib/utils/SelfHealingDebugReporter.js.map +0 -1
- package/dist/lib/utils/SelfHealingTestUtils.d.ts +0 -55
- package/dist/lib/utils/SelfHealingTestUtils.d.ts.map +0 -1
- package/dist/lib/utils/SelfHealingTestUtils.js +0 -335
- package/dist/lib/utils/SelfHealingTestUtils.js.map +0 -1
- package/dist/lib/utils/VideoArtifactManager.d.ts +0 -57
- package/dist/lib/utils/VideoArtifactManager.d.ts.map +0 -1
- package/dist/lib/utils/VideoArtifactManager.js +0 -343
- package/dist/lib/utils/VideoArtifactManager.js.map +0 -1
- package/dist/plugin/PluginLoader.d.ts +0 -3
- package/dist/plugin/PluginLoader.d.ts.map +0 -1
- package/dist/plugin/PluginLoader.js +0 -44
- package/dist/plugin/PluginLoader.js.map +0 -1
- package/dist/plugin/PluginModule.d.ts +0 -9
- package/dist/plugin/PluginModule.d.ts.map +0 -1
- package/dist/plugin/PluginModule.js +0 -3
- package/dist/plugin/PluginModule.js.map +0 -1
|
@@ -1,335 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.SelfHealingTestUtils = void 0;
|
|
37
|
-
const fs = __importStar(require("fs"));
|
|
38
|
-
const path = __importStar(require("path"));
|
|
39
|
-
const Logger_1 = require("../../utils/Logger");
|
|
40
|
-
/**
|
|
41
|
-
* Utility functions for working with self-healing test artifacts
|
|
42
|
-
*/
|
|
43
|
-
class SelfHealingTestUtils {
|
|
44
|
-
/**
|
|
45
|
-
* Analyzes a test's artifacts to determine if it went through self-healing
|
|
46
|
-
* and what artifacts are available
|
|
47
|
-
*/
|
|
48
|
-
static analyzeSelfHealingArtifacts(testInfo) {
|
|
49
|
-
const outputDir = testInfo.outputDir;
|
|
50
|
-
const annotations = testInfo.annotations;
|
|
51
|
-
// Check for self-healing annotations
|
|
52
|
-
const isHealed = annotations.some((a) => a.type === 'self-healed');
|
|
53
|
-
const fileUpdated = annotations.some((a) => a.type === 'self-healed-file-updated');
|
|
54
|
-
const healingFailed = annotations.some((a) => a.type === 'self-healing-failed');
|
|
55
|
-
const errors = annotations
|
|
56
|
-
.filter((a) => a.type.includes('error') || a.type.includes('failed'))
|
|
57
|
-
.map((a) => a.description || 'Unknown error');
|
|
58
|
-
// Check for artifacts in output directory
|
|
59
|
-
let hasDebugReport = false;
|
|
60
|
-
let hasVideoManifest = false;
|
|
61
|
-
let hasFixedTest = false;
|
|
62
|
-
let hasSummary = false;
|
|
63
|
-
let debugReportPath;
|
|
64
|
-
let videoManifestPath;
|
|
65
|
-
let fixedTestPath;
|
|
66
|
-
let summaryPath;
|
|
67
|
-
let videoCount = 0;
|
|
68
|
-
if (outputDir && fs.existsSync(outputDir)) {
|
|
69
|
-
const files = fs.readdirSync(outputDir);
|
|
70
|
-
for (const file of files) {
|
|
71
|
-
if (file === 'self-healing-debug-report.html') {
|
|
72
|
-
hasDebugReport = true;
|
|
73
|
-
debugReportPath = path.join(outputDir, file);
|
|
74
|
-
}
|
|
75
|
-
else if (file === 'video-linking-manifest.html') {
|
|
76
|
-
hasVideoManifest = true;
|
|
77
|
-
videoManifestPath = path.join(outputDir, file);
|
|
78
|
-
}
|
|
79
|
-
else if (file === 'fixed-test.ts') {
|
|
80
|
-
hasFixedTest = true;
|
|
81
|
-
fixedTestPath = path.join(outputDir, file);
|
|
82
|
-
}
|
|
83
|
-
else if (file === 'self-healing-summary.md') {
|
|
84
|
-
hasSummary = true;
|
|
85
|
-
summaryPath = path.join(outputDir, file);
|
|
86
|
-
}
|
|
87
|
-
else if (file.endsWith('.webm') || file.endsWith('.mp4')) {
|
|
88
|
-
videoCount++;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
return {
|
|
93
|
-
hasDebugReport,
|
|
94
|
-
hasVideoManifest,
|
|
95
|
-
hasFixedTest,
|
|
96
|
-
hasSummary,
|
|
97
|
-
videoCount,
|
|
98
|
-
debugReportPath,
|
|
99
|
-
videoManifestPath,
|
|
100
|
-
fixedTestPath,
|
|
101
|
-
summaryPath,
|
|
102
|
-
annotations: {
|
|
103
|
-
isHealed,
|
|
104
|
-
fileUpdated,
|
|
105
|
-
healingFailed,
|
|
106
|
-
errors,
|
|
107
|
-
},
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* Generates a quick start guide for analyzing self-healing results
|
|
112
|
-
*/
|
|
113
|
-
static generateQuickStartGuide(summary) {
|
|
114
|
-
const { annotations, hasDebugReport, hasVideoManifest, hasFixedTest, videoCount, } = summary;
|
|
115
|
-
let guide = '# Self-Healing Analysis Quick Start\n\n';
|
|
116
|
-
// Status overview
|
|
117
|
-
if (annotations.isHealed) {
|
|
118
|
-
guide +=
|
|
119
|
-
'✅ **Self-Healing Successful** - Your test was automatically fixed!\n\n';
|
|
120
|
-
if (annotations.fileUpdated) {
|
|
121
|
-
guide +=
|
|
122
|
-
'📝 **Original test file updated** - The fix has been applied to your test file.\n\n';
|
|
123
|
-
}
|
|
124
|
-
else {
|
|
125
|
-
guide +=
|
|
126
|
-
'⚠️ **File not updated** - Check the `fixed-test.ts` attachment for the corrected code.\n\n';
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
else if (annotations.healingFailed) {
|
|
130
|
-
guide +=
|
|
131
|
-
'❌ **Self-Healing Failed** - The automatic fix attempt was unsuccessful.\n\n';
|
|
132
|
-
}
|
|
133
|
-
else {
|
|
134
|
-
guide +=
|
|
135
|
-
'ℹ️ **No self-healing attempted** - This test did not trigger self-healing.\n\n';
|
|
136
|
-
}
|
|
137
|
-
// Error summary
|
|
138
|
-
if (annotations.errors.length > 0) {
|
|
139
|
-
guide += '## Errors Encountered\n\n';
|
|
140
|
-
annotations.errors.forEach((error, index) => {
|
|
141
|
-
guide += `${index + 1}. ${error}\n`;
|
|
142
|
-
});
|
|
143
|
-
guide += '\n';
|
|
144
|
-
}
|
|
145
|
-
// Artifact analysis
|
|
146
|
-
guide += '## Available Artifacts\n\n';
|
|
147
|
-
if (hasDebugReport) {
|
|
148
|
-
guide += '📊 **Debug Report** (`self-healing-debug-report.html`)\n';
|
|
149
|
-
guide += ' - Detailed action-by-action comparison\n';
|
|
150
|
-
guide += ' - Success rate analysis\n';
|
|
151
|
-
guide += ' - Parameter differences\n';
|
|
152
|
-
guide += ' - **Start here for detailed analysis**\n\n';
|
|
153
|
-
}
|
|
154
|
-
if (hasVideoManifest && videoCount > 0) {
|
|
155
|
-
guide += `🎥 **Video Artifacts** (${videoCount} videos found)\n`;
|
|
156
|
-
guide += ' - Original test execution video\n';
|
|
157
|
-
guide += ' - Self-healing session video\n';
|
|
158
|
-
guide += ' - Video linking manifest (`video-linking-manifest.html`)\n';
|
|
159
|
-
guide +=
|
|
160
|
-
' - **Use with debug report timestamps for visual comparison**\n\n';
|
|
161
|
-
}
|
|
162
|
-
else if (videoCount > 0) {
|
|
163
|
-
guide += `🎥 **Video Files** (${videoCount} found, but no linking manifest)\n`;
|
|
164
|
-
guide +=
|
|
165
|
-
' - Videos are available but may not be linked to debug data\n\n';
|
|
166
|
-
}
|
|
167
|
-
if (hasFixedTest) {
|
|
168
|
-
guide += '🔧 **Fixed Test Code** (`fixed-test.ts`)\n';
|
|
169
|
-
guide += ' - The corrected test code generated by self-healing\n';
|
|
170
|
-
guide += ' - Compare with your original test to see changes\n\n';
|
|
171
|
-
}
|
|
172
|
-
// Recommended workflow
|
|
173
|
-
guide += '## Recommended Analysis Workflow\n\n';
|
|
174
|
-
if (annotations.isHealed) {
|
|
175
|
-
guide += '### 1. Quick Overview\n';
|
|
176
|
-
guide += '- Read the summary in `self-healing-summary.md`\n';
|
|
177
|
-
guide += '- Check if your test file was automatically updated\n\n';
|
|
178
|
-
guide += '### 2. Understand the Changes\n';
|
|
179
|
-
if (hasDebugReport) {
|
|
180
|
-
guide += '- Open `self-healing-debug-report.html` in a browser\n';
|
|
181
|
-
guide += '- Review the "Summary" section for key statistics\n';
|
|
182
|
-
guide += '- Check the "Action-by-Action Comparison" table\n\n';
|
|
183
|
-
}
|
|
184
|
-
guide += '### 3. Visual Analysis (if videos available)\n';
|
|
185
|
-
if (hasVideoManifest) {
|
|
186
|
-
guide += '- Open `video-linking-manifest.html` for video navigation\n';
|
|
187
|
-
guide += '- Use timestamp links to jump between related actions\n';
|
|
188
|
-
guide +=
|
|
189
|
-
'- Compare original failure points with successful healing\n\n';
|
|
190
|
-
}
|
|
191
|
-
guide += '### 4. Code Review\n';
|
|
192
|
-
guide += '- Compare `fixed-test.ts` with your original test\n';
|
|
193
|
-
guide += '- Understand what selectors or logic changed\n';
|
|
194
|
-
guide += '- Consider if changes reveal issues in your application\n\n';
|
|
195
|
-
guide += '### 5. Next Steps\n';
|
|
196
|
-
guide += '- Test the fixed code in your environment\n';
|
|
197
|
-
guide += '- Consider if the root cause needs application fixes\n';
|
|
198
|
-
guide +=
|
|
199
|
-
'- Update your test maintenance practices based on learnings\n\n';
|
|
200
|
-
}
|
|
201
|
-
else {
|
|
202
|
-
guide += '### 1. Analyze the Failure\n';
|
|
203
|
-
guide += '- Check why self-healing was not attempted or failed\n';
|
|
204
|
-
guide += '- Review error messages and logs\n\n';
|
|
205
|
-
guide += '### 2. Manual Investigation\n';
|
|
206
|
-
guide += '- Use available artifacts to understand the test failure\n';
|
|
207
|
-
guide += '- Consider manual fixes based on the analysis\n\n';
|
|
208
|
-
}
|
|
209
|
-
// Troubleshooting
|
|
210
|
-
guide += '## Troubleshooting\n\n';
|
|
211
|
-
guide += '**Missing artifacts?**\n';
|
|
212
|
-
guide +=
|
|
213
|
-
'- Check if self-healing is enabled: `SELF_HEAL_TESTS_ENABLED=true`\n';
|
|
214
|
-
guide += '- Verify GPT client configuration for autonomous flows\n\n';
|
|
215
|
-
guide += '**Video files not linked?**\n';
|
|
216
|
-
guide += '- Videos may exist but linking failed\n';
|
|
217
|
-
guide += '- Check test output directory for `.webm` or `.mp4` files\n\n';
|
|
218
|
-
guide += '**Self-healing failed?**\n';
|
|
219
|
-
guide += '- Check if the test objective was clear enough\n';
|
|
220
|
-
guide += '- Verify the target website was accessible\n';
|
|
221
|
-
guide += '- Review GPT client logs for detailed error information\n\n';
|
|
222
|
-
return guide;
|
|
223
|
-
}
|
|
224
|
-
/**
|
|
225
|
-
* Extracts key insights from self-healing artifacts for CI/CD reporting
|
|
226
|
-
*/
|
|
227
|
-
static extractInsightsForCI(summary) {
|
|
228
|
-
const { annotations, hasDebugReport, videoCount } = summary;
|
|
229
|
-
let status;
|
|
230
|
-
if (annotations.isHealed) {
|
|
231
|
-
status = 'healed';
|
|
232
|
-
}
|
|
233
|
-
else if (annotations.healingFailed) {
|
|
234
|
-
status = 'failed';
|
|
235
|
-
}
|
|
236
|
-
else {
|
|
237
|
-
status = 'not-attempted';
|
|
238
|
-
}
|
|
239
|
-
const metrics = {
|
|
240
|
-
healingAttempted: annotations.isHealed || annotations.healingFailed,
|
|
241
|
-
healingSuccessful: annotations.isHealed,
|
|
242
|
-
fileUpdated: annotations.fileUpdated,
|
|
243
|
-
videosAvailable: videoCount,
|
|
244
|
-
hasDebugData: hasDebugReport,
|
|
245
|
-
};
|
|
246
|
-
const recommendations = [];
|
|
247
|
-
if (annotations.isHealed) {
|
|
248
|
-
recommendations.push('Review self-healing changes to understand root cause');
|
|
249
|
-
if (!annotations.fileUpdated) {
|
|
250
|
-
recommendations.push('Manually apply the fix from fixed-test.ts');
|
|
251
|
-
}
|
|
252
|
-
recommendations.push('Consider if application changes are needed');
|
|
253
|
-
}
|
|
254
|
-
else if (annotations.healingFailed) {
|
|
255
|
-
recommendations.push('Investigate why self-healing failed');
|
|
256
|
-
recommendations.push('Check GPT client configuration and connectivity');
|
|
257
|
-
recommendations.push('Review test objective clarity');
|
|
258
|
-
}
|
|
259
|
-
else {
|
|
260
|
-
recommendations.push('Consider enabling self-healing for failed tests');
|
|
261
|
-
recommendations.push('Ensure GPT client is properly configured');
|
|
262
|
-
}
|
|
263
|
-
if (videoCount === 0) {
|
|
264
|
-
recommendations.push('Enable video recording for better debugging');
|
|
265
|
-
}
|
|
266
|
-
return {
|
|
267
|
-
status,
|
|
268
|
-
metrics,
|
|
269
|
-
recommendations,
|
|
270
|
-
};
|
|
271
|
-
}
|
|
272
|
-
/**
|
|
273
|
-
* Creates a comprehensive test report that can be attached to the test
|
|
274
|
-
*/
|
|
275
|
-
static async createTestAnalysisReport(testInfo) {
|
|
276
|
-
try {
|
|
277
|
-
const summary = this.analyzeSelfHealingArtifacts(testInfo);
|
|
278
|
-
const insights = this.extractInsightsForCI(summary);
|
|
279
|
-
const quickStartGuide = this.generateQuickStartGuide(summary);
|
|
280
|
-
// Create comprehensive analysis report
|
|
281
|
-
const analysisReport = {
|
|
282
|
-
testInfo: {
|
|
283
|
-
title: testInfo.title,
|
|
284
|
-
file: testInfo.file,
|
|
285
|
-
status: testInfo.status,
|
|
286
|
-
duration: testInfo.duration,
|
|
287
|
-
},
|
|
288
|
-
selfHealing: summary,
|
|
289
|
-
insights: insights,
|
|
290
|
-
generatedAt: new Date().toISOString(),
|
|
291
|
-
};
|
|
292
|
-
// Attach the analysis report
|
|
293
|
-
await testInfo.attach('self-healing-analysis.json', {
|
|
294
|
-
body: JSON.stringify(analysisReport, null, 2),
|
|
295
|
-
contentType: 'application/json',
|
|
296
|
-
});
|
|
297
|
-
// Attach the quick start guide
|
|
298
|
-
await testInfo.attach('self-healing-quick-start.md', {
|
|
299
|
-
body: quickStartGuide,
|
|
300
|
-
contentType: 'text/markdown',
|
|
301
|
-
});
|
|
302
|
-
// Create a simple status badge for CI dashboards
|
|
303
|
-
const badge = this.createStatusBadge(insights.status);
|
|
304
|
-
await testInfo.attach('self-healing-status-badge.svg', {
|
|
305
|
-
body: badge,
|
|
306
|
-
contentType: 'image/svg+xml',
|
|
307
|
-
});
|
|
308
|
-
Logger_1.appLogger.info('Self-healing analysis report created successfully');
|
|
309
|
-
}
|
|
310
|
-
catch (error) {
|
|
311
|
-
Logger_1.appLogger.error('Failed to create self-healing analysis report:', error);
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
/**
|
|
315
|
-
* Creates an SVG status badge for self-healing results
|
|
316
|
-
*/
|
|
317
|
-
static createStatusBadge(status) {
|
|
318
|
-
const configs = {
|
|
319
|
-
healed: { color: '#4c1', text: 'Self-Healed' },
|
|
320
|
-
failed: { color: '#e05d44', text: 'Healing Failed' },
|
|
321
|
-
'not-attempted': { color: '#9f9f9f', text: 'No Healing' },
|
|
322
|
-
};
|
|
323
|
-
const config = configs[status];
|
|
324
|
-
const textWidth = config.text.length * 6 + 20;
|
|
325
|
-
return `
|
|
326
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="${textWidth}" height="20">
|
|
327
|
-
<rect width="${textWidth}" height="20" fill="${config.color}" rx="3"/>
|
|
328
|
-
<text x="${textWidth / 2}" y="14" font-family="Arial" font-size="11" fill="white" text-anchor="middle">
|
|
329
|
-
${config.text}
|
|
330
|
-
</text>
|
|
331
|
-
</svg>`.trim();
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
exports.SelfHealingTestUtils = SelfHealingTestUtils;
|
|
335
|
-
//# sourceMappingURL=SelfHealingTestUtils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SelfHealingTestUtils.js","sourceRoot":"","sources":["../../../src/lib/utils/SelfHealingTestUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import { TestInfo } from '@playwright/test';
|
|
2
|
-
import { FlowMetadata } from '../../models/FlowMetadata';
|
|
3
|
-
export interface VideoMetadata {
|
|
4
|
-
filePath: string;
|
|
5
|
-
fileName: string;
|
|
6
|
-
flowId: string;
|
|
7
|
-
flowName?: string;
|
|
8
|
-
duration?: number;
|
|
9
|
-
size: number;
|
|
10
|
-
createdAt: number;
|
|
11
|
-
type: 'original-test' | 'self-healing' | 'unknown';
|
|
12
|
-
}
|
|
13
|
-
export interface LinkedVideoArtifacts {
|
|
14
|
-
originalVideo?: VideoMetadata;
|
|
15
|
-
selfHealingVideo?: VideoMetadata;
|
|
16
|
-
linkingMetadata: {
|
|
17
|
-
originalFlowId: string;
|
|
18
|
-
selfHealingFlowId: string;
|
|
19
|
-
testName: string;
|
|
20
|
-
relationship: 'self-healing-pair';
|
|
21
|
-
createdAt: number;
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Manages video artifacts for self-healing scenarios, providing linking and metadata capabilities
|
|
26
|
-
*/
|
|
27
|
-
export declare class VideoArtifactManager {
|
|
28
|
-
/**
|
|
29
|
-
* Links video artifacts between original test and self-healing session
|
|
30
|
-
*/
|
|
31
|
-
static linkSelfHealingVideos(testInfo: TestInfo, originalFlowMetadata: FlowMetadata, selfHealingFlowMetadata: FlowMetadata): Promise<LinkedVideoArtifacts | null>;
|
|
32
|
-
/**
|
|
33
|
-
* Attempts to find the Playwright-generated video for the test
|
|
34
|
-
*/
|
|
35
|
-
private static findPlaywrightVideo;
|
|
36
|
-
/**
|
|
37
|
-
* Attempts to find the self-healing flow video
|
|
38
|
-
*/
|
|
39
|
-
private static findSelfHealingVideo;
|
|
40
|
-
/**
|
|
41
|
-
* Creates a comprehensive manifest linking videos and providing navigation aids
|
|
42
|
-
*/
|
|
43
|
-
private static createVideoLinkingManifest;
|
|
44
|
-
/**
|
|
45
|
-
* Generates an HTML manifest for video navigation
|
|
46
|
-
*/
|
|
47
|
-
private static generateVideoManifestHtml;
|
|
48
|
-
/**
|
|
49
|
-
* Attaches video metadata as a test artifact
|
|
50
|
-
*/
|
|
51
|
-
private static attachVideoMetadata;
|
|
52
|
-
/**
|
|
53
|
-
* Formats file size in human-readable format
|
|
54
|
-
*/
|
|
55
|
-
private static formatFileSize;
|
|
56
|
-
}
|
|
57
|
-
//# sourceMappingURL=VideoArtifactManager.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"VideoArtifactManager.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/VideoArtifactManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAI5C,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,eAAe,GAAG,cAAc,GAAG,SAAS,CAAC;CACpD;AAED,MAAM,WAAW,oBAAoB;IACnC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,gBAAgB,CAAC,EAAE,aAAa,CAAC;IACjC,eAAe,EAAE;QACf,cAAc,EAAE,MAAM,CAAC;QACvB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,mBAAmB,CAAC;QAClC,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED;;GAEG;AACH,qBAAa,oBAAoB;IAC/B;;OAEG;WACiB,qBAAqB,CACvC,QAAQ,EAAE,QAAQ,EAClB,oBAAoB,EAAE,YAAY,EAClC,uBAAuB,EAAE,YAAY,GACpC,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;IAuDvC;;OAEG;mBACkB,mBAAmB;IAuCxC;;OAEG;mBACkB,oBAAoB;IAuBzC;;OAEG;mBACkB,0BAA0B;IAsC/C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,yBAAyB;IA6IxC;;OAEG;mBACkB,mBAAmB;IAsBxC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;CAS9B"}
|