@bigbinary/neeto-playwright-commons 1.13.15 → 1.14.0

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/index.cjs.js CHANGED
@@ -12127,7 +12127,7 @@ class MailerUtils {
12127
12127
  const { ids } = await this.queryEmail(messageSearchCriteria, listMessagesFilterCriteria);
12128
12128
  return this.getEmails(ids);
12129
12129
  };
12130
- this.findMessage = async (messageSearchCriteria = {}, { timeout = 10000, receivedAfter = dateTimeOneHourAgo(), } = {}, shouldThrowErrorOnTimeout = true) => {
12130
+ this.findMessage = async (messageSearchCriteria = {}, { timeout = 10000, receivedAfter = dateTimeOneHourAgo(), expectedEmailCount = 1, } = {}, shouldThrowErrorOnTimeout = true) => {
12131
12131
  const ids = (await this.neetoPlaywrightUtilities.executeRecursively({
12132
12132
  callback: async () => {
12133
12133
  const { ids } = await this.queryEmail(messageSearchCriteria, {
@@ -12139,7 +12139,7 @@ class MailerUtils {
12139
12139
  const { total } = await this.queryEmail(messageSearchCriteria, {
12140
12140
  receivedAfter,
12141
12141
  });
12142
- return total > 0;
12142
+ return total >= expectedEmailCount;
12143
12143
  },
12144
12144
  timeout,
12145
12145
  }));
@@ -12150,8 +12150,11 @@ class MailerUtils {
12150
12150
  }
12151
12151
  return (await this.getEmails(ids))[0];
12152
12152
  };
12153
- this.findOtpFromEmail = async ({ email, subjectSubstring = OTP_EMAIL_PATTERN, timeout = 2 * 60 * 1000, receivedAfter = new Date(), }) => {
12154
- const { html: { codes }, } = await this.findMessage({ to: email, subject: subjectSubstring }, { timeout, receivedAfter });
12153
+ this.findOtpFromEmail = async ({ email, subjectSubstring = OTP_EMAIL_PATTERN, timeout = 2 * 60 * 1000, receivedAfter = new Date(), expectedEmailCount = 1, }) => {
12154
+ if (!this.accountId) {
12155
+ await this.fastmailApi.authorizeAndSetAccountId();
12156
+ }
12157
+ const { html: { codes }, } = await this.findMessage({ to: email, subject: subjectSubstring }, { timeout, receivedAfter, expectedEmailCount });
12155
12158
  return codes === null || codes === void 0 ? void 0 : codes[0];
12156
12159
  };
12157
12160
  this.generateRandomEmail = () => faker.faker.internet.email({
@@ -24269,6 +24272,7 @@ const LIST_MODIFIER_TAGS = {
24269
24272
 
24270
24273
  class EditorPage {
24271
24274
  constructor(page, neetoPlaywrightUtilities, editorWrapper) {
24275
+ this.wordsUsedInEditor = [];
24272
24276
  this.linkUrl = faker.faker.internet.url();
24273
24277
  this.filePath = "../../../e2e/assets/images/BigBinary.png";
24274
24278
  this.imageUrl = "https://picsum.photos/200/300";
@@ -24291,48 +24295,88 @@ class EditorPage {
24291
24295
  };
24292
24296
  this.moreMenuOptions = async () => {
24293
24297
  await this.moreMenuSelector.click();
24294
- const moreMenuButtons = await this.page
24295
- .getByTestId(COMMON_SELECTORS.dropdownContainer)
24296
- .getByRole("button")
24297
- .all();
24298
- return Promise.all(moreMenuButtons.map(async (button) => {
24298
+ const dropdownContainer = this.page.getByTestId(COMMON_SELECTORS.dropdownContainer);
24299
+ const moreMenuButtons = await dropdownContainer.getByRole("button").all();
24300
+ const moreMenuButtonLocators = Promise.all(moreMenuButtons.map(async (button) => {
24299
24301
  const dataCy = await button.getAttribute("data-cy");
24300
24302
  return this.cleanString(dataCy);
24301
24303
  }));
24304
+ await this.moreMenuSelector.click();
24305
+ // eslint-disable-next-line playwright/no-standalone-expect
24306
+ await test$1.expect(dropdownContainer).toBeHidden();
24307
+ return moreMenuButtonLocators;
24302
24308
  };
24303
24309
  this.verifyFontSize = async () => {
24310
+ const fontsAndTexts = [];
24304
24311
  const fontSizeDropdown = this.editorWrapper.getByTestId(NEETO_EDITOR_SELECTORS.fontSize);
24305
- await fontSizeDropdown.click();
24306
24312
  const fontSize = Object.keys(FONT_SIZE_SELECTORS);
24307
24313
  for (const font of fontSize) {
24308
24314
  const fontKey = font;
24315
+ const randomText = await this.fillRandomText();
24316
+ await fontSizeDropdown.click();
24309
24317
  await this.editorWrapper
24310
24318
  .getByTestId(FONT_SIZE_SELECTORS[fontKey])
24311
24319
  .click();
24312
- await test$1.expect(this.contentField.getByRole("heading", { level: Number(font.slice(1)) })).toBeVisible();
24313
- await fontSizeDropdown.click();
24320
+ await test$1.expect(this.contentField.getByRole("heading", {
24321
+ level: Number(font.slice(1)),
24322
+ name: randomText,
24323
+ })).toBeVisible();
24324
+ fontsAndTexts.push({
24325
+ key: fontKey,
24326
+ value: randomText,
24327
+ });
24314
24328
  }
24329
+ return fontsAndTexts;
24315
24330
  };
24316
- this.verifyTextModifiers = async (modifier) => {
24331
+ this.verifyTextModifiers = async (modifier, isButtonInMoreMenu) => {
24317
24332
  const modifierKey = modifier;
24318
24333
  const textModifierRole = TEXT_MODIFIER_ROLES[modifierKey];
24334
+ const randomText = await this.fillRandomText();
24319
24335
  const textModifierSelector = this.editorWrapper.getByTestId(TEXT_MODIFIER_SELECTORS[modifierKey]);
24336
+ isButtonInMoreMenu && (await this.moreMenuSelector.click());
24320
24337
  await textModifierSelector.click();
24321
- await test$1.expect(this.contentField.getByRole(textModifierRole)).toBeVisible();
24338
+ await test$1.expect(this.contentField
24339
+ .getByRole(textModifierRole)
24340
+ .filter({ hasText: randomText })).toBeVisible();
24341
+ await this.moveCursorAtBottom();
24342
+ await this.page.keyboard.press("Enter");
24343
+ if (modifierKey !== "codeBlock") {
24344
+ isButtonInMoreMenu && (await this.moreMenuSelector.click());
24345
+ await textModifierSelector.click();
24346
+ }
24347
+ return [{ key: modifierKey, value: randomText }];
24322
24348
  };
24323
- this.verifyTextDeskModifier = async (modifier) => {
24349
+ this.verifyTextDeskModifier = async (modifier, isButtonInMoreMenu) => {
24324
24350
  const modifierKey = modifier;
24325
24351
  const textModifierSelector = this.editorWrapper.getByTestId(NEETO_TEXT_MODIFIER_SELECTORS[modifierKey]);
24352
+ const randomText = await this.fillRandomText();
24353
+ isButtonInMoreMenu && (await this.moreMenuSelector.click());
24326
24354
  await textModifierSelector.click();
24327
- await test$1.expect(this.contentField.locator(TEXT_MODIFIER_TAGS[modifierKey])).toBeVisible();
24355
+ await test$1.expect(this.contentField
24356
+ .locator(TEXT_MODIFIER_TAGS[modifierKey])
24357
+ .filter({ hasText: randomText })).toBeVisible();
24358
+ await this.moveCursorAtBottom();
24359
+ isButtonInMoreMenu && (await this.moreMenuSelector.click());
24360
+ await textModifierSelector.click();
24361
+ return [{ key: modifierKey, value: randomText }];
24328
24362
  };
24329
- this.verifyListModifiers = async (modifier) => {
24363
+ this.verifyListModifiers = async (modifier, isButtonInMoreMenu) => {
24330
24364
  const modifierKey = modifier;
24331
24365
  const listModifierSelector = this.editorWrapper.getByTestId(LIST_MODIFIER_SELECTORS[modifierKey]);
24366
+ const randomText = await this.fillRandomText();
24367
+ isButtonInMoreMenu && (await this.moreMenuSelector.click());
24368
+ await listModifierSelector.click();
24369
+ await test$1.expect(this.contentField
24370
+ .locator(LIST_MODIFIER_TAGS[modifierKey])
24371
+ .filter({ hasText: randomText })).toBeVisible();
24372
+ await this.moveCursorAtBottom();
24373
+ isButtonInMoreMenu && (await this.moreMenuSelector.click());
24332
24374
  await listModifierSelector.click();
24333
- await test$1.expect(this.contentField.locator(LIST_MODIFIER_TAGS[modifierKey])).toBeVisible();
24375
+ return [{ key: modifierKey, value: randomText }];
24334
24376
  };
24335
- this.verifyEditorLinkButton = async (linkUrl) => {
24377
+ this.verifyEditorLinkButton = async (linkUrl, isButtonInMoreMenu) => {
24378
+ const randomText = await this.fillRandomText();
24379
+ isButtonInMoreMenu && (await this.moreMenuSelector.click());
24336
24380
  await this.editorLinkButton.click();
24337
24381
  await this.page
24338
24382
  .getByTestId(NEETO_EDITOR_SELECTORS.addLinkUrlInput)
@@ -24342,10 +24386,12 @@ class EditorPage {
24342
24386
  .click();
24343
24387
  const linkRole = DESCRIPTION_EDITOR_TEXTS.link;
24344
24388
  await test$1.expect(this.contentField.getByRole(linkRole)).toBeVisible();
24345
- await this.page.getByTestId(NEETO_EDITOR_SELECTORS.unlinkButton).click();
24389
+ await this.moveCursorAtBottom();
24390
+ return [{ key: "link", value: randomText }];
24346
24391
  };
24347
- this.verifyEditorAttachmentsButton = async (filePath) => {
24392
+ this.verifyEditorAttachmentsButton = async (filePath, isButtonInMoreMenu, shouldRemoveAttachment = false) => {
24348
24393
  const fileUploaderPromise = this.page.waitForEvent("filechooser");
24394
+ isButtonInMoreMenu && (await this.moreMenuSelector.click());
24349
24395
  await this.editorAttachmentsButton.click();
24350
24396
  const fileUploader = await fileUploaderPromise;
24351
24397
  const imagePath = Path__namespace.join(__dirname, filePath);
@@ -24354,18 +24400,22 @@ class EditorPage {
24354
24400
  responseUrl: ROUTES.attachment,
24355
24401
  });
24356
24402
  await test$1.expect(this.attachmentPreview).toBeVisible();
24357
- await this.attachmentPreview
24358
- .getByTestId(COMMON_SELECTORS.dropdownIcon)
24359
- .click();
24360
- await this.page
24361
- .getByTestId(NEETO_EDITOR_SELECTORS.attachmentPreviewDeleteButton)
24362
- .click();
24363
- await this.page
24364
- .getByTestId(COMMON_SELECTORS.alertModalSubmitButton)
24365
- .click();
24366
- await test$1.expect(this.attachmentPreview).toBeHidden({ timeout: 10000 });
24403
+ if (shouldRemoveAttachment) {
24404
+ await this.attachmentPreview
24405
+ .getByTestId(COMMON_SELECTORS.dropdownIcon)
24406
+ .click();
24407
+ await this.page
24408
+ .getByTestId(NEETO_EDITOR_SELECTORS.attachmentPreviewDeleteButton)
24409
+ .click();
24410
+ await this.page
24411
+ .getByTestId(COMMON_SELECTORS.alertModalSubmitButton)
24412
+ .click();
24413
+ await test$1.expect(this.attachmentPreview).toBeHidden({ timeout: 10000 });
24414
+ }
24415
+ return [{ key: "attachments", value: filePath }];
24367
24416
  };
24368
- this.verifyImageUploadOption = async ({ imageUrl, filePath, }) => {
24417
+ this.verifyImageUploadOption = async ({ imageUrl, filePath, isButtonInMoreMenu, shouldRemoveImage = false, }) => {
24418
+ isButtonInMoreMenu && (await this.moreMenuSelector.click());
24369
24419
  await this.imageUploadOption.click();
24370
24420
  const fileUploaderPromise = this.page.waitForEvent("filechooser");
24371
24421
  await this.page
@@ -24380,8 +24430,7 @@ class EditorPage {
24380
24430
  await test$1.expect(this.imageWrapper).toBeHidden({
24381
24431
  timeout: 15000,
24382
24432
  });
24383
- (await this.imageUploadOption.isHidden()) &&
24384
- (await this.moreMenuSelector.click());
24433
+ isButtonInMoreMenu && (await this.moreMenuSelector.click());
24385
24434
  await this.imageUploadOption.click();
24386
24435
  await this.page
24387
24436
  .getByTestId(NEETO_EDITOR_SELECTORS.imageUploadLinkButton)
@@ -24393,13 +24442,19 @@ class EditorPage {
24393
24442
  .getByTestId(NEETO_EDITOR_SELECTORS.imageUploadLinkSubmitButton)
24394
24443
  .click();
24395
24444
  await test$1.expect(this.imageWrapper).toBeVisible({ timeout: 15000 });
24396
- await this.imageWrapper.getByTestId(COMMON_SELECTORS.dropdownIcon).click();
24397
- await this.imageUploadDeleteButton.click();
24398
- await test$1.expect(this.imageWrapper).toBeHidden({
24399
- timeout: 15000,
24400
- });
24445
+ if (shouldRemoveImage) {
24446
+ await this.imageWrapper
24447
+ .getByTestId(COMMON_SELECTORS.dropdownIcon)
24448
+ .click();
24449
+ await this.imageUploadDeleteButton.click();
24450
+ await test$1.expect(this.imageWrapper).toBeHidden({
24451
+ timeout: 15000,
24452
+ });
24453
+ }
24454
+ return [{ key: "image-upload", value: imageUrl }];
24401
24455
  };
24402
- this.verifyCannedResponseOption = async (cannedResponseSuccessMessage) => {
24456
+ this.verifyCannedResponseOption = async (isButtonInMoreMenu, cannedResponseSuccessMessage) => {
24457
+ isButtonInMoreMenu && (await this.moreMenuSelector.click());
24403
24458
  await this.cannedResponseOption.click();
24404
24459
  await test$1.expect(this.page.getByTestId(COMMON_SELECTORS.paneHeader)).toContainText(DESCRIPTION_EDITOR_TEXTS.cannedResponseHeader);
24405
24460
  await this.page
@@ -24412,23 +24467,32 @@ class EditorPage {
24412
24467
  await this.neetoPlaywrightUtilities.verifyToast({
24413
24468
  message: cannedResponseSuccessMessage,
24414
24469
  });
24470
+ return [
24471
+ { key: "canned-responses", value: cannedResponseSuccessMessage },
24472
+ ];
24415
24473
  };
24416
- this.verifyVideoEmbedOption = async (videoUrl) => {
24474
+ this.verifyVideoEmbedOption = async (videoUrl, isButtonInMoreMenu, shouldRemoveVideo = false) => {
24475
+ isButtonInMoreMenu && (await this.moreMenuSelector.click());
24417
24476
  await this.videoEmbedOption.click();
24418
24477
  await this.videoEmbedInput.fill(videoUrl);
24419
24478
  await this.page
24420
24479
  .getByTestId(NEETO_EDITOR_SELECTORS.videoEmbedSubmit)
24421
24480
  .click();
24422
24481
  await test$1.expect(this.videoWrapperSelector).toBeVisible({ timeout: 15000 });
24423
- await this.videoWrapperSelector
24424
- .getByTestId(COMMON_SELECTORS.dropdownIcon)
24425
- .click();
24426
- await this.imageUploadDeleteButton.click();
24427
- await test$1.expect(this.videoWrapperSelector).toBeHidden({
24428
- timeout: 15000,
24429
- });
24482
+ if (shouldRemoveVideo) {
24483
+ await this.videoWrapperSelector
24484
+ .getByTestId(COMMON_SELECTORS.dropdownIcon)
24485
+ .click();
24486
+ await this.imageUploadDeleteButton.click();
24487
+ await test$1.expect(this.videoWrapperSelector).toBeHidden({
24488
+ timeout: 15000,
24489
+ });
24490
+ }
24491
+ return [{ key: "video-embed", value: videoUrl }];
24430
24492
  };
24431
- this.verifyEmojiSelector = async () => {
24493
+ this.verifyEmojiSelector = async (isButtonInMoreMenu) => {
24494
+ const emoji = "👍";
24495
+ isButtonInMoreMenu && (await this.moreMenuSelector.click());
24432
24496
  await this.emojiSelector.click();
24433
24497
  const emojiContainer = this.page.getByTestId(NEETO_EDITOR_SELECTORS.emojiContainer);
24434
24498
  await test$1.expect(emojiContainer).toBeVisible({
@@ -24438,8 +24502,9 @@ class EditorPage {
24438
24502
  .getByPlaceholder(DESCRIPTION_EDITOR_TEXTS.search)
24439
24503
  .fill(EMOJI_LABEL);
24440
24504
  await this.page.keyboard.press("Enter");
24441
- await test$1.expect(this.contentField).toContainText("👍");
24505
+ await test$1.expect(this.contentField).toContainText(emoji);
24442
24506
  await this.page.keyboard.press("Escape");
24507
+ return [{ key: "emoji", value: emoji }];
24443
24508
  };
24444
24509
  this.verifyDynamicVariables = async (dynamicVariables) => {
24445
24510
  for (const { key, value } of dynamicVariables) {
@@ -24452,62 +24517,72 @@ class EditorPage {
24452
24517
  }
24453
24518
  };
24454
24519
  this.buttonsAndVerifications = {
24455
- "font-size": this.verifyFontSize,
24456
- emoji: this.verifyEmojiSelector,
24457
- bold: () => this.verifyTextModifiers("bold"),
24458
- italic: () => this.verifyTextModifiers("italic"),
24459
- code: () => this.verifyTextModifiers("code"),
24460
- blockquote: () => this.verifyTextModifiers("blockquote"),
24461
- codeBlock: () => this.verifyTextModifiers("codeBlock"),
24462
- underline: () => this.verifyTextDeskModifier("underline"),
24463
- strike: () => this.verifyTextDeskModifier("strike"),
24464
- highlight: () => this.verifyTextDeskModifier("highlight"),
24465
- bulletList: () => this.verifyListModifiers("bulletList"),
24466
- orderedList: () => this.verifyListModifiers("orderedList"),
24467
- link: () => this.verifyEditorLinkButton(this.linkUrl),
24468
- attachments: () => this.verifyEditorAttachmentsButton(this.filePath),
24469
- "image-upload": () => this.verifyImageUploadOption({
24520
+ "font-size": () => this.verifyFontSize(),
24521
+ emoji: isButtonInMoreMenu => this.verifyEmojiSelector(isButtonInMoreMenu),
24522
+ bold: isButtonInMoreMenu => this.verifyTextModifiers("bold", isButtonInMoreMenu),
24523
+ italic: isButtonInMoreMenu => this.verifyTextModifiers("italic", isButtonInMoreMenu),
24524
+ code: isButtonInMoreMenu => this.verifyTextModifiers("code", isButtonInMoreMenu),
24525
+ blockquote: isButtonInMoreMenu => this.verifyTextModifiers("blockquote", isButtonInMoreMenu),
24526
+ codeBlock: isButtonInMoreMenu => this.verifyTextModifiers("codeBlock", isButtonInMoreMenu),
24527
+ underline: isButtonInMoreMenu => this.verifyTextDeskModifier("underline", isButtonInMoreMenu),
24528
+ strike: isButtonInMoreMenu => this.verifyTextDeskModifier("strike", isButtonInMoreMenu),
24529
+ highlight: isButtonInMoreMenu => this.verifyTextDeskModifier("highlight", isButtonInMoreMenu),
24530
+ bulletList: isButtonInMoreMenu => this.verifyListModifiers("bulletList", isButtonInMoreMenu),
24531
+ orderedList: isButtonInMoreMenu => this.verifyListModifiers("orderedList", isButtonInMoreMenu),
24532
+ link: isButtonInMoreMenu => this.verifyEditorLinkButton(this.linkUrl, isButtonInMoreMenu),
24533
+ attachments: isButtonInMoreMenu => this.verifyEditorAttachmentsButton(this.filePath, isButtonInMoreMenu),
24534
+ "image-upload": isButtonInMoreMenu => this.verifyImageUploadOption({
24470
24535
  imageUrl: this.imageUrl,
24471
24536
  filePath: this.filePath,
24537
+ isButtonInMoreMenu,
24472
24538
  }),
24473
- "canned-responses": this.verifyCannedResponseOption,
24474
- "video-embed": () => this.verifyVideoEmbedOption(this.videoUrl),
24539
+ "canned-responses": isButtonInMoreMenu => this.verifyCannedResponseOption(isButtonInMoreMenu),
24540
+ "video-embed": isButtonInMoreMenu => this.verifyVideoEmbedOption(this.videoUrl, isButtonInMoreMenu),
24475
24541
  };
24476
- this.verifyDescriptionEditor = async ({ text, dynamicVariables, linkUrl, filePath, imageUrl, videoUrl, cannedResponseSuccessMessage, }) => {
24542
+ this.verifyDescriptionEditor = async ({ dynamicVariables, linkUrl, filePath, imageUrl, videoUrl, cannedResponseSuccessMessage, } = {}) => {
24477
24543
  const fixedMenuButtons = await this.fixedMenuOptions();
24478
24544
  let moreMenuButtons = [];
24479
24545
  (await this.moreMenuSelector.isVisible()) &&
24480
24546
  (moreMenuButtons = await this.moreMenuOptions());
24481
- const needToSkipDisabling = [
24482
- "link",
24483
- "attachments",
24484
- "image-upload",
24485
- "canned-responses",
24486
- "video-embed",
24487
- "emoji",
24488
- ];
24489
24547
  this.linkUrl = linkUrl || this.linkUrl;
24490
24548
  this.filePath = filePath || this.filePath;
24491
24549
  this.imageUrl = imageUrl || this.imageUrl;
24492
24550
  this.videoUrl = videoUrl || this.videoUrl;
24493
24551
  this.cannedResponseSuccessMessage = cannedResponseSuccessMessage;
24494
- await this.contentField.fill(text);
24495
- for (const button of fixedMenuButtons) {
24496
- await this.contentField.click({ clickCount: 3 });
24497
- await this.buttonsAndVerifications[button]();
24498
- !needToSkipDisabling.includes(button) &&
24499
- (await this.editorWrapper.getByTestId(optionSelector(button)).click());
24500
- }
24501
- for (const button of moreMenuButtons) {
24502
- await this.contentField.click({ clickCount: 3 });
24503
- await this.moreMenuSelector.click();
24504
- await this.buttonsAndVerifications[button]();
24505
- if (!needToSkipDisabling.includes(button)) {
24506
- await this.moreMenuSelector.click();
24507
- await this.editorWrapper.getByTestId(optionSelector(button)).click();
24508
- }
24552
+ const keysAndValues = [];
24553
+ for (const button of [...fixedMenuButtons, ...moreMenuButtons]) {
24554
+ const isMoreMenuButton = moreMenuButtons.includes(button);
24555
+ const keyValuesForButton = await this.buttonsAndVerifications[button](isMoreMenuButton);
24556
+ keysAndValues.push(...keyValuesForButton);
24509
24557
  }
24510
24558
  dynamicVariables && (await this.verifyDynamicVariables(dynamicVariables));
24559
+ return keysAndValues;
24560
+ };
24561
+ this.moveCursorAtBottom = async () => {
24562
+ const platform = require$$0$2.platform();
24563
+ if (platform === "darwin") {
24564
+ await this.page.keyboard.press("Meta+ArrowRight");
24565
+ await this.page.keyboard.press("Meta+ArrowDown");
24566
+ }
24567
+ else {
24568
+ await this.page.keyboard.press("End");
24569
+ await this.page.keyboard.press("PageDown");
24570
+ }
24571
+ await this.page.keyboard.press("Enter");
24572
+ };
24573
+ this.fillRandomText = async () => {
24574
+ let randomText;
24575
+ do {
24576
+ randomText = faker.faker.lorem.word(10);
24577
+ } while (this.wordsUsedInEditor.includes(randomText));
24578
+ await this.contentField.click();
24579
+ await this.moveCursorAtBottom();
24580
+ await this.page.keyboard.type(randomText);
24581
+ this.wordsUsedInEditor.push(randomText);
24582
+ const randomTextLocator = this.contentField.getByText(randomText);
24583
+ await randomTextLocator.scrollIntoViewIfNeeded();
24584
+ await randomTextLocator.click({ clickCount: 3 });
24585
+ return randomText;
24511
24586
  };
24512
24587
  this.page = page;
24513
24588
  this.neetoPlaywrightUtilities = neetoPlaywrightUtilities;