skopix 2.0.91 → 2.0.92
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/cli/commands/dashboard.js +33 -5
- package/package.json +1 -1
|
@@ -4334,25 +4334,37 @@ async function startStepTester(testerId, url, selector, mode, steps) {
|
|
|
4334
4334
|
if (mode === 'preview' && steps && steps.length > 0) {
|
|
4335
4335
|
// Register expose functions FIRST before addInitScript so they're available on DOMContentLoaded
|
|
4336
4336
|
await ctx.exposeFunction('__skopixPreviewRun', async ({ index }) => {
|
|
4337
|
+
const session = stepTesterSessions.get(testerId);
|
|
4338
|
+
if (!session) return;
|
|
4337
4339
|
const s = steps[index];
|
|
4338
4340
|
if (!s) return;
|
|
4339
4341
|
await page.evaluate(({ i, status }) => { if(window.__skopixUpdatePreview) window.__skopixUpdatePreview(i, null, status); }, { i: index, status: `Running step ${index+1}/${steps.length}...` }).catch(()=>{});
|
|
4340
4342
|
const result = await executeStepTesterAction(page, { selector: s.stableSelector||s.selector, action: s.action, value: s.value||'', assertType: s.assertType });
|
|
4341
4343
|
const msg = result.passed ? (index+1 >= steps.length ? `✓ All ${steps.length} steps passed!` : `✓ Step ${index+1} passed`) : `✗ Step ${index+1} failed`;
|
|
4342
|
-
|
|
4344
|
+
if (result.passed) session.currentStep = index + 1;
|
|
4345
|
+
if (!session.results) session.results = {};
|
|
4346
|
+
session.results[index] = { passed: result.passed, error: result.error||null };
|
|
4347
|
+
await page.evaluate(({ i, r, msg, currentStep }) => {
|
|
4343
4348
|
if(window.__skopixUpdatePreview) window.__skopixUpdatePreview(i, r, msg);
|
|
4344
|
-
|
|
4349
|
+
window.__skopixPreviewCurrentStep = currentStep;
|
|
4350
|
+
}, { i: index, r: { passed: result.passed, error: result.error||null }, msg, currentStep: session.currentStep || 0 }).catch(()=>{});
|
|
4345
4351
|
});
|
|
4346
4352
|
|
|
4347
4353
|
await ctx.exposeFunction('__skopixPreviewRunAll', async ({ fromIndex }) => {
|
|
4354
|
+
const session = stepTesterSessions.get(testerId);
|
|
4355
|
+
if (!session) return;
|
|
4348
4356
|
for (let i = fromIndex; i < steps.length; i++) {
|
|
4349
4357
|
const s = steps[i];
|
|
4350
4358
|
await page.evaluate(({ i, total }) => { if(window.__skopixUpdatePreview) window.__skopixUpdatePreview(i, null, `Running step ${i+1}/${total}...`); }, { i, total: steps.length }).catch(()=>{});
|
|
4351
4359
|
const result = await executeStepTesterAction(page, { selector: s.stableSelector||s.selector, action: s.action, value: s.value||'', assertType: s.assertType });
|
|
4360
|
+
if (result.passed) session.currentStep = i + 1;
|
|
4361
|
+
if (!session.results) session.results = {};
|
|
4362
|
+
session.results[i] = { passed: result.passed, error: result.error||null };
|
|
4352
4363
|
const msg = result.passed ? (i+1 >= steps.length ? `✓ All ${steps.length} steps passed!` : `Running...`) : `✗ Step ${i+1} failed — fix and retry`;
|
|
4353
|
-
await page.evaluate(({ i, r, msg }) => {
|
|
4364
|
+
await page.evaluate(({ i, r, msg, currentStep }) => {
|
|
4354
4365
|
if(window.__skopixUpdatePreview) window.__skopixUpdatePreview(i, r, msg);
|
|
4355
|
-
|
|
4366
|
+
window.__skopixPreviewCurrentStep = currentStep;
|
|
4367
|
+
}, { i, r: { passed: result.passed, error: result.error||null }, msg, currentStep: session.currentStep || 0 }).catch(()=>{});
|
|
4356
4368
|
if (!result.passed) break;
|
|
4357
4369
|
await new Promise(r => setTimeout(r, 400));
|
|
4358
4370
|
}
|
|
@@ -4363,6 +4375,11 @@ async function startStepTester(testerId, url, selector, mode, steps) {
|
|
|
4363
4375
|
stepTesterSessions.delete(testerId);
|
|
4364
4376
|
});
|
|
4365
4377
|
|
|
4378
|
+
await ctx.exposeFunction('__skopixGetState', async () => {
|
|
4379
|
+
const session = stepTesterSessions.get(testerId);
|
|
4380
|
+
return { currentStep: session?.currentStep || 0, results: session?.results || {} };
|
|
4381
|
+
});
|
|
4382
|
+
|
|
4366
4383
|
// THEN inject toolbar via addInitScript
|
|
4367
4384
|
// PREVIEW MODE — inject steps list toolbar
|
|
4368
4385
|
await ctx.addInitScript((stepsData) => {
|
|
@@ -4456,6 +4473,17 @@ async function startStepTester(testerId, url, selector, mode, steps) {
|
|
|
4456
4473
|
if (window.__skopixStopPreview) window.__skopixStopPreview({});
|
|
4457
4474
|
});
|
|
4458
4475
|
|
|
4476
|
+
// Restore state from server after navigation
|
|
4477
|
+
if (window.__skopixGetState) {
|
|
4478
|
+
window.__skopixGetState({}).then(state => {
|
|
4479
|
+
if (state && state.currentStep > 0) {
|
|
4480
|
+
window.__skopixPreviewCurrentStep = state.currentStep;
|
|
4481
|
+
window.__skopixPreviewResults = state.results || {};
|
|
4482
|
+
renderSteps(state.currentStep, state.results || {});
|
|
4483
|
+
}
|
|
4484
|
+
}).catch(() => {});
|
|
4485
|
+
}
|
|
4486
|
+
|
|
4459
4487
|
window.__skopixUpdatePreview = (index, result, status) => {
|
|
4460
4488
|
window.__skopixPreviewResults[index] = result;
|
|
4461
4489
|
if (result && result.passed) window.__skopixPreviewCurrentStep = index + 1;
|
|
@@ -4578,7 +4606,7 @@ async function startStepTester(testerId, url, selector, mode, steps) {
|
|
|
4578
4606
|
if (url) await page.goto(url, { waitUntil: 'domcontentloaded', timeout: 30000 }).catch(() => {});
|
|
4579
4607
|
// Ensure toolbar is injected on first page (DOMContentLoaded may have already fired)
|
|
4580
4608
|
await page.evaluate(() => { if (window.__skopixTesterSelector !== undefined && !document.getElementById('__skopix_tester') && !document.getElementById('__skopix_preview')) { document.dispatchEvent(new Event('DOMContentLoaded')); } }).catch(() => {});
|
|
4581
|
-
stepTesterSessions.set(testerId, { browser, ctx, page });
|
|
4609
|
+
stepTesterSessions.set(testerId, { browser, ctx, page, currentStep: 0, results: {} });
|
|
4582
4610
|
}
|
|
4583
4611
|
|
|
4584
4612
|
async function executeStepTesterAction(page, { selector, action, value }) {
|
package/package.json
CHANGED