@bigbinary/neeto-playwright-commons 1.27.0 → 1.27.2

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
@@ -542,6 +542,14 @@ class SlackApi {
542
542
  this.fetchMessages = (channelId, unixTimestamp) => this.apiRequest("history", { channel: channelId, oldest: unixTimestamp });
543
543
  this.createChannel = (channelName) => this.apiRequest("create", { name: channelName });
544
544
  this.addUser = (channelId, userId) => this.apiRequest("invite", { channel: channelId, users: userId });
545
+ this.mockChannelDeleted = (channelId) => this.neetoPlaywrightUtilities.apiRequest({
546
+ url: "/neeto_slack/api/v1/testing/webhooks",
547
+ method: "post",
548
+ data: neetoCist.keysToSnakeCase({
549
+ eventType: "channel_deleted",
550
+ notificationChannelId: channelId,
551
+ }),
552
+ });
545
553
  if (!process.env.SLACK_BOT_TOKEN) {
546
554
  throw new Error("SLACK_BOT_TOKEN is not set");
547
555
  }
@@ -5046,7 +5054,6 @@ const generateStagingData = (product = "invoice") => {
5046
5054
  };
5047
5055
  };
5048
5056
 
5049
- /* eslint-disable playwright/no-skipped-test */
5050
5057
  const execCommand = (command) => child_process.execSync(command)
5051
5058
  .toString("utf-8")
5052
5059
  .replace(/[\n\r\s]+$/, "");
@@ -5211,7 +5218,7 @@ const globalShortcuts = (t) => [
5211
5218
  },
5212
5219
  {
5213
5220
  description: t("neetoMolecules.keyboardShortcuts.global.openProductSwitcher"),
5214
- sequence: "ctrl+e",
5221
+ sequence: "ctrl+u",
5215
5222
  },
5216
5223
  ];
5217
5224
  const generatePhoneNumber = () => `${"+91"} 9${faker.faker.string.numeric(4)} ${faker.faker.string.numeric(5)}`;
@@ -5377,8 +5384,9 @@ const NEETO_FILTERS_SELECTORS = {
5377
5384
  };
5378
5385
 
5379
5386
  const HELP_CENTER_SELECTORS = {
5387
+ helpMenuBtn: "help-menu-button",
5380
5388
  helpButton: "help-button",
5381
- documentationButton: "help-link-help-center-button",
5389
+ documentationButton: "help-link-help-articles-button",
5382
5390
  keyboardShortcutButton: "help-link-keyboard-shortcut-button",
5383
5391
  chatButton: "help-link-live-chat-button",
5384
5392
  whatsNewButton: "help-link-engage-button",
@@ -114416,29 +114424,21 @@ const THEMES_TEXTS = {
114416
114424
 
114417
114425
  class HelpAndProfilePage {
114418
114426
  constructor({ page, neetoPlaywrightUtilities, chatApiBaseURL, kbDocsBaseURL, changelogBaseURL, }) {
114419
- this.hoverOnBody = () => this.page.locator("body").hover({ timeout: 10000 });
114420
114427
  this.openHelpCenter = async () => {
114428
+ const floatingActionMenuBtn = this.page.getByTestId(COMMON_SELECTORS.floatingActionMenuButton);
114421
114429
  await test.expect(async () => {
114422
- await this.hoverOnBody();
114423
- const floatingActionMenuButton = this.page.getByTestId(COMMON_SELECTORS.floatingActionMenuButton);
114424
- await floatingActionMenuButton.scrollIntoViewIfNeeded();
114425
- await floatingActionMenuButton.hover();
114426
- await test.expect(this.page.getByTestId(HELP_CENTER_SELECTORS.chatButton)).toBeVisible();
114430
+ await floatingActionMenuBtn.scrollIntoViewIfNeeded();
114431
+ await floatingActionMenuBtn.hover();
114432
+ await test.expect(this.page.getByTestId(HELP_CENTER_SELECTORS.whatsNewButton)).toBeVisible();
114427
114433
  }).toPass({ timeout: 60000 });
114428
114434
  };
114429
- this.openLiveChatAndVerify = async (widgetVisibilityTimeout = 10000) => {
114430
- await test.expect(async () => {
114431
- await this.openHelpCenter();
114432
- await this.page.getByTestId(HELP_CENTER_SELECTORS.chatButton).click();
114433
- await test.expect(this.neetoChatWidget).toBeVisible({
114434
- timeout: widgetVisibilityTimeout,
114435
- });
114436
- await test.expect(this.neetoChatSpinner).toBeHidden({ timeout: 20 * 1000 });
114437
- await test.expect(this.neetoChatWidget).toBeVisible({
114438
- timeout: widgetVisibilityTimeout,
114439
- });
114440
- }).toPass({ timeout: 35000 + widgetVisibilityTimeout * 2 });
114441
- };
114435
+ this.openLiveChatAndVerify = () => test.expect(async () => {
114436
+ await this.openHelpCenter();
114437
+ await this.page.getByTestId(HELP_CENTER_SELECTORS.helpMenuBtn).click();
114438
+ await this.page.getByTestId(HELP_CENTER_SELECTORS.chatButton).click();
114439
+ await test.expect(this.neetoChatSpinner).toBeHidden({ timeout: 20000 });
114440
+ await test.expect(this.neetoChatWidget).toBeVisible({ timeout: 10000 });
114441
+ }).toPass({ timeout: 60000 });
114442
114442
  /**
114443
114443
  * @deprecated This method is deprecated. Use openAndVerifyChatWidget instead.
114444
114444
  */
@@ -114458,7 +114458,7 @@ class HelpAndProfilePage {
114458
114458
  this.openAndVerifyChatWidget = async () => {
114459
114459
  await this.page.reload();
114460
114460
  await this.neetoPlaywrightUtilities.waitForPageLoad();
114461
- await test.test.step("1: Open live chat and verify iframe", () => this.openLiveChatAndVerify());
114461
+ await test.test.step("1: Open live chat", this.openLiveChatAndVerify);
114462
114462
  await test.test.step("2: Close and reopen live chat frame", async () => {
114463
114463
  await this.page.getByTestId(CHAT_WIDGET_SELECTORS.closeChat).click();
114464
114464
  await test.expect(this.neetoChatWidget).toBeHidden({ timeout: 35000 });
@@ -114487,6 +114487,7 @@ class HelpAndProfilePage {
114487
114487
  this.openAndVerifyHelpArticles = async () => {
114488
114488
  await test.test.step("1: Open Help Center links", this.openHelpCenter);
114489
114489
  await test.test.step("2: Open and verify help articles link", async () => {
114490
+ await this.page.getByTestId(HELP_CENTER_SELECTORS.helpMenuBtn).click();
114490
114491
  const helpArticlesPromise = this.page.waitForEvent("popup");
114491
114492
  await this.page
114492
114493
  .getByTestId(HELP_CENTER_SELECTORS.documentationButton)
@@ -114527,7 +114528,7 @@ class HelpAndProfilePage {
114527
114528
  });
114528
114529
  };
114529
114530
  this.openAndVerifyChangelog = async () => {
114530
- await test.test.step("1: Open Help Center links and changelog", this.openChangelogPane);
114531
+ await test.test.step("1: Open changelog", this.openChangelogPane);
114531
114532
  await test.test.step("2: Close and reopen changelog pane", async () => {
114532
114533
  await this.page
114533
114534
  .getByTestId(CHANGELOG_WIDGET_SELECTORS.closeButton)
@@ -114544,8 +114545,10 @@ class HelpAndProfilePage {
114544
114545
  await this.neetoPlaywrightUtilities.waitForPageLoad({
114545
114546
  customPageContext: changelogPage,
114546
114547
  });
114547
- await test.expect(changelogPage.getByRole("button", { name: ENGAGE_TEXTS.subscribe })).toBeVisible({ timeout: 10000 });
114548
- await test.expect(changelogPage).toHaveURL(this.changelogBaseURL);
114548
+ await Promise.all([
114549
+ test.expect(changelogPage).toHaveURL(this.changelogBaseURL),
114550
+ test.expect(changelogPage.getByRole("button", { name: ENGAGE_TEXTS.subscribe })).toBeVisible({ timeout: 10000 }),
114551
+ ]);
114549
114552
  await changelogPage.close();
114550
114553
  });
114551
114554
  };
@@ -114664,21 +114667,21 @@ class HelpAndProfilePage {
114664
114667
  await test.expect(this.page.getByTestId(COMMON_SELECTORS.appSwitcherWrapper)).toBeVisible();
114665
114668
  }).toPass({ timeout: 45000 }));
114666
114669
  await test.test.step("2: Verify search functionality", async () => {
114667
- const playdashAppLink = this.page.getByTestId(COMMON_SELECTORS.appLink(productName));
114668
- const replayAppLink = this.page.getByTestId(COMMON_SELECTORS.appLink("Replay"));
114670
+ const playdash = this.page.getByTestId(COMMON_SELECTORS.appLink(productName));
114671
+ const replay = this.page.getByTestId(COMMON_SELECTORS.appLink("Replay"));
114669
114672
  const searchInput = this.page.getByTestId(COMMON_SELECTORS.productSwitcherSearchInput);
114670
114673
  await searchInput.fill(faker.faker.word.words(3));
114671
114674
  //TODO: Use data-testid label when this https://github.com/bigbinary/neeto-molecules/issues/2114 is resolved
114672
114675
  await test.expect(this.page.getByText(this.t("neetoMolecules.productSwitcher.noApps"))).toBeVisible();
114673
114676
  await searchInput.fill(searchQueryPartial);
114674
114677
  await Promise.all([
114675
- test.expect(playdashAppLink).toBeVisible(),
114676
- test.expect(replayAppLink).toBeVisible(),
114678
+ test.expect(playdash).toBeVisible(),
114679
+ test.expect(replay).toBeVisible(),
114677
114680
  ]);
114678
114681
  await searchInput.fill(searchQueryFull);
114679
114682
  await Promise.all([
114680
- test.expect(playdashAppLink).toBeVisible(),
114681
- test.expect(replayAppLink).toBeHidden(),
114683
+ test.expect(playdash).toBeVisible(),
114684
+ test.expect(replay).toBeHidden(),
114682
114685
  ]);
114683
114686
  });
114684
114687
  };
@@ -114705,7 +114708,7 @@ class HelpAndProfilePage {
114705
114708
  this.verifyLogout = async () => {
114706
114709
  if (shouldSkipSetupAndTeardown())
114707
114710
  return;
114708
- await test.test.step("1: Open Help center and verify", this.openHelpCenter);
114711
+ await test.test.step("1: Open Help center", this.openHelpCenter);
114709
114712
  await test.test.step("2: Click logout and verify", async () => {
114710
114713
  await this.page
114711
114714
  .getByTestId(PROFILE_SECTION_SELECTORS.logoutButton)
@@ -114787,6 +114790,7 @@ class HelpAndProfilePage {
114787
114790
  this.openAndVerifyStatus = async (appName) => {
114788
114791
  await test.test.step("1: Open Help Center links", this.openHelpCenter);
114789
114792
  await test.test.step("2: Open and verify status page", async () => {
114793
+ await this.page.getByTestId(HELP_CENTER_SELECTORS.helpMenuBtn).click();
114790
114794
  const statusPagePromise = this.page.waitForEvent("popup");
114791
114795
  await this.page.getByTestId(HELP_CENTER_SELECTORS.statusButton).click();
114792
114796
  const statusPage = await statusPagePromise;
@@ -114800,6 +114804,7 @@ class HelpAndProfilePage {
114800
114804
  this.openAndVerifyCommunity = async () => {
114801
114805
  await test.test.step("1: Open Help Center links", this.openHelpCenter);
114802
114806
  await test.test.step("2: Open and verify community", async () => {
114807
+ await this.page.getByTestId(HELP_CENTER_SELECTORS.helpMenuBtn).click();
114803
114808
  const communityPagePromise = this.page.waitForEvent("popup");
114804
114809
  await this.page
114805
114810
  .getByTestId(HELP_CENTER_SELECTORS.communityButton)
@@ -116911,11 +116916,17 @@ class GooglePage extends IntegrationBase {
116911
116916
  totpToken = this.totp.generate({ timestamp: Date.now() });
116912
116917
  }
116913
116918
  previousToken = totpToken;
116919
+ if (await codeInput.isHidden())
116920
+ return;
116914
116921
  await codeInput.fill(totpToken);
116915
116922
  test.expect(this.totp.validate({ token: totpToken })).not.toBeNull();
116916
116923
  await this.page.locator(GOOGLE_LOGIN_SELECTORS.totpNext).click();
116917
- await test.expect(this.page.getByText(GOOGLE_LOGIN_TEXTS.wrongCode)).toBeHidden({ timeout: 10000 });
116918
- await test.expect(codeInput).toBeHidden({ timeout: 15000 });
116924
+ await Promise.all([
116925
+ test.expect(codeInput).toBeHidden({ timeout: 20000 }),
116926
+ test.expect(this.page.getByText(GOOGLE_LOGIN_TEXTS.wrongCode)).toBeHidden({
116927
+ timeout: 20000,
116928
+ }),
116929
+ ]);
116919
116930
  }).toPass({ timeout: 2 * 60 * 1000 });
116920
116931
  };
116921
116932
  this.logoutFromGoogle = async () => {
@@ -117112,32 +117123,58 @@ class SlackPage extends IntegrationBase {
117112
117123
  await slackWebappPage.addLocatorHandler(slackWebappPageDataQa(SLACK_DATA_QA_SELECTORS.messagePaneBannerCloseIcon), locator => locator.click(), { times: 1 });
117113
117124
  await slackWebappPage.addLocatorHandler(slackWebappPageDataQa(SLACK_DATA_QA_SELECTORS.permissionBannerCloseIcon), locator => locator.click(), { noWaitAfter: true, times: 2 });
117114
117125
  };
117115
- this.connectAndVerifyIntegration = async (redirectUrl, customSteps, channelToConfigure = SLACK_DEFAULT_CHANNEL) => {
117126
+ this.initializeSlackPermissionPage = async () => {
117116
117127
  await this.connect();
117117
- const loginButton = this.page.getByRole("button", {
117118
- name: this.t("neetoSlack.slack.connect.loginButton"),
117119
- });
117120
- const installButton = this.page.locator(SLACK_SELECTORS.installButton);
117121
- const allowButton = this.page.getByRole("button", {
117122
- name: SLACK_WEB_TEXTS.allow,
117123
- });
117124
- const button = installButton.or(allowButton);
117125
- if (await loginButton.isVisible()) {
117126
- await loginButton.click({ delay: 5000 });
117127
- await this.page.waitForURL(RegExp("(.*)slack.com/.*"));
117128
- }
117129
117128
  await this.page.waitForLoadState("domcontentloaded", { timeout: 25000 });
117130
- await test.expect(button).toBeVisible({ timeout: 25000 });
117131
- await test.expect(button).toBeEnabled({ timeout: 25000 });
117132
- const currentWorkspace = (await this.page
117129
+ await test.expect(this.allowButton).toBeVisible({ timeout: 25000 });
117130
+ await test.expect(this.allowButton).toBeEnabled({ timeout: 25000 });
117131
+ return await this.page
117133
117132
  .locator(SLACK_SELECTORS.teamPicketButtonContent)
117134
- .textContent()) || "";
117135
- await button.click({ timeout: 25000 });
117136
- await this.page.waitForURL(redirectUrl);
117133
+ .textContent();
117134
+ };
117135
+ this.navigateToCallbackUrl = async () => {
117136
+ await this.page.goto(this.callbackUrl.replace(/^https:/, "http:"));
117137
+ await this.neetoPlaywrightUtilities.waitForPageLoad();
117138
+ };
117139
+ this.captureCallbackUrl = () => this.page.on("request", (request) => {
117140
+ const url = request.url();
117141
+ if (url.includes("/neeto_slack/api/v2/slack/callbacks") &&
117142
+ url.startsWith("https:")) {
117143
+ this.callbackUrl = url;
117144
+ }
117145
+ });
117146
+ this.connectAndVerifyInDev = async (redirectUrl, channelToConfigure, customSteps) => {
117147
+ this.currentWorkspace = (await this.initializeSlackPermissionPage()) || "";
117148
+ this.captureCallbackUrl();
117149
+ await this.allowButton.click({ timeout: 25000 });
117150
+ await test.expect(this.allowButton).toBeHidden({ timeout: 25000 });
117151
+ await this.page.waitForLoadState("domcontentloaded", { timeout: 20000 });
117152
+ await this.navigateToCallbackUrl();
117153
+ await this.page.waitForURL(redirectUrl, {
117154
+ timeout: 15000,
117155
+ });
117156
+ await this.completeSlackChannelSetup(channelToConfigure, customSteps);
117157
+ };
117158
+ this.connectAndVerifyInStaging = async (redirectUrl, channelToConfigure, customSteps) => {
117159
+ this.currentWorkspace = (await this.initializeSlackPermissionPage()) || "";
117160
+ await this.allowButton.click({ timeout: 25000 });
117161
+ await test.expect(this.allowButton).toBeHidden({ timeout: 25000 });
117162
+ await this.page.waitForLoadState("domcontentloaded", { timeout: 20000 });
117163
+ await this.page.waitForURL(redirectUrl, {
117164
+ timeout: 15000,
117165
+ });
117166
+ await this.completeSlackChannelSetup(channelToConfigure, customSteps);
117167
+ };
117168
+ this.connectAndVerifyIntegration = async (redirectUrl, customSteps, channelToConfigure = SLACK_DEFAULT_CHANNEL) => {
117169
+ IS_DEV_ENV
117170
+ ? await this.connectAndVerifyInDev(redirectUrl, channelToConfigure, customSteps)
117171
+ : await this.connectAndVerifyInStaging(redirectUrl, channelToConfigure, customSteps);
117172
+ };
117173
+ this.completeSlackChannelSetup = async (channelToConfigure, customSteps) => {
117137
117174
  await this.neetoPlaywrightUtilities.waitForPageLoad();
117138
117175
  await test.expect(this.page.getByRole("heading", {
117139
117176
  name: this.t("neetoSlack.slack.configure.title", {
117140
- teamName: currentWorkspace,
117177
+ teamName: this.currentWorkspace,
117141
117178
  }),
117142
117179
  })).toBeVisible({ timeout: 10000 });
117143
117180
  await this.neetoPlaywrightUtilities.selectOptionFromDropdown({
@@ -117146,14 +117183,17 @@ class SlackPage extends IntegrationBase {
117146
117183
  await this.page
117147
117184
  .getByRole("button", { name: this.t("neetoSlack.common.continue") })
117148
117185
  .click();
117149
- await this.neetoPlaywrightUtilities.waitForPageLoad();
117186
+ await Promise.all([
117187
+ this.neetoPlaywrightUtilities.waitForPageLoad(),
117188
+ this.neetoPlaywrightUtilities.verifyToast(),
117189
+ ]);
117150
117190
  if (customSteps) {
117151
117191
  await customSteps();
117152
117192
  }
117153
117193
  else {
117154
117194
  await test.expect(this.page.getByRole("heading", {
117155
117195
  name: this.t("neetoSlack.slack.finish.title", {
117156
- teamName: currentWorkspace,
117196
+ teamName: this.currentWorkspace,
117157
117197
  }),
117158
117198
  })).toBeVisible();
117159
117199
  await this.page
@@ -117280,6 +117320,9 @@ class SlackPage extends IntegrationBase {
117280
117320
  .click();
117281
117321
  await test.expect(channelItem).toBeHidden();
117282
117322
  };
117323
+ this.allowButton = this.page.getByRole("button", {
117324
+ name: SLACK_WEB_TEXTS.allow,
117325
+ });
117283
117326
  }
117284
117327
  }
117285
117328
 
@@ -119248,36 +119291,45 @@ class OrganizationPage {
119248
119291
  }
119249
119292
  }
119250
119293
 
119294
+ dayjs.extend(customParseFormat);
119251
119295
  class ApiKeysPage {
119252
119296
  constructor(page, neetoPlaywrightUtilities) {
119297
+ this.page = page;
119298
+ this.neetoPlaywrightUtilities = neetoPlaywrightUtilities;
119299
+ this.enableExpiryDate = async (expiryDate) => {
119300
+ const userProps = await getGlobalUserProps(this.page);
119301
+ const normalizedDate = dayjs(expiryDate, DATE_FORMATS.date);
119302
+ const formattedExpiryDate = normalizedDate.format(userProps === null || userProps === void 0 ? void 0 : userProps.dateFormat);
119303
+ const expiryDateInput = this.page
119304
+ .getByTestId(COMMON_SELECTORS.paneBody)
119305
+ .getByTestId(ADMIN_PANEL_SELECTORS.expiryDateInput);
119306
+ const nextYearBtn = this.page.getByLabel(DATE_TEXTS.nextYear, {
119307
+ exact: true,
119308
+ });
119309
+ await this.page
119310
+ .getByTestId(COMMON_SELECTORS.checkboxInput("never-expires"))
119311
+ .uncheck();
119312
+ await expiryDateInput.click();
119313
+ await test.expect(nextYearBtn).toBeVisible();
119314
+ await expiryDateInput.pressSequentially(formattedExpiryDate, {
119315
+ delay: 250,
119316
+ });
119317
+ await Promise.all([
119318
+ test.expect(expiryDateInput).toHaveValue(formattedExpiryDate),
119319
+ test.expect(this.page.getByRole("button", { name: CALENDAR_LABELS.month })).toHaveText(normalizedDate.format(DATE_FORMATS.month)),
119320
+ test.expect(this.page.getByRole("button", { name: CALENDAR_LABELS.year })).toHaveText(normalizedDate.format(DATE_FORMATS.year)),
119321
+ test.expect(this.page.getByTitle(normalizedDate.format(DATE_FORMATS.calendarDate))).toHaveClass(RegExp(DATE_PICKER_SELECTORS.selectedDateInCalendarClass)),
119322
+ ]);
119323
+ await this.page.keyboard.press("Enter");
119324
+ await test.expect(nextYearBtn).toBeHidden();
119325
+ };
119253
119326
  this.fillApiKeyDetails = async ({ label, expiryDate }) => {
119254
119327
  await this.page
119255
119328
  .getByTestId(COMMON_SELECTORS.paneBody)
119256
119329
  .getByTestId(COMMON_SELECTORS.customInputField("label"))
119257
119330
  .fill(label);
119258
- if (expiryDate) {
119259
- await this.page
119260
- .getByTestId(COMMON_SELECTORS.checkboxInput("never-expires"))
119261
- .uncheck();
119262
- const expiryDateInput = this.page
119263
- .getByTestId(COMMON_SELECTORS.paneBody)
119264
- .getByTestId(ADMIN_PANEL_SELECTORS.expiryDateInput);
119265
- await expiryDateInput.click();
119266
- await test.expect(this.page.getByLabel(DATE_TEXTS.nextYear, { exact: true })).toBeVisible();
119267
- await expiryDateInput.pressSequentially(expiryDate, { delay: 250 });
119268
- dayjs.extend(customParseFormat);
119269
- const parsedExpiryDate = dayjs(expiryDate, DATE_FORMATS.date);
119270
- await Promise.all([
119271
- test.expect(expiryDateInput).toHaveValue(expiryDate),
119272
- test.expect(this.page.getByRole("button", { name: CALENDAR_LABELS.month })).toHaveText(parsedExpiryDate.format(DATE_FORMATS.month)),
119273
- test.expect(this.page.getByRole("button", { name: CALENDAR_LABELS.year })).toHaveText(parsedExpiryDate.format(DATE_FORMATS.year)),
119274
- test.expect(this.page.getByTitle(parsedExpiryDate.format(DATE_FORMATS.calendarDate))).toHaveClass(RegExp(DATE_PICKER_SELECTORS.selectedDateInCalendarClass)),
119275
- ]);
119276
- await this.page.keyboard.press("Enter");
119277
- await test.expect(this.page.getByLabel(DATE_TEXTS.nextYear, { exact: true })).toBeHidden();
119278
- }
119279
- await this.page.getByTestId(COMMON_SELECTORS.saveChangesButton).click();
119280
- await this.neetoPlaywrightUtilities.verifyToast();
119331
+ neetoCist.isPresent(expiryDate) && (await this.enableExpiryDate(expiryDate));
119332
+ await this.neetoPlaywrightUtilities.saveChanges({ isPane: true });
119281
119333
  };
119282
119334
  this.verifyApiKey = ({ targetRow, label, date }) => Promise.all([
119283
119335
  test.expect(targetRow.getByRole("cell", { name: label })).toBeVisible(),
@@ -119306,8 +119358,6 @@ class ApiKeysPage {
119306
119358
  await this.neetoPlaywrightUtilities.verifyToast();
119307
119359
  await test.expect(targetRow).toBeHidden();
119308
119360
  };
119309
- this.page = page;
119310
- this.neetoPlaywrightUtilities = neetoPlaywrightUtilities;
119311
119361
  this.t = playwrightI18nextFixture.getI18nInstance().t;
119312
119362
  }
119313
119363
  }
@@ -119405,7 +119455,9 @@ class CustomDomainPage {
119405
119455
  ]);
119406
119456
  await this.neetoPlaywrightUtilities.waitForPageLoad();
119407
119457
  await validateButton.click();
119408
- await test.expect(this.page.getByTestId(COMMON_SELECTORS.calloutElement)).toBeVisible({ timeout: 15000 });
119458
+ await test.expect
119459
+ .soft(this.page.getByTestId(COMMON_SELECTORS.calloutElement))
119460
+ .toBeVisible({ timeout: 15000 });
119409
119461
  let isCertificateLimitExceeded = false;
119410
119462
  await test.expect(async () => {
119411
119463
  isCertificateLimitExceeded = await this.isCertificateLimitExceeded();
@@ -119924,6 +119976,11 @@ const TEAM_MEMBER_TEXTS = {
119924
119976
  emailSubject: "Your team members export is here",
119925
119977
  };
119926
119978
 
119979
+ const KEYBOARD_SHORTCUT_TEST_CASES = [
119980
+ { os: "windows", agent: USER_AGENTS.windows },
119981
+ { os: "mac", agent: USER_AGENTS.mac },
119982
+ ];
119983
+
119927
119984
  const PHONE_NUMBER_FORMATS = [
119928
119985
  { name: "Afghanistan", code: "+93", format: "70#######", flag: "🇦🇫" },
119929
119986
  { name: "Aland", code: "+358", format: "5####", flag: "🇦🇽" },
@@ -125413,6 +125470,7 @@ exports.ImageUploader = ImageUploader;
125413
125470
  exports.IntegrationBase = IntegrationBase;
125414
125471
  exports.IpRestrictionsApi = IpRestrictionsApi;
125415
125472
  exports.KEYBOARD_SHORTCUTS_SELECTORS = KEYBOARD_SHORTCUTS_SELECTORS;
125473
+ exports.KEYBOARD_SHORTCUT_TEST_CASES = KEYBOARD_SHORTCUT_TEST_CASES;
125416
125474
  exports.LIST_MODIFIER_SELECTORS = LIST_MODIFIER_SELECTORS;
125417
125475
  exports.LIST_MODIFIER_TAGS = LIST_MODIFIER_TAGS;
125418
125476
  exports.LOGIN_SELECTORS = LOGIN_SELECTORS;