ftmocks-utils 1.5.2 → 1.5.4

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ftmocks-utils",
3
- "version": "1.5.2",
3
+ "version": "1.5.4",
4
4
  "description": "Util functions for FtMocks",
5
5
  "main": "src/index.js",
6
6
  "scripts": {
@@ -240,7 +240,7 @@ const runEvent = async ({
240
240
  break;
241
241
  case "keypress":
242
242
  await beforeEvent();
243
- await page.keyboard.press(await getLocator(page, event), event.key);
243
+ await page.keyboard.press(event.key);
244
244
  break;
245
245
  case "change":
246
246
  await beforeEvent();
@@ -6,14 +6,15 @@ const injectEventRecordingScript = async (
6
6
  page,
7
7
  url,
8
8
  ftmocksConifg,
9
- testName
9
+ testName,
10
+ continueRecordEvents = false,
10
11
  ) => {
11
12
  console.log("calling injectEventRecordingScript");
12
13
  try {
13
14
  const eventsFile = path.join(
14
15
  getMockDir(ftmocksConifg),
15
16
  `test_${nameToFolder(testName)}`,
16
- `_events.json`
17
+ `_events.json`,
17
18
  );
18
19
  if (!fs.existsSync(eventsFile)) {
19
20
  // Ensure the directory exists before writing the eventsFile
@@ -32,7 +33,7 @@ const injectEventRecordingScript = async (
32
33
  const screenshotsDir = path.join(
33
34
  getMockDir(ftmocksConifg),
34
35
  `test_${nameToFolder(testName)}`,
35
- "screenshots"
36
+ "screenshots",
36
37
  );
37
38
  if (!fs.existsSync(screenshotsDir)) {
38
39
  fs.mkdirSync(screenshotsDir, { recursive: true });
@@ -41,7 +42,7 @@ const injectEventRecordingScript = async (
41
42
  getMockDir(ftmocksConifg),
42
43
  `test_${nameToFolder(testName)}`,
43
44
  "screenshots",
44
- `screenshot_${imgOptions.name}.png`
45
+ `screenshot_${imgOptions.name}.png`,
45
46
  );
46
47
  fs.writeFileSync(screenshotFile, screenshot);
47
48
  return screenshotFile;
@@ -72,10 +73,23 @@ const injectEventRecordingScript = async (
72
73
  fs.writeFileSync(eventsFile, JSON.stringify(events, null, 2));
73
74
  });
74
75
 
76
+ let existingEvents = [];
77
+ // Read events from events file, if it exists
78
+ if (continueRecordEvents && fs.existsSync(eventsFile)) {
79
+ try {
80
+ const data = fs.readFileSync(eventsFile, "utf8");
81
+ existingEvents = JSON.parse(data);
82
+ } catch (err) {
83
+ console.error("Failed to read events file:", err);
84
+ existingEvents = [];
85
+ }
86
+ }
87
+
75
88
  fs.writeFileSync(
76
89
  eventsFile,
77
90
  JSON.stringify(
78
91
  [
92
+ ...existingEvents,
79
93
  {
80
94
  id: crypto.randomUUID(),
81
95
  type: "url",
@@ -85,8 +99,8 @@ const injectEventRecordingScript = async (
85
99
  },
86
100
  ],
87
101
  null,
88
- 2
89
- )
102
+ 2,
103
+ ),
90
104
  );
91
105
  await page.addInitScript(() => {
92
106
  console.log("calling addInitScript");
@@ -149,7 +163,7 @@ const injectEventRecordingScript = async (
149
163
  doc,
150
164
  null,
151
165
  XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
152
- null
166
+ null,
153
167
  );
154
168
  const elements = [];
155
169
  for (let i = 0; i < snapshot.snapshotLength; i++) {
@@ -224,7 +238,7 @@ const injectEventRecordingScript = async (
224
238
  document,
225
239
  null,
226
240
  XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
227
- null
241
+ null,
228
242
  );
229
243
  return elements.snapshotLength === 1;
230
244
  } catch (error) {
@@ -238,7 +252,7 @@ const injectEventRecordingScript = async (
238
252
  const getUniqueXpath = (xpath, mainElement) => {
239
253
  const prevElements = filterXpathElementsFromHtml(
240
254
  prevEventSnapshot,
241
- xpath
255
+ xpath,
242
256
  );
243
257
  if (prevElements.snapshotLength > 1 && mainElement) {
244
258
  return `(${xpath})[${
@@ -251,7 +265,7 @@ const injectEventRecordingScript = async (
251
265
  const getUniqueElementSelectorNth = (selector, mainElement) => {
252
266
  const prevElements = filterElementsFromHtml(
253
267
  prevEventSnapshot,
254
- selector
268
+ selector,
255
269
  );
256
270
  if (prevElements.length > 1) {
257
271
  return getElementsByRank(prevElements, mainElement)[0].index + 1;
@@ -264,11 +278,11 @@ const injectEventRecordingScript = async (
264
278
  if (selector.value.startsWith("/")) {
265
279
  const prevElements = filterXpathElementsFromHtml(
266
280
  prevEventSnapshot,
267
- selector.value
281
+ selector.value,
268
282
  );
269
283
  const nextElements = filterXpathElementsFromHtml(
270
284
  currentEventSnapshot,
271
- selector.value
285
+ selector.value,
272
286
  );
273
287
  return {
274
288
  selector: selector.value,
@@ -278,11 +292,11 @@ const injectEventRecordingScript = async (
278
292
  } else {
279
293
  const prevElements = filterElementsFromHtml(
280
294
  prevEventSnapshot,
281
- selector.value
295
+ selector.value,
282
296
  );
283
297
  const nextElements = filterElementsFromHtml(
284
298
  currentEventSnapshot,
285
- selector.value
299
+ selector.value,
286
300
  );
287
301
  return {
288
302
  selector: selector.value,
@@ -313,13 +327,13 @@ const injectEventRecordingScript = async (
313
327
  selectors.push({
314
328
  type: "locator",
315
329
  value: `${tagName}[data-testid='${element.getAttribute(
316
- "data-testid"
330
+ "data-testid",
317
331
  )}']`,
318
332
  nth: getUniqueElementSelectorNth(
319
333
  `${tagName}[data-testid='${element.getAttribute(
320
- "data-testid"
334
+ "data-testid",
321
335
  )}']`,
322
- element
336
+ element,
323
337
  ),
324
338
  });
325
339
  }
@@ -329,7 +343,7 @@ const injectEventRecordingScript = async (
329
343
  value: `${tagName}[data-id='${element.getAttribute("data-id")}']`,
330
344
  nth: getUniqueElementSelectorNth(
331
345
  `${tagName}[data-id='${element.getAttribute("data-id")}']`,
332
- element
346
+ element,
333
347
  ),
334
348
  });
335
349
  }
@@ -337,13 +351,13 @@ const injectEventRecordingScript = async (
337
351
  selectors.push({
338
352
  type: "locator",
339
353
  value: `${tagName}[data-action='${element.getAttribute(
340
- "data-action"
354
+ "data-action",
341
355
  )}']`,
342
356
  nth: getUniqueElementSelectorNth(
343
357
  `${tagName}[data-action='${element.getAttribute(
344
- "data-action"
358
+ "data-action",
345
359
  )}']`,
346
- element
360
+ element,
347
361
  ),
348
362
  });
349
363
  }
@@ -353,7 +367,7 @@ const injectEventRecordingScript = async (
353
367
  value: `${tagName}[data-cy='${element.getAttribute("data-cy")}']`,
354
368
  nth: getUniqueElementSelectorNth(
355
369
  `${tagName}[data-cy='${element.getAttribute("data-cy")}']`,
356
- element
370
+ element,
357
371
  ),
358
372
  });
359
373
  }
@@ -367,7 +381,7 @@ const injectEventRecordingScript = async (
367
381
  value: `${tagName}[name='${element.name}']`,
368
382
  nth: getUniqueElementSelectorNth(
369
383
  `${tagName}[name='${element.name}']`,
370
- element
384
+ element,
371
385
  ),
372
386
  });
373
387
  } else if (
@@ -380,7 +394,7 @@ const injectEventRecordingScript = async (
380
394
  value: `${tagName}[name='${element.name}'][value='${element.value}']`,
381
395
  nth: getUniqueElementSelectorNth(
382
396
  `${tagName}[name='${element.name}'][value='${element.value}']`,
383
- element
397
+ element,
384
398
  ),
385
399
  });
386
400
  }
@@ -390,7 +404,7 @@ const injectEventRecordingScript = async (
390
404
  value: `${tagName}[aria-label='${element.ariaLabel}']`,
391
405
  nth: getUniqueElementSelectorNth(
392
406
  `${tagName}[aria-label='${element.ariaLabel}']`,
393
- element
407
+ element,
394
408
  ),
395
409
  });
396
410
  }
@@ -400,7 +414,7 @@ const injectEventRecordingScript = async (
400
414
  value: `${tagName}[role='${element.role}'][name='${element.name}']`,
401
415
  nth: getUniqueElementSelectorNth(
402
416
  `${tagName}[role='${element.role}'][name='${element.name}']`,
403
- element
417
+ element,
404
418
  ),
405
419
  });
406
420
  }
@@ -410,7 +424,7 @@ const injectEventRecordingScript = async (
410
424
  value: `${tagName}[src='${element.getAttribute("src")}']`,
411
425
  nth: getUniqueElementSelectorNth(
412
426
  `${tagName}[src='${element.getAttribute("src")}']`,
413
- element
427
+ element,
414
428
  ),
415
429
  });
416
430
  }
@@ -420,7 +434,7 @@ const injectEventRecordingScript = async (
420
434
  value: `${tagName}[href='${element.getAttribute("href")}']`,
421
435
  nth: getUniqueElementSelectorNth(
422
436
  `${tagName}[href='${element.getAttribute("href")}']`,
423
- element
437
+ element,
424
438
  ),
425
439
  });
426
440
  }
@@ -433,7 +447,7 @@ const injectEventRecordingScript = async (
433
447
  type: "locator",
434
448
  value: getUniqueXpath(
435
449
  `//${tagName}[@role='${element.role}' and normalize-space(.) = '${escapedText}']`,
436
- element
450
+ element,
437
451
  ),
438
452
  });
439
453
  }
@@ -448,7 +462,7 @@ const injectEventRecordingScript = async (
448
462
  .replace(/'/g, "\\'")
449
463
  .replace(/\s+/g, " ")
450
464
  .trim()}']`,
451
- event.target
465
+ event.target,
452
466
  ),
453
467
  });
454
468
  }
@@ -604,7 +618,7 @@ const injectEventRecordingScript = async (
604
618
  target.getAttribute(`on${eventType}`) ||
605
619
  target.getAttribute(`${eventType}`) ||
606
620
  target.getAttribute(
607
- `${eventType.charAt(0).toUpperCase() + eventType.slice(1)}`
621
+ `${eventType.charAt(0).toUpperCase() + eventType.slice(1)}`,
608
622
  )
609
623
  ) {
610
624
  return target;
@@ -677,7 +691,7 @@ const injectEventRecordingScript = async (
677
691
  currentEventSnapshot = document.documentElement.innerHTML;
678
692
  const currentTarget = getParentElementWithEventOrId(
679
693
  event,
680
- "ondblclick"
694
+ "ondblclick",
681
695
  );
682
696
  const selectors = getBestSelectors(currentTarget, event);
683
697
  getXpathsIncluded(selectors, currentTarget, event);
@@ -699,7 +713,7 @@ const injectEventRecordingScript = async (
699
713
  currentEventSnapshot = document.documentElement.innerHTML;
700
714
  const currentTarget = getParentElementWithEventOrId(
701
715
  event,
702
- "oncontextmenu"
716
+ "oncontextmenu",
703
717
  );
704
718
  const selectors = getBestSelectors(currentTarget, event);
705
719
  getXpathsIncluded(selectors, currentTarget, event);