ftmocks-utils 1.4.4 → 1.4.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 +95 -52
- package/src/index.js +2 -0
package/package.json
CHANGED
package/src/event-run-utils.js
CHANGED
|
@@ -37,51 +37,79 @@ const getLocator = async (page, event) => {
|
|
|
37
37
|
return event.target;
|
|
38
38
|
};
|
|
39
39
|
|
|
40
|
-
const
|
|
40
|
+
const getSelectorPosition = async (page, selector) => {
|
|
41
|
+
const element = await page.locator(selector).elementHandle();
|
|
42
|
+
const position = await element.boundingBox();
|
|
43
|
+
console.log("position", position);
|
|
44
|
+
return position;
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
const runEvent = async ({
|
|
48
|
+
page,
|
|
49
|
+
event,
|
|
50
|
+
delay = 0,
|
|
51
|
+
screenshots = false,
|
|
52
|
+
screenshotsDir = null,
|
|
53
|
+
}) => {
|
|
41
54
|
try {
|
|
42
55
|
console.log("➡ Running event", event);
|
|
56
|
+
const beforeEvent = async () => {
|
|
57
|
+
await page.waitForTimeout(delay);
|
|
58
|
+
if (screenshots) {
|
|
59
|
+
const locator = await getLocator(page, event);
|
|
60
|
+
const position = await getSelectorPosition(page, locator);
|
|
61
|
+
event.screenshotInfo = {
|
|
62
|
+
name: `${event.id}.png`,
|
|
63
|
+
position,
|
|
64
|
+
};
|
|
65
|
+
await page.screenshot({
|
|
66
|
+
path: path.join(screenshotsDir, `${event.id}.png`),
|
|
67
|
+
fullPage: false,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
};
|
|
43
71
|
switch (event.type) {
|
|
44
72
|
case "url":
|
|
45
73
|
await page.goto(event.value);
|
|
46
74
|
break;
|
|
47
75
|
case "click":
|
|
48
|
-
await
|
|
76
|
+
await beforeEvent();
|
|
49
77
|
await page.click(await getLocator(page, event));
|
|
50
78
|
break;
|
|
51
79
|
case "input":
|
|
52
|
-
await
|
|
80
|
+
await beforeEvent();
|
|
53
81
|
await page.fill(await getLocator(page, event), event.value);
|
|
54
82
|
break;
|
|
55
83
|
case "keypress":
|
|
56
|
-
await
|
|
84
|
+
await beforeEvent();
|
|
57
85
|
await page.keyboard.press(await getLocator(page, event), event.key);
|
|
58
86
|
break;
|
|
59
87
|
case "change":
|
|
60
|
-
await
|
|
88
|
+
await beforeEvent();
|
|
61
89
|
await page.select(await getLocator(page, event), event.value);
|
|
62
90
|
break;
|
|
63
91
|
case "url":
|
|
64
|
-
await
|
|
92
|
+
await beforeEvent();
|
|
65
93
|
await page.goto(await getLocator(page, event), event.value);
|
|
66
94
|
break;
|
|
67
95
|
case "dblclick":
|
|
68
|
-
await
|
|
96
|
+
await beforeEvent();
|
|
69
97
|
await page.dblclick(await getLocator(page, event));
|
|
70
98
|
break;
|
|
71
99
|
case "contextmenu":
|
|
72
|
-
await
|
|
100
|
+
await beforeEvent();
|
|
73
101
|
await page.contextmenu(await getLocator(page, event));
|
|
74
102
|
break;
|
|
75
103
|
case "hover":
|
|
76
|
-
await
|
|
104
|
+
await beforeEvent();
|
|
77
105
|
await page.hover(await getLocator(page, event));
|
|
78
106
|
break;
|
|
79
107
|
case "keydown":
|
|
80
|
-
await
|
|
108
|
+
await beforeEvent();
|
|
81
109
|
await page.keyboard.down(await getLocator(page, event), event.key);
|
|
82
110
|
break;
|
|
83
111
|
case "keyup":
|
|
84
|
-
await
|
|
112
|
+
await beforeEvent();
|
|
85
113
|
await page.keyboard.up(await getLocator(page, event), event.key);
|
|
86
114
|
break;
|
|
87
115
|
default:
|
|
@@ -129,9 +157,15 @@ const isValidEvent = (event) => {
|
|
|
129
157
|
return false;
|
|
130
158
|
};
|
|
131
159
|
|
|
132
|
-
const runEvents = async (
|
|
160
|
+
const runEvents = async ({
|
|
161
|
+
page,
|
|
162
|
+
events,
|
|
163
|
+
delay = 1000,
|
|
164
|
+
screenshots = false,
|
|
165
|
+
screenshotsDir = null,
|
|
166
|
+
}) => {
|
|
133
167
|
for (const event of events) {
|
|
134
|
-
await runEvent(page, event, delay);
|
|
168
|
+
await runEvent({ page, event, delay, screenshots, screenshotsDir });
|
|
135
169
|
}
|
|
136
170
|
};
|
|
137
171
|
|
|
@@ -142,14 +176,12 @@ const runEventsForTest = async (page, ftmocksConifg, testName) => {
|
|
|
142
176
|
`_events.json`
|
|
143
177
|
);
|
|
144
178
|
const events = JSON.parse(fs.readFileSync(eventsFile, "utf8"));
|
|
145
|
-
await runEvents(
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
console.log("position", position);
|
|
152
|
-
return position;
|
|
179
|
+
await runEvents({
|
|
180
|
+
page,
|
|
181
|
+
events,
|
|
182
|
+
delay: ftmocksConifg.delay || 1000,
|
|
183
|
+
screenshots: false,
|
|
184
|
+
});
|
|
153
185
|
};
|
|
154
186
|
|
|
155
187
|
const runEventsInPresentationMode = async (page, ftmocksConifg, testName) => {
|
|
@@ -168,10 +200,10 @@ const runEventsInPresentationMode = async (page, ftmocksConifg, testName) => {
|
|
|
168
200
|
console.log("➡ No more events to run!");
|
|
169
201
|
return false;
|
|
170
202
|
}
|
|
171
|
-
let result = await runEvent(page, events[currentEventIndex]);
|
|
203
|
+
let result = await runEvent({ page, event: events[currentEventIndex] });
|
|
172
204
|
while (result === "Unsupported event type") {
|
|
173
205
|
currentEventIndex = currentEventIndex + 1;
|
|
174
|
-
result = await runEvent(page, events[currentEventIndex]);
|
|
206
|
+
result = await runEvent({ page, event: events[currentEventIndex] });
|
|
175
207
|
}
|
|
176
208
|
currentEventIndex = currentEventIndex + 1;
|
|
177
209
|
return true;
|
|
@@ -206,7 +238,7 @@ const runEventsInPresentationMode = async (page, ftmocksConifg, testName) => {
|
|
|
206
238
|
});
|
|
207
239
|
});
|
|
208
240
|
|
|
209
|
-
await runEvent(page, events[0]);
|
|
241
|
+
await runEvent({ page, event: events[0] });
|
|
210
242
|
};
|
|
211
243
|
|
|
212
244
|
const runEventsInTrainingMode = async (page, ftmocksConifg, testName) => {
|
|
@@ -375,6 +407,15 @@ const runEventsInTrainingMode = async (page, ftmocksConifg, testName) => {
|
|
|
375
407
|
}
|
|
376
408
|
};
|
|
377
409
|
|
|
410
|
+
const showNextEvent = async () => {
|
|
411
|
+
currentEventInfo = await window.getNextEvent();
|
|
412
|
+
if (currentEventInfo) {
|
|
413
|
+
showPopover(currentEventInfo);
|
|
414
|
+
} else {
|
|
415
|
+
hidePopover();
|
|
416
|
+
}
|
|
417
|
+
};
|
|
418
|
+
|
|
378
419
|
const matchElement = (event, currentEventInfo) => {
|
|
379
420
|
const inBoudingBox =
|
|
380
421
|
currentEventInfo?.position?.x <= event.clientX &&
|
|
@@ -400,13 +441,7 @@ const runEventsInTrainingMode = async (page, ftmocksConifg, testName) => {
|
|
|
400
441
|
matchElement(event, currentEventInfo)
|
|
401
442
|
) {
|
|
402
443
|
console.log("➡ Click event triggered!", event);
|
|
403
|
-
|
|
404
|
-
console.log("➡ Next event", currentEventInfo);
|
|
405
|
-
if (currentEventInfo) {
|
|
406
|
-
showPopover(currentEventInfo);
|
|
407
|
-
} else {
|
|
408
|
-
hidePopover();
|
|
409
|
-
}
|
|
444
|
+
showNextEvent();
|
|
410
445
|
}
|
|
411
446
|
});
|
|
412
447
|
window.addEventListener("dblclick", async (event) => {
|
|
@@ -414,12 +449,7 @@ const runEventsInTrainingMode = async (page, ftmocksConifg, testName) => {
|
|
|
414
449
|
currentEventInfo?.event?.type === "dblclick" &&
|
|
415
450
|
matchElement(event, currentEventInfo)
|
|
416
451
|
) {
|
|
417
|
-
|
|
418
|
-
if (currentEventInfo) {
|
|
419
|
-
showPopover(currentEventInfo);
|
|
420
|
-
} else {
|
|
421
|
-
hidePopover();
|
|
422
|
-
}
|
|
452
|
+
showNextEvent();
|
|
423
453
|
}
|
|
424
454
|
});
|
|
425
455
|
window.addEventListener("contextmenu", async (event) => {
|
|
@@ -427,12 +457,7 @@ const runEventsInTrainingMode = async (page, ftmocksConifg, testName) => {
|
|
|
427
457
|
currentEventInfo?.event?.type === "contextmenu" &&
|
|
428
458
|
matchElement(event, currentEventInfo)
|
|
429
459
|
) {
|
|
430
|
-
|
|
431
|
-
if (currentEventInfo) {
|
|
432
|
-
showPopover(currentEventInfo);
|
|
433
|
-
} else {
|
|
434
|
-
hidePopover();
|
|
435
|
-
}
|
|
460
|
+
showNextEvent();
|
|
436
461
|
}
|
|
437
462
|
});
|
|
438
463
|
window.addEventListener("input", async (event) => {
|
|
@@ -440,10 +465,7 @@ const runEventsInTrainingMode = async (page, ftmocksConifg, testName) => {
|
|
|
440
465
|
currentEventInfo?.event?.type === "input" &&
|
|
441
466
|
matchElement(event, currentEventInfo)
|
|
442
467
|
) {
|
|
443
|
-
|
|
444
|
-
if (currentEventInfo) {
|
|
445
|
-
showPopover(currentEventInfo);
|
|
446
|
-
}
|
|
468
|
+
showNextEvent();
|
|
447
469
|
}
|
|
448
470
|
});
|
|
449
471
|
window.addEventListener("keypress", async (event) => {
|
|
@@ -451,15 +473,35 @@ const runEventsInTrainingMode = async (page, ftmocksConifg, testName) => {
|
|
|
451
473
|
currentEventInfo?.event?.type === "keypress" &&
|
|
452
474
|
matchElement(event, currentEventInfo)
|
|
453
475
|
) {
|
|
454
|
-
|
|
455
|
-
if (currentEventInfo) {
|
|
456
|
-
showPopover(currentEventInfo);
|
|
457
|
-
}
|
|
476
|
+
showNextEvent();
|
|
458
477
|
}
|
|
459
478
|
});
|
|
460
479
|
});
|
|
461
480
|
|
|
462
|
-
await runEvent(page, events[0]);
|
|
481
|
+
await runEvent({ page, event: events[0] });
|
|
482
|
+
};
|
|
483
|
+
|
|
484
|
+
const runEventsForScreenshots = async (page, ftmocksConifg, testName) => {
|
|
485
|
+
const eventsFile = path.join(
|
|
486
|
+
getMockDir(ftmocksConifg),
|
|
487
|
+
`test_${nameToFolder(testName)}`,
|
|
488
|
+
`_events.json`
|
|
489
|
+
);
|
|
490
|
+
const events = JSON.parse(fs.readFileSync(eventsFile, "utf8"));
|
|
491
|
+
await runEvents({
|
|
492
|
+
page,
|
|
493
|
+
events,
|
|
494
|
+
delay: ftmocksConifg.delay || 1000,
|
|
495
|
+
screenshots: true,
|
|
496
|
+
screenshotsDir: path.join(
|
|
497
|
+
getMockDir(ftmocksConifg),
|
|
498
|
+
`test_${nameToFolder(testName)}`,
|
|
499
|
+
`screenshots`
|
|
500
|
+
),
|
|
501
|
+
});
|
|
502
|
+
fs.writeFileSync(eventsFile, JSON.stringify(events, null, 2));
|
|
503
|
+
await page.waitForTimeout(1000);
|
|
504
|
+
await page.close();
|
|
463
505
|
};
|
|
464
506
|
|
|
465
507
|
module.exports = {
|
|
@@ -467,5 +509,6 @@ module.exports = {
|
|
|
467
509
|
runEventsForTest,
|
|
468
510
|
runEventsInPresentationMode,
|
|
469
511
|
runEventsInTrainingMode,
|
|
512
|
+
runEventsForScreenshots,
|
|
470
513
|
runEvent,
|
|
471
514
|
};
|
package/src/index.js
CHANGED
|
@@ -27,6 +27,7 @@ const {
|
|
|
27
27
|
runEvent,
|
|
28
28
|
runEventsInPresentationMode,
|
|
29
29
|
runEventsInTrainingMode,
|
|
30
|
+
runEventsForScreenshots,
|
|
30
31
|
} = require("./event-run-utils");
|
|
31
32
|
|
|
32
33
|
// Export functions as a module
|
|
@@ -54,4 +55,5 @@ module.exports = {
|
|
|
54
55
|
runEvent,
|
|
55
56
|
runEventsInPresentationMode,
|
|
56
57
|
runEventsInTrainingMode,
|
|
58
|
+
runEventsForScreenshots,
|
|
57
59
|
};
|