From e6f6a73d8f733bdbe25a6528e8b98288f5481ad4 Mon Sep 17 00:00:00 2001 From: Denys Kuchma Date: Fri, 6 Mar 2026 18:55:05 +0200 Subject: [PATCH 1/2] add fix --- lib/plugin/aiTrace.js | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/lib/plugin/aiTrace.js b/lib/plugin/aiTrace.js index e0b114a34..6e46451fb 100644 --- a/lib/plugin/aiTrace.js +++ b/lib/plugin/aiTrace.js @@ -140,13 +140,11 @@ export default function (config) { output.debug(`aiTrace: Skipping failed step "${step.toString()}" - already handled by step.failed event`) return } - recorder.add(`save artifacts for step ${step.toString()}`, async () => { - try { - await persistStep(step) - } catch (err) { - output.debug(`aiTrace: Error saving step: ${err.message}`) - } - }, true) + try { + await persistStep(step) + } catch (err) { + output.debug(`aiTrace: Error saving step: ${err.message}`) + } }) event.dispatcher.on(event.step.failed, async step => { From 78cddca8dbe222030fced31527f8aed32391a728 Mon Sep 17 00:00:00 2001 From: Denys Kuchma Date: Fri, 6 Mar 2026 19:51:10 +0200 Subject: [PATCH 2/2] fix --- lib/plugin/aiTrace.js | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/lib/plugin/aiTrace.js b/lib/plugin/aiTrace.js index 6e46451fb..8129ee9c9 100644 --- a/lib/plugin/aiTrace.js +++ b/lib/plugin/aiTrace.js @@ -127,7 +127,7 @@ export default function (config) { firstFailedStepSaved = false }) - event.dispatcher.on(event.step.after, async step => { + event.dispatcher.on(event.step.after, step => { if (!currentTest) return if (step.status === 'failed') { testFailed = true @@ -140,11 +140,10 @@ export default function (config) { output.debug(`aiTrace: Skipping failed step "${step.toString()}" - already handled by step.failed event`) return } - try { - await persistStep(step) - } catch (err) { + const stepPersistPromise = persistStep(step).catch(err => { output.debug(`aiTrace: Error saving step: ${err.message}`) - } + }) + recorder.add(`wait aiTrace step persistence: ${step.toString()}`, () => stepPersistPromise, true) }) event.dispatcher.on(event.step.failed, async step => { @@ -282,7 +281,22 @@ export default function (config) { output.debug(`aiTrace: Browser unavailable, partial artifact capture: ${err.message}`) } - if (!step.artifacts?.screenshot) { + if (step.artifacts?.screenshot) { + const screenshotPath = path.isAbsolute(step.artifacts.screenshot) + ? step.artifacts.screenshot + : path.resolve(dir, step.artifacts.screenshot) + const screenshotFile = path.basename(screenshotPath) + stepData.artifacts.screenshot = screenshotFile + step.artifacts.screenshot = screenshotPath + + if (!fs.existsSync(screenshotPath)) { + try { + await helper.saveScreenshot(screenshotPath, config.fullPageScreenshots) + } catch (err) { + output.debug(`aiTrace: Could not save screenshot: ${err.message}`) + } + } + } else { try { const screenshotFile = `${stepPrefix}_screenshot.png` const screenshotPath = path.join(dir, screenshotFile)