skopix 2.0.43 → 2.0.45
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 +20 -4
- package/package.json +1 -1
- package/web/app/index.html +2 -1
|
@@ -4149,18 +4149,32 @@ async function startStepTester(testerId, url, selector, mode, steps) {
|
|
|
4149
4149
|
|
|
4150
4150
|
await ctx.exposeFunction('__skopixTesterRun', async ({ sel, action, value }) => {
|
|
4151
4151
|
const result = await executeStepTesterAction(page, { selector: sel, action, value });
|
|
4152
|
-
|
|
4152
|
+
// Update toolbar via exposeFunction callback — more reliable than evaluate
|
|
4153
|
+
await page.evaluate((passed, errMsg) => {
|
|
4153
4154
|
const el = document.getElementById('__skopix_result');
|
|
4154
|
-
if (el)
|
|
4155
|
+
if (el) {
|
|
4156
|
+
el.textContent = passed ? '✓' : '✗';
|
|
4157
|
+
el.style.color = passed ? '#34d399' : '#ef4444';
|
|
4158
|
+
}
|
|
4159
|
+
}, result.passed, result.error || '').catch(async () => {
|
|
4160
|
+
// If evaluate fails (e.g. page navigated), wait and retry once
|
|
4161
|
+
await new Promise(r => setTimeout(r, 500));
|
|
4162
|
+
await page.evaluate((passed) => {
|
|
4163
|
+
const el = document.getElementById('__skopix_result');
|
|
4164
|
+
if (el) { el.textContent = passed ? '✓' : '✗'; el.style.color = passed ? '#34d399' : '#ef4444'; }
|
|
4165
|
+
}, result.passed).catch(() => {});
|
|
4166
|
+
});
|
|
4167
|
+
// Highlight element
|
|
4168
|
+
await page.evaluate((passed, sel) => {
|
|
4155
4169
|
try {
|
|
4156
4170
|
const target = document.querySelector(sel);
|
|
4157
4171
|
if (target) {
|
|
4158
4172
|
const orig = target.style.outline;
|
|
4159
|
-
target.style.outline =
|
|
4173
|
+
target.style.outline = passed ? '3px solid #34d399' : '3px solid #ef4444';
|
|
4160
4174
|
setTimeout(() => { target.style.outline = orig; }, 1500);
|
|
4161
4175
|
}
|
|
4162
4176
|
} catch {}
|
|
4163
|
-
}, result, sel);
|
|
4177
|
+
}, result.passed, sel).catch(() => {});
|
|
4164
4178
|
});
|
|
4165
4179
|
|
|
4166
4180
|
await ctx.exposeFunction('__skopixTesterStop', async () => {
|
|
@@ -4170,6 +4184,8 @@ async function startStepTester(testerId, url, selector, mode, steps) {
|
|
|
4170
4184
|
}
|
|
4171
4185
|
|
|
4172
4186
|
if (url) await page.goto(url, { waitUntil: 'domcontentloaded', timeout: 30000 }).catch(() => {});
|
|
4187
|
+
// Ensure toolbar is injected on first page (DOMContentLoaded may have already fired)
|
|
4188
|
+
await page.evaluate(() => { if (window.__skopixTesterSelector !== undefined && !document.getElementById('__skopix_tester') && !document.getElementById('__skopix_preview')) { document.dispatchEvent(new Event('DOMContentLoaded')); } }).catch(() => {});
|
|
4173
4189
|
stepTesterSessions.set(testerId, { browser, ctx, page });
|
|
4174
4190
|
}
|
|
4175
4191
|
|
package/package.json
CHANGED
package/web/app/index.html
CHANGED
|
@@ -5604,7 +5604,7 @@ function renderPendingSteps(steps) {
|
|
|
5604
5604
|
return;
|
|
5605
5605
|
}
|
|
5606
5606
|
|
|
5607
|
-
section.style.display = '';
|
|
5607
|
+
section.style.display = 'block';
|
|
5608
5608
|
updatePendingBadge(steps.length);
|
|
5609
5609
|
if (countLabel) countLabel.textContent = `${steps.length} element${steps.length > 1 ? 's' : ''} waiting`;
|
|
5610
5610
|
|
|
@@ -5631,6 +5631,7 @@ function renderPendingSteps(steps) {
|
|
|
5631
5631
|
}
|
|
5632
5632
|
|
|
5633
5633
|
async function loadLibraryView() {
|
|
5634
|
+
await new Promise(r => setTimeout(r, 50)); // ensure view is visible
|
|
5634
5635
|
const [steps, pending] = await Promise.all([fetchLibrarySteps(), fetchPendingSteps()]);
|
|
5635
5636
|
populateLibraryTagFilter();
|
|
5636
5637
|
renderPendingSteps(pending);
|