ftmocks-utils 1.5.4 → 1.5.5
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/package.json +1 -1
- package/src/event-run-utils.js +59 -19
package/package.json
CHANGED
package/src/event-run-utils.js
CHANGED
|
@@ -20,7 +20,7 @@ const createDiffImage = async (img1, img2, diffPath) => {
|
|
|
20
20
|
threshold: 0.1, // sensitivity
|
|
21
21
|
diffColor: [255, 0, 0], // highlight color (red)
|
|
22
22
|
diffMask: false,
|
|
23
|
-
}
|
|
23
|
+
},
|
|
24
24
|
);
|
|
25
25
|
|
|
26
26
|
fs.writeFileSync(diffPath, PNG.sync.write(diff));
|
|
@@ -58,7 +58,7 @@ const matchAndReplaceScreenshot = async (page, event, screenshotsDir) => {
|
|
|
58
58
|
await createDiffImage(
|
|
59
59
|
img1,
|
|
60
60
|
img2,
|
|
61
|
-
path.join(screenshotsDir, `diff_${event.id}.png`)
|
|
61
|
+
path.join(screenshotsDir, `diff_${event.id}.png`),
|
|
62
62
|
);
|
|
63
63
|
return {
|
|
64
64
|
replaced: true,
|
|
@@ -170,6 +170,8 @@ const runEvent = async ({
|
|
|
170
170
|
screenshots = false,
|
|
171
171
|
screenshotsDir = null,
|
|
172
172
|
healSelectors = false,
|
|
173
|
+
eventsFile = null,
|
|
174
|
+
allEvents = null,
|
|
173
175
|
}) => {
|
|
174
176
|
try {
|
|
175
177
|
const beforeEvent = async () => {
|
|
@@ -178,7 +180,7 @@ const runEvent = async ({
|
|
|
178
180
|
const res = await matchAndReplaceScreenshot(
|
|
179
181
|
page,
|
|
180
182
|
event,
|
|
181
|
-
screenshotsDir
|
|
183
|
+
screenshotsDir,
|
|
182
184
|
);
|
|
183
185
|
if (res.replaced) {
|
|
184
186
|
const locator = await getLocator(page, event);
|
|
@@ -200,7 +202,7 @@ const runEvent = async ({
|
|
|
200
202
|
page,
|
|
201
203
|
event,
|
|
202
204
|
event.target,
|
|
203
|
-
position
|
|
205
|
+
position,
|
|
204
206
|
);
|
|
205
207
|
event.target = healedTarget.value;
|
|
206
208
|
const selectors = [];
|
|
@@ -210,7 +212,7 @@ const runEvent = async ({
|
|
|
210
212
|
page,
|
|
211
213
|
event,
|
|
212
214
|
event.selectors[i].value,
|
|
213
|
-
position
|
|
215
|
+
position,
|
|
214
216
|
);
|
|
215
217
|
event.selectors[i].value = healedSelector.value;
|
|
216
218
|
if (healedSelector.count !== 1) {
|
|
@@ -273,6 +275,10 @@ const runEvent = async ({
|
|
|
273
275
|
default:
|
|
274
276
|
return "Unsupported event type";
|
|
275
277
|
}
|
|
278
|
+
if (eventsFile && allEvents) {
|
|
279
|
+
allEvents.find((e) => e.id === event.id).executed = true;
|
|
280
|
+
fs.writeFileSync(eventsFile, JSON.stringify(allEvents, null, 2));
|
|
281
|
+
}
|
|
276
282
|
} catch (error) {
|
|
277
283
|
console.error("Error running event", {
|
|
278
284
|
error: error.message,
|
|
@@ -321,6 +327,8 @@ const runEvents = async ({
|
|
|
321
327
|
screenshots = false,
|
|
322
328
|
screenshotsDir = null,
|
|
323
329
|
healSelectors = false,
|
|
330
|
+
eventsFile = null,
|
|
331
|
+
allEvents = null,
|
|
324
332
|
}) => {
|
|
325
333
|
for (const event of events) {
|
|
326
334
|
await runEvent({
|
|
@@ -330,6 +338,8 @@ const runEvents = async ({
|
|
|
330
338
|
screenshots,
|
|
331
339
|
screenshotsDir,
|
|
332
340
|
healSelectors,
|
|
341
|
+
eventsFile,
|
|
342
|
+
allEvents,
|
|
333
343
|
});
|
|
334
344
|
}
|
|
335
345
|
};
|
|
@@ -338,14 +348,19 @@ const runEventsForTest = async (page, ftmocksConifg, testName) => {
|
|
|
338
348
|
const eventsFile = path.join(
|
|
339
349
|
getMockDir(ftmocksConifg),
|
|
340
350
|
`test_${nameToFolder(testName)}`,
|
|
341
|
-
`_events.json
|
|
351
|
+
`_events.json`,
|
|
342
352
|
);
|
|
343
353
|
const events = JSON.parse(fs.readFileSync(eventsFile, "utf8"));
|
|
354
|
+
events.forEach((event) => {
|
|
355
|
+
event.executed = false;
|
|
356
|
+
});
|
|
344
357
|
await runEvents({
|
|
345
358
|
page,
|
|
346
359
|
events,
|
|
347
360
|
delay: ftmocksConifg.delay || 1000,
|
|
348
361
|
screenshots: false,
|
|
362
|
+
eventsFile,
|
|
363
|
+
allEvents: events,
|
|
349
364
|
});
|
|
350
365
|
};
|
|
351
366
|
|
|
@@ -354,19 +369,32 @@ const runEventsInPresentationMode = async (page, ftmocksConifg, testName) => {
|
|
|
354
369
|
const eventsFile = path.join(
|
|
355
370
|
getMockDir(ftmocksConifg),
|
|
356
371
|
`test_${nameToFolder(testName)}`,
|
|
357
|
-
`_events.json
|
|
372
|
+
`_events.json`,
|
|
358
373
|
);
|
|
359
374
|
const events = JSON.parse(fs.readFileSync(eventsFile, "utf8"));
|
|
375
|
+
events.forEach((event) => {
|
|
376
|
+
event.executed = false;
|
|
377
|
+
});
|
|
360
378
|
|
|
361
379
|
// Expose Node function
|
|
362
380
|
await page.exposeFunction("nextEvent", async () => {
|
|
363
381
|
if (currentEventIndex === events.length) {
|
|
364
382
|
return false;
|
|
365
383
|
}
|
|
366
|
-
let result = await runEvent({
|
|
384
|
+
let result = await runEvent({
|
|
385
|
+
page,
|
|
386
|
+
event: events[currentEventIndex],
|
|
387
|
+
eventsFile,
|
|
388
|
+
allEvents: events,
|
|
389
|
+
});
|
|
367
390
|
while (result === "Unsupported event type") {
|
|
368
391
|
currentEventIndex = currentEventIndex + 1;
|
|
369
|
-
result = await runEvent({
|
|
392
|
+
result = await runEvent({
|
|
393
|
+
page,
|
|
394
|
+
event: events[currentEventIndex],
|
|
395
|
+
eventsFile,
|
|
396
|
+
allEvents: events,
|
|
397
|
+
});
|
|
370
398
|
}
|
|
371
399
|
currentEventIndex = currentEventIndex + 1;
|
|
372
400
|
return true;
|
|
@@ -401,7 +429,7 @@ const runEventsInPresentationMode = async (page, ftmocksConifg, testName) => {
|
|
|
401
429
|
});
|
|
402
430
|
});
|
|
403
431
|
|
|
404
|
-
await runEvent({ page, event: events[0] });
|
|
432
|
+
await runEvent({ page, event: events[0], eventsFile, allEvents: events });
|
|
405
433
|
};
|
|
406
434
|
|
|
407
435
|
const runEventsInTrainingMode = async (page, ftmocksConifg, testName) => {
|
|
@@ -409,15 +437,17 @@ const runEventsInTrainingMode = async (page, ftmocksConifg, testName) => {
|
|
|
409
437
|
const eventsFile = path.join(
|
|
410
438
|
getMockDir(ftmocksConifg),
|
|
411
439
|
`test_${nameToFolder(testName)}`,
|
|
412
|
-
`_events.json
|
|
440
|
+
`_events.json`,
|
|
413
441
|
);
|
|
414
442
|
const events = JSON.parse(fs.readFileSync(eventsFile, "utf8"));
|
|
415
|
-
|
|
443
|
+
events.forEach((event) => {
|
|
444
|
+
event.executed = false;
|
|
445
|
+
});
|
|
416
446
|
// Expose Node function
|
|
417
447
|
await page.exposeFunction("getNextEvent", async () => {
|
|
418
448
|
let result = false;
|
|
419
449
|
let nonExecutedEvents = events.filter(
|
|
420
|
-
(event) => !executedEvents.includes(event?.id)
|
|
450
|
+
(event) => !executedEvents.includes(event?.id),
|
|
421
451
|
);
|
|
422
452
|
let currentEventIndex = -1;
|
|
423
453
|
while (!result) {
|
|
@@ -431,11 +461,11 @@ const runEventsInTrainingMode = async (page, ftmocksConifg, testName) => {
|
|
|
431
461
|
if (nonExecutedEvents[currentEventIndex]) {
|
|
432
462
|
console.log(
|
|
433
463
|
"➡ Getting locator for event",
|
|
434
|
-
nonExecutedEvents[currentEventIndex]
|
|
464
|
+
nonExecutedEvents[currentEventIndex],
|
|
435
465
|
);
|
|
436
466
|
const selector = await getLocator(
|
|
437
467
|
page,
|
|
438
|
-
nonExecutedEvents[currentEventIndex]
|
|
468
|
+
nonExecutedEvents[currentEventIndex],
|
|
439
469
|
);
|
|
440
470
|
const position = await getSelectorPosition(page, selector);
|
|
441
471
|
const element = await page.locator(selector).elementHandle();
|
|
@@ -641,16 +671,19 @@ const runEventsInTrainingMode = async (page, ftmocksConifg, testName) => {
|
|
|
641
671
|
});
|
|
642
672
|
});
|
|
643
673
|
|
|
644
|
-
await runEvent({ page, event: events[0] });
|
|
674
|
+
await runEvent({ page, event: events[0], eventsFile, allEvents: events });
|
|
645
675
|
};
|
|
646
676
|
|
|
647
677
|
const runEventsForScreenshots = async (page, ftmocksConifg, testName) => {
|
|
648
678
|
const eventsFile = path.join(
|
|
649
679
|
getMockDir(ftmocksConifg),
|
|
650
680
|
`test_${nameToFolder(testName)}`,
|
|
651
|
-
`_events.json
|
|
681
|
+
`_events.json`,
|
|
652
682
|
);
|
|
653
683
|
const events = JSON.parse(fs.readFileSync(eventsFile, "utf8"));
|
|
684
|
+
events.forEach((event) => {
|
|
685
|
+
event.executed = false;
|
|
686
|
+
});
|
|
654
687
|
await runEvents({
|
|
655
688
|
page,
|
|
656
689
|
events,
|
|
@@ -659,8 +692,10 @@ const runEventsForScreenshots = async (page, ftmocksConifg, testName) => {
|
|
|
659
692
|
screenshotsDir: path.join(
|
|
660
693
|
getMockDir(ftmocksConifg),
|
|
661
694
|
`test_${nameToFolder(testName)}`,
|
|
662
|
-
`screenshots
|
|
695
|
+
`screenshots`,
|
|
663
696
|
),
|
|
697
|
+
eventsFile,
|
|
698
|
+
allEvents: events,
|
|
664
699
|
});
|
|
665
700
|
fs.writeFileSync(eventsFile, JSON.stringify(events, null, 2));
|
|
666
701
|
await page.waitForTimeout(1000);
|
|
@@ -671,14 +706,19 @@ const runEventsForHealingSelectors = async (page, ftmocksConifg, testName) => {
|
|
|
671
706
|
const eventsFile = path.join(
|
|
672
707
|
getMockDir(ftmocksConifg),
|
|
673
708
|
`test_${nameToFolder(testName)}`,
|
|
674
|
-
`_events.json
|
|
709
|
+
`_events.json`,
|
|
675
710
|
);
|
|
676
711
|
const events = JSON.parse(fs.readFileSync(eventsFile, "utf8"));
|
|
712
|
+
events.forEach((event) => {
|
|
713
|
+
event.executed = false;
|
|
714
|
+
});
|
|
677
715
|
await runEvents({
|
|
678
716
|
page,
|
|
679
717
|
events,
|
|
680
718
|
delay: ftmocksConifg.delay || 1000,
|
|
681
719
|
healSelectors: true,
|
|
720
|
+
eventsFile,
|
|
721
|
+
allEvents: events,
|
|
682
722
|
});
|
|
683
723
|
fs.writeFileSync(eventsFile, JSON.stringify(events, null, 2));
|
|
684
724
|
await page.waitForTimeout(1000);
|