@bigbinary/neeto-playwright-commons 1.5.2 → 1.6.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
@@ -170,25 +170,30 @@ const COMMON_SELECTORS = {
170
170
  subheader: "subheader",
171
171
  settingsLink: "Settings",
172
172
  ticketFieldTextInput: (label) => `${hyphenize(label)}-text-input`,
173
+ appSwitcherButton: "app-switcher-button",
174
+ appSwitcherWrapper: "switcher-wrapper",
173
175
  tableSpinner: ".ant-spin",
174
176
  };
175
177
 
176
178
  class CustomCommands {
177
179
  constructor(page, request) {
178
- this.interceptMultipleResponses = ({ responseUrl = "", times = 1, baseUrl, }) => Promise.all([...new Array(times)].map(() => this.page.waitForResponse((response) => {
179
- var _a, _b, _c;
180
- if (response.request().resourceType() === "xhr" &&
181
- response.status() === 200 &&
182
- response.url().includes(responseUrl) &&
183
- response
184
- .url()
185
- .startsWith((_a = baseUrl !== null && baseUrl !== void 0 ? baseUrl : process.env.BASE_URL) !== null && _a !== void 0 ? _a : "") &&
186
- !this.responses.includes((_b = response.headers()) === null || _b === void 0 ? void 0 : _b["x-request-id"])) {
187
- this.responses.push((_c = response.headers()) === null || _c === void 0 ? void 0 : _c["x-request-id"]);
188
- return true;
189
- }
190
- return false;
191
- }, { timeout: 10000 })));
180
+ this.interceptMultipleResponses = ({ responseUrl = "", times = 1, baseUrl, customPageContext, timeout = 10000, } = {}) => {
181
+ const pageContext = customPageContext !== null && customPageContext !== void 0 ? customPageContext : this.page;
182
+ return Promise.all([...new Array(times)].map(() => pageContext.waitForResponse((response) => {
183
+ var _a, _b, _c;
184
+ if (response.request().resourceType() === "xhr" &&
185
+ response.status() === 200 &&
186
+ response.url().includes(responseUrl) &&
187
+ response
188
+ .url()
189
+ .startsWith((_a = baseUrl !== null && baseUrl !== void 0 ? baseUrl : process.env.BASE_URL) !== null && _a !== void 0 ? _a : "") &&
190
+ !this.responses.includes((_b = response.headers()) === null || _b === void 0 ? void 0 : _b["x-request-id"])) {
191
+ this.responses.push((_c = response.headers()) === null || _c === void 0 ? void 0 : _c["x-request-id"]);
192
+ return true;
193
+ }
194
+ return false;
195
+ }, { timeout })));
196
+ };
192
197
  this.recursiveMethod = async (callback, condition, timeout, startTime) => {
193
198
  if (Date.now() - timeout >= startTime) {
194
199
  return false;
@@ -7161,10 +7166,14 @@ const i18nFixture = {
7161
7166
  };
7162
7167
 
7163
7168
  const BASE_URL = "/api/v1";
7169
+ const NEETO_AUTH_BASE_URL = (subdomain = "app") => `https://${subdomain}.neetoauth.net`;
7164
7170
  const ROUTES = {
7165
- neetoAuth: "https://app.neetoauth.net",
7166
- neetoAuthSignup: "https://app.neetoauth.net/signups/new",
7171
+ neetoAuthSignup: `${NEETO_AUTH_BASE_URL()}/signups/new`,
7172
+ neetoAuth: NEETO_AUTH_BASE_URL(),
7173
+ loginLink: "/login",
7167
7174
  profile: "/profile",
7175
+ myProfile: "/my/profile",
7176
+ authSettings: "/settings",
7168
7177
  login: `${BASE_URL}/login`,
7169
7178
  signup: `${BASE_URL}/signups`,
7170
7179
  subdomainAvailability: `${BASE_URL}/subdomain_availability`,
@@ -7178,6 +7187,256 @@ const ROUTES = {
7178
7187
  },
7179
7188
  };
7180
7189
 
7190
+ const CHAT_WIDGET_TEXTS = {
7191
+ newConversation: "New Conversation",
7192
+ welcomeChatBubble: "Hi! I'm here to assist you with any questions you may have. What can I do for you?",
7193
+ };
7194
+
7195
+ const HELP_CENTER_SELECTORS = {
7196
+ helpButton: "help-button",
7197
+ documentationButton: "help-link-help-center-button",
7198
+ keyboardShortcutButton: "help-link-keyboard-shortcut-button",
7199
+ chatButton: "help-link-live-chat-button",
7200
+ whatsNewButton: "help-link-changelog-button",
7201
+ whatsNewWidgetInfo: "h1",
7202
+ whatsNewWidgetCloseButton: ".nc-widget-header__btn",
7203
+ keyboardShortcutPaneHeading: "keyboard-shortcuts-pane-title",
7204
+ keyboardShortcutPaneCrossIcon: "keyboard-shortcuts-pane-close-button",
7205
+ };
7206
+
7207
+ const PROFILE_SECTION_SELECTORS = {
7208
+ profileSectionButton: "profile-section",
7209
+ myProfileButton: "my-profile-button",
7210
+ profileOrganizationSettingsButton: "profile-organization-settings-button",
7211
+ logoutButton: "profile-logout-button",
7212
+ };
7213
+
7214
+ const CHAT_WIDGET_SELECTORS = {
7215
+ iframe: "#neetochat-iframe",
7216
+ spinner: ".neeto-chat-widget-spinner",
7217
+ helpButton: "help-button",
7218
+ preChatEmailInput: "neeto-chat-widget-input",
7219
+ preChatSubmitButton: "neeto-chat-widget-pre-chat-submit-btn",
7220
+ chatBubble: "neeto-chat-widget-chat-message-bubble",
7221
+ closeChat: "neeto-chat-widget-close-btn",
7222
+ };
7223
+ const CHANGELOG_WIDGET_SELECTORS = {
7224
+ changelogWrapper: ".nc-widget__wrapper",
7225
+ closeButton: "nc-widget-close-btn",
7226
+ publicUrlLink: "nc-widget-public-url",
7227
+ };
7228
+ const KEYBOARD_SHORTCUTS_SELECTORS = {
7229
+ keyboardShortcutsPane: "keyboard-shortcuts-pane",
7230
+ closePaneButton: "keyboard-shortcuts-pane-close-button",
7231
+ hotKeyItem: "hotkey-item",
7232
+ };
7233
+
7234
+ /* eslint-disable playwright/require-top-level-describe */
7235
+ class HelpAndProfilePage {
7236
+ constructor({ page, neetoPlaywrightUtilities, chatApiBaseURL, kbDocsBaseURL, changelogBaseURL, }) {
7237
+ this.openHelpCenter = async () => {
7238
+ await test.expect(async () => {
7239
+ const helpButton = this.page.getByTestId(CHAT_WIDGET_SELECTORS.helpButton);
7240
+ await helpButton.scrollIntoViewIfNeeded();
7241
+ await helpButton.hover();
7242
+ await test.expect(this.page.getByTestId(HELP_CENTER_SELECTORS.chatButton)).toBeVisible();
7243
+ }).toPass({ timeout: 15000 });
7244
+ };
7245
+ this.openLiveChatAndVerify = async () => {
7246
+ await this.page.getByTestId(HELP_CENTER_SELECTORS.chatButton).click();
7247
+ await test.expect(this.neetoChatWidget).toBeVisible();
7248
+ await test.expect(this.neetoChatSpinner).toBeHidden();
7249
+ };
7250
+ this.openAndVerifyChatWidget = async () => {
7251
+ await this.neetoPlaywrightUtilities.interceptMultipleResponses({
7252
+ baseUrl: this.chatApiBaseURL,
7253
+ times: 3,
7254
+ });
7255
+ await test.test.step("Step 1: Open Help Center links", this.openHelpCenter);
7256
+ await test.test.step("Step 2: Open live chat and verify iframe", this.openLiveChatAndVerify);
7257
+ await test.test.step("Step 3: Close and reopen live chat frame", async () => {
7258
+ await this.page.getByTestId(CHAT_WIDGET_SELECTORS.closeChat).click();
7259
+ await test.expect(this.neetoChatWidget).toBeHidden();
7260
+ await this.openHelpCenter();
7261
+ await this.openLiveChatAndVerify();
7262
+ });
7263
+ await test.test.step("Step 4: Start new conversation", async () => {
7264
+ const newConversationButton = this.neetoChatFrame.getByRole("button", {
7265
+ name: CHAT_WIDGET_TEXTS.newConversation,
7266
+ });
7267
+ await test.expect(newConversationButton).toBeVisible(); // Adding additional toBeVisible to take advantage of the auto-retrying web-first assertion
7268
+ await newConversationButton.click();
7269
+ await test.expect(this.neetoChatSpinner).toBeHidden();
7270
+ });
7271
+ await test.test.step("Step 5: Fill and submit email", async () => {
7272
+ var _a, _b;
7273
+ await this.neetoChatFrame
7274
+ .getByTestId(CHAT_WIDGET_SELECTORS.preChatEmailInput)
7275
+ .fill((_b = (_a = readFileSyncIfExists()) === null || _a === void 0 ? void 0 : _a.user) === null || _b === void 0 ? void 0 : _b.email);
7276
+ await this.neetoChatFrame
7277
+ .getByTestId(CHAT_WIDGET_SELECTORS.preChatSubmitButton)
7278
+ .getByRole("button")
7279
+ .click();
7280
+ await test.expect(this.neetoChatSpinner).toBeHidden();
7281
+ });
7282
+ await test.test.step("Step 6: Verify conversation window", async () => {
7283
+ await test.expect(this.neetoChatFrame.getByTestId(CHAT_WIDGET_SELECTORS.chatBubble)).toHaveText(CHAT_WIDGET_TEXTS.welcomeChatBubble);
7284
+ });
7285
+ };
7286
+ this.openAndVerifyHelpArticles = async () => {
7287
+ await test.test.step("Step 1: Open Help Center links", this.openHelpCenter);
7288
+ await test.test.step("Step 2: Open and verify help articles link", async () => {
7289
+ const helpArticlesPromise = this.page.waitForEvent("popup");
7290
+ await this.page
7291
+ .getByTestId(HELP_CENTER_SELECTORS.documentationButton)
7292
+ .click();
7293
+ const helpArticlesPage = await helpArticlesPromise;
7294
+ await helpArticlesPage.waitForLoadState();
7295
+ await test.expect(helpArticlesPage).toHaveURL(this.kbDocsBaseURL);
7296
+ await helpArticlesPage.close();
7297
+ });
7298
+ };
7299
+ this.openChangelogPane = async () => {
7300
+ await this.page.getByTestId(HELP_CENTER_SELECTORS.whatsNewButton).click();
7301
+ await test.expect(this.page.locator(CHANGELOG_WIDGET_SELECTORS.changelogWrapper)).toBeVisible();
7302
+ };
7303
+ this.openAndVerifyChangelog = async () => {
7304
+ await test.test.step("Step 1: Open Help Center links", this.openHelpCenter);
7305
+ await test.test.step("Step 2: Open and verify changelog pane", this.openChangelogPane);
7306
+ await test.test.step("Step 3: Close and reopen changelog pane", async () => {
7307
+ await this.page
7308
+ .getByTestId(CHANGELOG_WIDGET_SELECTORS.closeButton)
7309
+ .click();
7310
+ await test.expect(this.page.locator(CHANGELOG_WIDGET_SELECTORS.changelogWrapper)).toBeHidden();
7311
+ await this.openHelpCenter();
7312
+ await this.openChangelogPane();
7313
+ });
7314
+ await test.test.step("Step 4: Open and verify public URL", async () => {
7315
+ const changelogPagePromise = this.page.waitForEvent("popup");
7316
+ await this.page
7317
+ .getByTestId(CHANGELOG_WIDGET_SELECTORS.publicUrlLink)
7318
+ .click();
7319
+ const changelogPage = await changelogPagePromise;
7320
+ await this.neetoPlaywrightUtilities.interceptMultipleResponses({
7321
+ customPageContext: changelogPage,
7322
+ baseUrl: this.changelogBaseURL.split("/site")[0],
7323
+ times: 3,
7324
+ });
7325
+ await test.expect(changelogPage).toHaveURL(this.changelogBaseURL);
7326
+ await changelogPage.close();
7327
+ });
7328
+ };
7329
+ this.formatKeyboardShortcut = (shortcut, osPlatform = "windows") => {
7330
+ const formattedShortcut = shortcut
7331
+ .replaceAll(" ", "then")
7332
+ .replaceAll("+", "");
7333
+ return osPlatform === "mac"
7334
+ ? formattedShortcut.replace(/ctrl/g, "⌘")
7335
+ : formattedShortcut;
7336
+ };
7337
+ this.openAndVerifyKeyboardShortcutsPane = async (productShortcuts, osPlatform = "windows") => {
7338
+ const globalShortcuts = [
7339
+ {
7340
+ description: this.t("neetoMolecules.keyboardShortcuts.global.openKeyboardShortcutsPane"),
7341
+ sequence: "shift+/",
7342
+ },
7343
+ {
7344
+ description: this.t("neetoMolecules.keyboardShortcuts.global.close"),
7345
+ sequence: "esc",
7346
+ },
7347
+ {
7348
+ description: this.t("neetoMolecules.keyboardShortcuts.global.submitForm"),
7349
+ sequence: "ctrl+enter",
7350
+ },
7351
+ ];
7352
+ const shortcuts = [...globalShortcuts, ...productShortcuts];
7353
+ await test.test.step("Step 1: Open Help Center", this.openHelpCenter);
7354
+ await test.test.step("Step 2: Open and close keyboard shortcuts from UI", async () => {
7355
+ await this.page
7356
+ .getByTestId(HELP_CENTER_SELECTORS.keyboardShortcutButton)
7357
+ .click();
7358
+ await test.expect(this.page.getByTestId(KEYBOARD_SHORTCUTS_SELECTORS.keyboardShortcutsPane)).not.toHaveCSS("width", "1px");
7359
+ await this.page
7360
+ .getByTestId(KEYBOARD_SHORTCUTS_SELECTORS.closePaneButton)
7361
+ .click();
7362
+ await test.expect(this.page.getByTestId(KEYBOARD_SHORTCUTS_SELECTORS.keyboardShortcutsPane)).toHaveCSS("width", "1px");
7363
+ });
7364
+ await test.test.step("Step 3: Open and close keyboard shortcuts through shortcut", async () => {
7365
+ await this.page.keyboard.press("Shift+/");
7366
+ await test.expect(this.page.getByTestId(KEYBOARD_SHORTCUTS_SELECTORS.keyboardShortcutsPane)).not.toHaveCSS("width", "1px");
7367
+ await this.page.keyboard.press("Escape");
7368
+ await test.expect(this.page.getByTestId(KEYBOARD_SHORTCUTS_SELECTORS.keyboardShortcutsPane)).toHaveCSS("width", "1px");
7369
+ });
7370
+ await test.test.step("Step 4: Verify all displayed keyboard shortcuts", async () => {
7371
+ await this.page.keyboard.press("Shift+/");
7372
+ await test.expect(this.page.getByTestId(KEYBOARD_SHORTCUTS_SELECTORS.keyboardShortcutsPane)).not.toHaveCSS("width", "1px");
7373
+ await test.expect(this.page
7374
+ .getByTestId(KEYBOARD_SHORTCUTS_SELECTORS.hotKeyItem)
7375
+ .locator("p")).toHaveText(shortcuts.map(shortcut => shortcut.description));
7376
+ const formattedSequences = shortcuts.map(shortcut => this.formatKeyboardShortcut(shortcut.sequence, osPlatform));
7377
+ await test.expect(this.page
7378
+ .getByTestId(KEYBOARD_SHORTCUTS_SELECTORS.hotKeyItem)
7379
+ .locator("div")).toHaveText(formattedSequences);
7380
+ });
7381
+ };
7382
+ this.openAppSwitcherAndVerify = async () => {
7383
+ const appSwitcher = this.page.getByTestId(COMMON_SELECTORS.appSwitcherButton);
7384
+ await test.test.step("Step 1: Verify hovering over app switcher opens the app switcher drawer", () => test.expect(async () => {
7385
+ await appSwitcher.scrollIntoViewIfNeeded();
7386
+ await appSwitcher.hover();
7387
+ await test.expect(this.page.getByTestId(COMMON_SELECTORS.appSwitcherWrapper)).toBeVisible();
7388
+ }).toPass({ timeout: 15000 }));
7389
+ };
7390
+ this.openProfilePopup = () => test.expect(async () => {
7391
+ await this.profileSectionButton.scrollIntoViewIfNeeded();
7392
+ await this.profileSectionButton.hover();
7393
+ await test.expect(this.profileSectionButton).toBeVisible();
7394
+ }).toPass({ timeout: 15000 });
7395
+ this.openAuthLinkAndVerify = async ({ linkSelector, redirectLink, }) => {
7396
+ var _a, _b;
7397
+ const profilePagePromise = this.page.waitForEvent("popup");
7398
+ await this.page.getByTestId(linkSelector).click();
7399
+ const profilePage = await profilePagePromise;
7400
+ await profilePage.waitForLoadState();
7401
+ await test.expect(profilePage).toHaveURL(new RegExp(NEETO_AUTH_BASE_URL((_b = (_a = readFileSyncIfExists()) === null || _a === void 0 ? void 0 : _a.user) === null || _b === void 0 ? void 0 : _b.subdomainName)));
7402
+ await test.expect(profilePage).toHaveURL(new RegExp(redirectLink));
7403
+ await profilePage.close();
7404
+ };
7405
+ this.verifyProfileAndOrganizationLinks = async () => {
7406
+ await test.test.step("Step 1: Open Profile popup and verify", this.openProfilePopup);
7407
+ await test.test.step("Step 2: Open My profile link and verify", async () => this.openAuthLinkAndVerify({
7408
+ linkSelector: PROFILE_SECTION_SELECTORS.myProfileButton,
7409
+ redirectLink: ROUTES.myProfile,
7410
+ }));
7411
+ await test.test.step("Step 3: Open Profile popup and verify", this.openProfilePopup);
7412
+ await test.test.step("Step 4: Open My organization link and verify", async () => this.openAuthLinkAndVerify({
7413
+ linkSelector: PROFILE_SECTION_SELECTORS.profileOrganizationSettingsButton,
7414
+ redirectLink: ROUTES.authSettings,
7415
+ }));
7416
+ };
7417
+ this.verifyLogout = async () => {
7418
+ await test.test.step("Step 1: Open Profile popup and verify", this.openProfilePopup);
7419
+ await test.test.step("Step 2: Click logout and verify", async () => {
7420
+ await this.page
7421
+ .getByTestId(PROFILE_SECTION_SELECTORS.logoutButton)
7422
+ .click();
7423
+ await test.expect(this.page).toHaveURL(NEETO_AUTH_BASE_URL());
7424
+ await test.expect(this.page).toHaveURL(new RegExp(ROUTES.loginLink));
7425
+ });
7426
+ };
7427
+ this.page = page;
7428
+ this.neetoPlaywrightUtilities = neetoPlaywrightUtilities;
7429
+ this.chatApiBaseURL = chatApiBaseURL;
7430
+ this.kbDocsBaseURL = kbDocsBaseURL;
7431
+ this.changelogBaseURL = changelogBaseURL;
7432
+ this.neetoChatWidget = this.page.locator(CHAT_WIDGET_SELECTORS.iframe);
7433
+ this.neetoChatFrame = this.neetoChatWidget.frameLocator(":scope"); // Converting locator to a framelocator
7434
+ this.neetoChatSpinner = this.neetoChatFrame.locator(CHAT_WIDGET_SELECTORS.spinner);
7435
+ this.profileSectionButton = this.page.getByTestId(PROFILE_SECTION_SELECTORS.profileSectionButton);
7436
+ this.t = playwrightI18nextFixture.getI18nInstance().t;
7437
+ }
7438
+ }
7439
+
7181
7440
  const SIGNUP_SELECTORS = {
7182
7441
  emailTextField: "signup-email-text-field",
7183
7442
  firstNameTextField: "signup-profile-first-name-text-field",
@@ -7213,7 +7472,7 @@ class OrganizationPage {
7213
7472
  await this.page.getByTestId(SIGNUP_SELECTORS.emailTextField).fill(email);
7214
7473
  const signup = this.neetoPlaywrightUtilities.interceptMultipleResponses({
7215
7474
  responseUrl: ROUTES.signup,
7216
- baseUrl: ROUTES.neetoAuth,
7475
+ baseUrl: NEETO_AUTH_BASE_URL(),
7217
7476
  });
7218
7477
  await this.page.getByTestId(SIGNUP_SELECTORS.submitButton).click();
7219
7478
  await signup;
@@ -7248,7 +7507,7 @@ class OrganizationPage {
7248
7507
  await this.page.getByTestId(COMMON_SELECTORS.checkbox).click();
7249
7508
  const submitProfile = this.neetoPlaywrightUtilities.interceptMultipleResponses({
7250
7509
  responseUrl: ROUTES.signup,
7251
- baseUrl: ROUTES.neetoAuth,
7510
+ baseUrl: NEETO_AUTH_BASE_URL(),
7252
7511
  });
7253
7512
  await this.page.getByTestId(SIGNUP_SELECTORS.profileSubmitButton).click();
7254
7513
  await submitProfile;
@@ -7311,6 +7570,11 @@ class OrganizationPage {
7311
7570
  }
7312
7571
  }
7313
7572
 
7573
+ const USER_AGENTS = {
7574
+ windows: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36",
7575
+ mac: "Mozilla/5.0 (Macintosh; Intel Mac OS X 14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
7576
+ };
7577
+
7314
7578
  const NEETO_EDITOR_SELECTORS = {
7315
7579
  boldOption: "neeto-editor-fixed-menu-bold-option",
7316
7580
  italicOption: "neeto-editor-fixed-menu-italic-option",
@@ -7348,25 +7612,6 @@ const NEETO_FILTERS_SELECTORS = {
7348
7612
  paneModalCrossIcon: "neeto-filters-close-button",
7349
7613
  };
7350
7614
 
7351
- const HELP_CENTER_SELECTORS = {
7352
- helpButton: "help-button",
7353
- documentationButton: "help-link-help-center-button",
7354
- keyboardShortcutButton: "help-link-keyboard-shortcut-button",
7355
- chatButton: "help-link-live-chat-button",
7356
- whatsNewButton: "help-link-changelog-button",
7357
- whatsNewWidgetInfo: "h1",
7358
- whatsNewWidgetCloseButton: ".nc-widget-header__btn",
7359
- keyboardShortcutPaneHeading: "keyboard-shortcuts-pane-title",
7360
- keyboardShortcutPaneCrossIcon: "keyboard-shortcuts-pane-close-button",
7361
- };
7362
- const CHAT_WIDGET_SELECTORS = {
7363
- chatWidgetHomeCard: "neeto-chat-widget-cta-title",
7364
- widgetSubmitButton: "neeto-chat-widget-pre-chat-submit-btn",
7365
- chatBubbleMessage: "neeto-chat-widget-chat-message-bubble",
7366
- chatCloseButton: ".neeto-chat-widget-icon--close",
7367
- widgetIframe: "#neetochat-iframe",
7368
- };
7369
-
7370
7615
  const LOGIN_SELECTORS = {
7371
7616
  appleAuthenticationButton: "apple-authentication-button",
7372
7617
  emailTextField: "login-email-text-field",
@@ -7969,8 +8214,9 @@ main.expand = expand;
7969
8214
 
7970
8215
  // @ts-check
7971
8216
  var _a, _b;
8217
+ process.env.TEST_ENV = (_a = process.env.TEST_ENV) !== null && _a !== void 0 ? _a : ENVIRONMENT.development;
7972
8218
  const env = main$2.exports.config({
7973
- path: `./e2e/config/.env.${(_a = process.env.TEST_ENV) !== null && _a !== void 0 ? _a : "development"}`,
8219
+ path: `./e2e/config/.env.${process.env.TEST_ENV}`,
7974
8220
  });
7975
8221
  main.expand(env);
7976
8222
  if (require$$0__namespace.existsSync("./e2e/config/.env.local")) {
@@ -8025,6 +8271,7 @@ const definePlaywrightConfig = (overrides) => {
8025
8271
  };
8026
8272
 
8027
8273
  exports.BASE_URL = BASE_URL;
8274
+ exports.CHANGELOG_WIDGET_SELECTORS = CHANGELOG_WIDGET_SELECTORS;
8028
8275
  exports.CHAT_WIDGET_SELECTORS = CHAT_WIDGET_SELECTORS;
8029
8276
  exports.COMMON_SELECTORS = COMMON_SELECTORS;
8030
8277
  exports.CREDENTIALS = CREDENTIALS;
@@ -8032,22 +8279,27 @@ exports.CustomCommands = CustomCommands;
8032
8279
  exports.ENVIRONMENT = ENVIRONMENT;
8033
8280
  exports.GLOBAL_TRANSLATIONS_PATTERN = GLOBAL_TRANSLATIONS_PATTERN;
8034
8281
  exports.HELP_CENTER_SELECTORS = HELP_CENTER_SELECTORS;
8282
+ exports.HelpAndProfilePage = HelpAndProfilePage;
8035
8283
  exports.IS_STAGING_ENV = IS_STAGING_ENV;
8284
+ exports.KEYBOARD_SHORTCUTS_SELECTORS = KEYBOARD_SHORTCUTS_SELECTORS;
8036
8285
  exports.LOGIN_SELECTORS = LOGIN_SELECTORS;
8037
8286
  exports.MEMBER_FORM_SELECTORS = MEMBER_FORM_SELECTORS;
8038
8287
  exports.MEMBER_SELECTORS = MEMBER_SELECTORS;
8039
8288
  exports.MERGE_TAGS_SELECTORS = MERGE_TAGS_SELECTORS;
8040
8289
  exports.MailosaurUtils = MailosaurUtils;
8290
+ exports.NEETO_AUTH_BASE_URL = NEETO_AUTH_BASE_URL;
8041
8291
  exports.NEETO_EDITOR_SELECTORS = NEETO_EDITOR_SELECTORS;
8042
8292
  exports.NEETO_FILTERS_SELECTORS = NEETO_FILTERS_SELECTORS;
8043
8293
  exports.OTP_EMAIL_PATTERN = OTP_EMAIL_PATTERN;
8044
8294
  exports.OrganizationPage = OrganizationPage;
8295
+ exports.PROFILE_SECTION_SELECTORS = PROFILE_SECTION_SELECTORS;
8045
8296
  exports.PROJECT_TRANSLATIONS_PATH = PROJECT_TRANSLATIONS_PATH;
8046
8297
  exports.ROLES_SELECTORS = ROLES_SELECTORS;
8047
8298
  exports.ROUTES = ROUTES;
8048
8299
  exports.SIGNUP_SELECTORS = SIGNUP_SELECTORS;
8049
8300
  exports.STORAGE_STATE = STORAGE_STATE;
8050
8301
  exports.TAGS_SELECTORS = TAGS_SELECTORS;
8302
+ exports.USER_AGENTS = USER_AGENTS;
8051
8303
  exports.clearCredentials = clearCredentials;
8052
8304
  exports.commands = commands;
8053
8305
  exports.definePlaywrightConfig = definePlaywrightConfig;