@camunda/e2e-test-suite 0.0.563 → 0.0.565

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.
@@ -260,6 +260,10 @@ class AppsPage {
260
260
  await (0, test_1.expect)(this.consoleLink).toBeVisible({ timeout: 30000 });
261
261
  await this.consoleLink.click();
262
262
  }
263
+ // Console may land on the root URL first and then redirect to the
264
+ // org-specific URL (/org/<uuid>/...) before the header banner renders.
265
+ // Wait for that redirect so callers can immediately assert page elements.
266
+ await this.page.waitForURL(/\/org\//, { timeout: 90000 }).catch(() => { });
263
267
  return;
264
268
  }
265
269
  catch (error) {
@@ -378,9 +378,9 @@ class ClusterDetailsPage {
378
378
  async assertComponentsHealth(components = ['Zeebe', 'Tasklist', 'Operate', 'Optimize']) {
379
379
  for (const component of components) {
380
380
  await (0, expectLocatorWithRetry_1.expectLocatorWithRetry)(this.page, this.page.getByText(`${component}Healthy`, { exact: true }), {
381
- visibilityTimeout: 60000,
382
- totalTimeout: 400000,
383
- maxRetries: 7,
381
+ visibilityTimeout: 120000,
382
+ totalTimeout: 600000,
383
+ maxRetries: 10,
384
384
  preAction: async () => {
385
385
  await this.page.reload();
386
386
  },
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ClusterSecretsPage = void 0;
4
4
  const test_1 = require("@playwright/test");
5
+ const sleep_1 = require("../../utils/sleep");
5
6
  class ClusterSecretsPage {
6
7
  page;
7
8
  createNewSecretButton;
@@ -101,6 +102,16 @@ class ClusterSecretsPage {
101
102
  }
102
103
  }
103
104
  async clickClusterBanner() {
105
+ try {
106
+ const blockingModal = this.page.locator('.cds--modal.is-visible');
107
+ if ((await blockingModal.count()) > 0) {
108
+ await this.page.keyboard.press('Escape');
109
+ await (0, sleep_1.sleep)(1000);
110
+ }
111
+ }
112
+ catch (_e) {
113
+ // no blocking modal to dismiss
114
+ }
104
115
  await (0, test_1.expect)(this.clusterBanner).toBeVisible({ timeout: 30000 });
105
116
  await this.clusterBanner.click({ timeout: 60000 });
106
117
  }
@@ -203,7 +203,17 @@ class ConsoleOrganizationPage {
203
203
  });
204
204
  }
205
205
  async clickOptionsButton() {
206
- await this.optionsButton.click({ timeout: 90000 });
206
+ const dataRow = this.rows.nth(1);
207
+ await dataRow.hover({ timeout: 30000 }).catch(() => { });
208
+ // Try scoped click first; fall back to page-level with force
209
+ try {
210
+ await dataRow
211
+ .getByRole('button', { name: 'Options' })
212
+ .click({ timeout: 30000 });
213
+ }
214
+ catch (_e) {
215
+ await this.optionsButton.first().click({ force: true, timeout: 60000 });
216
+ }
207
217
  }
208
218
  async clickEditUserMenuItem() {
209
219
  await this.editUserMenuItem.click({ timeout: 60000 });
@@ -461,6 +471,13 @@ class ConsoleOrganizationPage {
461
471
  await (0, test_1.expect)(this.filterTableSearchbox).toBeVisible({ timeout: 120000 });
462
472
  await this.filterTableSearchbox.click({ timeout: 60000 });
463
473
  await this.filterTableSearchbox.fill(name);
474
+ await this.page
475
+ .waitForLoadState('networkidle', { timeout: 30000 })
476
+ .catch(() => { });
477
+ // Wait for at least one data row to appear after filtering
478
+ await (0, test_1.expect)(this.rows.nth(1))
479
+ .toBeVisible({ timeout: 30000 })
480
+ .catch(() => { });
464
481
  }
465
482
  }
466
483
  async clickAssignSubButton() {
@@ -60,14 +60,27 @@ class LoginPage {
60
60
  }
61
61
  async loginWithTestUser(credentials = {}) {
62
62
  const { username = process.env.C8_USERNAME_TEST, password = process.env.C8_PASSWORD_TEST, } = credentials;
63
- // Navigate to app root to trigger auth redirect. The Console app (at
64
- // console.* hostnames) embeds a hidden invite-user email input also labeled
65
- // "Email address" that would otherwise satisfy the locator below before the
66
- // auth0 redirect has had a chance to complete.
63
+ // Navigate to app root to start the auth flow.
67
64
  await this.page.goto('/');
68
- await this.page
69
- .waitForURL((url) => !url.hostname.includes('console'), { timeout: 60000 })
70
- .catch(() => { });
65
+ // SSO re-auth may silently log us back in as the previous user after
66
+ // logout/session-reset, keeping the page on Console instead of redirecting
67
+ // to the Auth0 login form. Detect Console (settings button visible) and
68
+ // force logout until the Auth0 email input appears.
69
+ const settingsBtn = this.page.getByLabel('Open Settings');
70
+ const logoutBtn = this.page.getByRole('button', { name: 'Log out' });
71
+ for (let i = 0; i < 3; i++) {
72
+ const onAuth0 = await this.usernameInput
73
+ .waitFor({ state: 'visible', timeout: 15000 })
74
+ .then(() => true)
75
+ .catch(() => false);
76
+ if (onAuth0)
77
+ break;
78
+ if (await settingsBtn.isVisible({ timeout: 3000 })) {
79
+ await settingsBtn.click({ timeout: 30000 });
80
+ await logoutBtn.click({ timeout: 30000 });
81
+ await this.page.waitForLoadState('domcontentloaded', { timeout: 30000 });
82
+ }
83
+ }
71
84
  await (0, test_1.expect)(this.usernameInput).toBeVisible({ timeout: 120000 });
72
85
  await this.fillUsername(username);
73
86
  await this.clickContinueButton();
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ModelerCreatePage = void 0;
4
4
  const test_1 = require("@playwright/test");
5
5
  const sleep_1 = require("../../utils/sleep");
6
- const ConnectorMarketplacePage_1 = require("../8.8/ConnectorMarketplacePage");
7
6
  class ModelerCreatePage {
8
7
  page;
9
8
  generalPanel;
@@ -708,29 +707,55 @@ class ModelerCreatePage {
708
707
  }
709
708
  async clickPublicHolidayConnectorOption() {
710
709
  const maxRetries = 4;
711
- for (let retries = 0; retries < maxRetries; retries++) {
712
- try {
713
- if (retries <= 2) {
714
- await this.publicHolidayConnectorOption.click({ timeout: 60000 });
715
- }
716
- else {
717
- await this.clickMarketPlaceButton();
718
- const connectorMarketplacePage = new ConnectorMarketplacePage_1.ConnectorMarketplacePage(this.page);
719
- await connectorMarketplacePage.clickSearchForConnectorTextbox();
720
- await connectorMarketplacePage.fillSearchForConnectorTextbox('Public Holiday Connector');
710
+ const setupModelerState = async () => {
711
+ // Navigate back from marketplace (full-page nav in 8.7) if needed
712
+ const onModeler = await this.page
713
+ .locator('[data-test="modeler"]')
714
+ .waitFor({ state: 'visible', timeout: 5000 })
715
+ .then(() => true)
716
+ .catch(() => false);
717
+ if (!onModeler) {
718
+ await this.page.keyboard.press('Escape');
719
+ await this.page.waitForTimeout(2000);
720
+ const afterEscape = await this.page
721
+ .locator('[data-test="modeler"]')
722
+ .waitFor({ state: 'visible', timeout: 3000 })
723
+ .then(() => true)
724
+ .catch(() => false);
725
+ if (!afterEscape) {
726
+ await this.page.goBack();
721
727
  await this.page.waitForTimeout(5000);
722
- await connectorMarketplacePage.downloadConnectorToProject();
723
- await this.publicHolidayConnectorOption.click({ timeout: 120000 });
724
728
  }
729
+ await this.page.reload();
730
+ await this.page.waitForTimeout(5000);
731
+ }
732
+ await this.clickCanvas();
733
+ await this.secondElement.click({ timeout: 60000 });
734
+ await this.clickChangeTypeButton();
735
+ // Wait for change-type panel to be fully loaded before clicking connector
736
+ await (0, test_1.expect)(this.marketPlaceButton).toBeVisible({ timeout: 60000 });
737
+ };
738
+ for (let retries = 0; retries < maxRetries; retries++) {
739
+ try {
740
+ await setupModelerState();
741
+ await this.publicHolidayConnectorOption.click({ timeout: 120000 });
725
742
  return;
726
743
  }
727
744
  catch (error) {
728
745
  console.error(`Click attempt ${retries + 1} failed: ${error}`);
746
+ if (retries >= maxRetries - 1)
747
+ break;
748
+ const onModeler = await this.page
749
+ .locator('[data-test="modeler"]')
750
+ .waitFor({ state: 'visible', timeout: 3000 })
751
+ .then(() => true)
752
+ .catch(() => false);
753
+ if (!onModeler) {
754
+ await this.page.goBack();
755
+ await this.page.waitForTimeout(3000);
756
+ }
729
757
  await this.page.reload();
730
758
  await this.page.waitForTimeout(5000);
731
- await this.clickCanvas();
732
- await this.secondElement.click({ timeout: 60000 });
733
- await this.clickChangeTypeButton();
734
759
  }
735
760
  }
736
761
  throw new Error(`Failed to click the public holiday connector after ${maxRetries} attempts.`);
@@ -78,7 +78,18 @@ class ModelerHomePage {
78
78
  });
79
79
  }
80
80
  async clickCreateNewProjectButton() {
81
- await this.createNewProjectButton.click({ timeout: 90000 });
81
+ // Wait for any top-bar survey/banner overlay to clear before clicking
82
+ await this.page
83
+ .locator('[data-test="top-bar"]')
84
+ .waitFor({ state: 'hidden', timeout: 10000 })
85
+ .catch(() => { });
86
+ try {
87
+ await this.createNewProjectButton.click({ timeout: 30000 });
88
+ }
89
+ catch {
90
+ // Overlay still present — force the click through
91
+ await this.createNewProjectButton.click({ force: true, timeout: 30000 });
92
+ }
82
93
  }
83
94
  async enterNewProjectName(name) {
84
95
  await this.projectNameInput.click({ timeout: 60000 });
@@ -143,7 +154,14 @@ class ModelerHomePage {
143
154
  await this.diagramTypeDropdown.click({ timeout: 120000 });
144
155
  }
145
156
  async clickBpmnTemplateOption() {
146
- await this.bpmnTemplateOption.click({ timeout: 120000 });
157
+ try {
158
+ await this.bpmnTemplateOption.click({ timeout: 120000 });
159
+ }
160
+ catch {
161
+ // Element may be detaching during re-render; wait briefly then force-click
162
+ await this.page.waitForTimeout(3000);
163
+ await this.bpmnTemplateOption.click({ force: true, timeout: 60000 });
164
+ }
147
165
  }
148
166
  async clickIdpApplicationTemplateOption() {
149
167
  await this.idpTemplateOption.click({ timeout: 120000 });
@@ -206,14 +224,28 @@ class ModelerHomePage {
206
224
  await this.optionsButton.click({ timeout: 30000 });
207
225
  for (let i = 0; i < retries; i++) {
208
226
  try {
209
- await this.manageButton.click({ timeout: 30000 });
210
- return; // Click succeeded, exit the loop
227
+ await (0, sleep_1.sleep)(5000);
228
+ if (await this.manageButton.isVisible({ timeout: 30000 })) {
229
+ await this.manageButton.click({ timeout: 10000 });
230
+ }
231
+ else {
232
+ await this.clickOpenOrganizationsButton();
233
+ await this.optionsButton.click({ timeout: 30000 });
234
+ await (0, test_1.expect)(this.manageButton).toBeVisible({ timeout: 30000 });
235
+ await this.manageButton.click({ timeout: 30000 });
236
+ }
237
+ // Wait for the Console org management page to finish loading
238
+ await this.page
239
+ .waitForLoadState('networkidle', { timeout: 30000 })
240
+ .catch(() => { });
241
+ return;
211
242
  }
212
243
  catch (error) {
213
244
  console.error(`Attempt ${i + 1} to click manage button failed: ${error}`);
245
+ await (0, sleep_1.sleep)(10000);
214
246
  }
215
247
  }
216
- throw new Error(`Failed to click deploy button after ${retries} retries`);
248
+ throw new Error(`Failed to click manage button after ${retries} retries`);
217
249
  }
218
250
  async clickUploadFilesButton() {
219
251
  await this.uploadFilesButton.click({ timeout: 60000 });
@@ -45,12 +45,10 @@ class PlayPage {
45
45
  let attempts = 0;
46
46
  while (attempts < maxRetries) {
47
47
  try {
48
- await (0, test_1.expect)(this.page.getByText(/process instance key/i)).toBeVisible({
49
- timeout: maxWaitTimeSeconds,
50
- });
51
- await (0, test_1.expect)(this.page.getByText(/This process instance has no variables/i)).toBeVisible({
52
- timeout: maxWaitTimeSeconds,
53
- });
48
+ await (0, test_1.expect)(this.page.getByText(/process instance key|instance key/i).first()).toBeVisible({ timeout: maxWaitTimeSeconds });
49
+ await (0, test_1.expect)(this.page
50
+ .getByText(/This process instance has no variables|No variables/i)
51
+ .first()).toBeVisible({ timeout: maxWaitTimeSeconds });
54
52
  return;
55
53
  }
56
54
  catch (error) {
@@ -13,12 +13,15 @@ class SettingsPage {
13
13
  async clickOpenSettingsButton(retries = 3) {
14
14
  for (let i = 0; i < retries; i++) {
15
15
  try {
16
- await this.openSettingsButton.click({ timeout: 180000 });
16
+ await this.openSettingsButton.click({ timeout: 60000 });
17
17
  return; // If successful, exit the function
18
18
  }
19
19
  catch (error) {
20
20
  const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
21
- await sleep(10000);
21
+ await sleep(5000);
22
+ // If the button isn't visible, navigate to root and try again
23
+ await this.page.goto('/').catch(() => { });
24
+ await sleep(5000);
22
25
  }
23
26
  }
24
27
  throw new Error(`Failed to click button after ${retries} retries`);
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SignUpPage = void 0;
4
- const test_1 = require("@playwright/test");
5
4
  class SignUpPage {
6
5
  page;
7
6
  firstNameInput;
@@ -74,36 +73,27 @@ class SignUpPage {
74
73
  name: 'thank you for signing up for camunda',
75
74
  });
76
75
  this.runProcessRadioButton = page.getByRole('radio', { name: 'yes' });
77
- this.verifyEmailText = page.getByText('Verify your email');
76
+ this.verifyEmailText = page.getByText(/Verify your email|Check your email|Confirm your email/i);
78
77
  }
79
78
  async signupToC8(emailAddress, password) {
80
- const maxRetries = 3;
81
- for (let attempt = 0; attempt < maxRetries; attempt++) {
82
- try {
83
- await this.page.goto('https://accounts.ultrawombat.com/signup');
84
- await this.clickFirstNameInput();
85
- await this.fillFirstNameInput('QA');
86
- await this.clickLastNameInput();
87
- await this.fillLastNameInput('Camunda');
88
- await this.clickEmailInput();
89
- await this.fillEmailInput(emailAddress);
90
- await this.clickPasswordInput();
91
- await this.fillPasswordInput(password);
92
- await this.clickSignupButton();
93
- await (0, test_1.expect)(this.verifyEmailText.first()).toBeVisible({
94
- timeout: 180000,
95
- });
96
- return;
97
- }
98
- catch (error) {
99
- if (attempt < maxRetries - 1) {
100
- console.warn(`Signup attempt ${attempt + 1} failed. Retrying...`);
101
- }
102
- else {
103
- throw error;
104
- }
105
- }
79
+ await this.page.goto('https://accounts.ultrawombat.com/signup');
80
+ await this.clickFirstNameInput();
81
+ await this.fillFirstNameInput('QA');
82
+ await this.clickLastNameInput();
83
+ await this.fillLastNameInput('Camunda');
84
+ await this.clickEmailInput();
85
+ await this.fillEmailInput(emailAddress);
86
+ // Fill Company field if the form now requires it
87
+ if (await this.companyInput.isVisible({ timeout: 3000 }).catch(() => false)) {
88
+ await this.companyInput.fill('QA Camunda');
106
89
  }
90
+ await this.clickPasswordInput();
91
+ await this.fillPasswordInput(password);
92
+ await this.clickSignupButton();
93
+ // Detect completion: URL leaves /signup OR the submit button disappears.
94
+ // waitForFunction handles any Auth0 post-signup page variant.
95
+ await this.page.waitForFunction(() => window.location.pathname !== '/signup' ||
96
+ !document.querySelector('button.signUpButton'), undefined, { timeout: 180000 });
107
97
  }
108
98
  async clickFirstNameInput() {
109
99
  await this.firstNameInput.click({ timeout: 30000 });
@@ -12,21 +12,30 @@ async function loginWithRetry(page, loginPage, testUser, timeout, maxRetries = 3
12
12
  for (let attempt = 0; attempt < maxRetries; attempt++) {
13
13
  try {
14
14
  await page.goto('/');
15
- // Wait for the auth redirect to leave the Console hostname before login.
16
- // Console embeds a hidden invite-user email input also labeled "Email
17
- // address" that would otherwise satisfy the locator inside login() before
18
- // auth0 has had a chance to load.
19
- await page
20
- .waitForURL((url) => !url.hostname.includes('console'), {
21
- timeout: 60000,
22
- })
23
- .catch(() => { });
24
15
  await (0, sleep_1.sleep)(timeout);
16
+ // Always detect SSO re-auth: after a logout + clearCookies, Auth0 may
17
+ // silently log the previous user back in without showing the login form.
18
+ // Force logout until the Auth0 email input appears.
19
+ const settingsBtn = page.getByLabel('Open Settings');
20
+ const logoutBtn = page.getByRole('button', { name: 'Log out' });
21
+ for (let i = 0; i < 3; i++) {
22
+ const onAuth0 = await loginPage.usernameInput
23
+ .waitFor({ state: 'visible', timeout: 15000 })
24
+ .then(() => true)
25
+ .catch(() => false);
26
+ if (onAuth0)
27
+ break;
28
+ if (await settingsBtn.isVisible({ timeout: 3000 })) {
29
+ await settingsBtn.click({ timeout: 30000 });
30
+ await logoutBtn.click({ timeout: 30000 });
31
+ await page.waitForLoadState('domcontentloaded', { timeout: 30000 });
32
+ }
33
+ }
25
34
  if (skipOrgAssertion) {
26
35
  await loginPage.loginWithoutOrgAssertion(testUser);
27
36
  }
28
37
  else {
29
- await loginPage.login(testUser);
38
+ await loginPage.loginWithTestUser(testUser);
30
39
  }
31
40
  return;
32
41
  }
@@ -136,7 +136,7 @@ declare class ModelerCreatePage {
136
136
  clickDeploySubButton(): Promise<void>;
137
137
  clickCancelButton(): Promise<void>;
138
138
  private recoverModelerSession;
139
- clickRestConnectorOption(): Promise<void>;
139
+ clickRestConnectorOption(recoverSession?: () => Promise<void>): Promise<void>;
140
140
  clickMarketPlaceButton(): Promise<void>;
141
141
  completeDeploymentEndpointConfiguration(): Promise<void>;
142
142
  completePlayConfiguration(): Promise<void>;
@@ -615,21 +615,33 @@ class ModelerCreatePage {
615
615
  async clickCancelButton() {
616
616
  await this.cancelButton.click();
617
617
  }
618
- async recoverModelerSession() {
619
- const url = this.page.url().split('?')[0];
620
- await this.page.context().clearCookies();
621
- await this.page.goto(url, { timeout: 30000, waitUntil: 'domcontentloaded' });
622
- const username = process.env.DEMO_USER_EMAIL || 'demo';
623
- const password = process.env.DISTRO_QA_E2E_TESTS_IDENTITY_FIRSTUSER_PASSWORD || 'demo';
624
- const loginInput = this.page.locator('#username');
625
- if (await loginInput.isVisible({ timeout: 5000 }).catch(() => false)) {
626
- await loginInput.fill(username);
627
- await this.page.locator('#password').fill(password);
628
- await this.page.locator('#kc-login').click();
618
+ async recoverModelerSession(recoverSession) {
619
+ const rawUrl = this.page.url();
620
+ let url;
621
+ if (rawUrl.includes('client_id=web-modeler')) {
622
+ const match = rawUrl.match(/redirect_uri=([^&]+)/);
623
+ url = match
624
+ ? decodeURIComponent(match[1]).split('?')[0]
625
+ : rawUrl.split('?')[0];
629
626
  }
627
+ else {
628
+ url = rawUrl.split('?')[0];
629
+ }
630
+ if (recoverSession) {
631
+ // Caller-provided function handles auth + navigation (e.g. navigationPage.goToModeler).
632
+ // It retries internally; after it returns the session is valid on Modeler home.
633
+ await recoverSession();
634
+ }
635
+ // Navigate to the diagram URL directly — goToModeler lands on Modeler home, and
636
+ // after a pod restart Modeler also loses OIDC state and redirects home, so we go
637
+ // to the diagram explicitly while the session is valid.
638
+ await this.page.goto(url, {
639
+ timeout: 30000,
640
+ waitUntil: 'domcontentloaded',
641
+ });
630
642
  await (0, test_1.expect)(this.secondElement).toBeVisible({ timeout: 60000 });
631
643
  }
632
- async clickRestConnectorOption() {
644
+ async clickRestConnectorOption(recoverSession) {
633
645
  const maxRetries = 4;
634
646
  for (let retries = 0; retries < maxRetries; retries++) {
635
647
  try {
@@ -640,7 +652,7 @@ class ModelerCreatePage {
640
652
  }
641
653
  else if (retries === 1 || retries === 2) {
642
654
  // Recover session cleanly instead of page.reload()
643
- await this.recoverModelerSession();
655
+ await this.recoverModelerSession(recoverSession);
644
656
  await this.secondElement.click({ timeout: 60000 });
645
657
  await this.changeTypeButton.click({ force: true, timeout: 60000 });
646
658
  await (0, test_1.expect)(this.restConnectorOption).toBeVisible({ timeout: 90000 });
@@ -648,7 +660,7 @@ class ModelerCreatePage {
648
660
  }
649
661
  else {
650
662
  // Fourth attempt: install via marketplace (real product flow)
651
- await this.recoverModelerSession();
663
+ await this.recoverModelerSession(recoverSession);
652
664
  await this.secondElement.click({ timeout: 60000 });
653
665
  await this.changeTypeButton.click({ force: true, timeout: 60000 });
654
666
  await this.clickMarketPlaceButton();
@@ -20,9 +20,13 @@ export declare function createUserAndAssignToRole(page: Page, navigationPage: Na
20
20
  export declare function assignMappingToRole(page: Page, ocIdentityHomePage: OCIdentityHomePage, ocIdentityRolesPage: OCIdentityRolesPage, role: string, mappingRuleId: string, testMappings?: Serializable): Promise<void>;
21
21
  export declare function createAndRunProcess(page: Page, modelerHomePage: ModelerHomePage, modelerCreatePage: ModelerCreatePage, processName: string, processId?: string, tenant?: string): Promise<void>;
22
22
  export declare function completeTaskWithRetry(page: Page, taskPanelPage: TaskPanelPage, taskDetailsPage: TaskDetailsPage, taskName: string, taskPriority: string, maxRetries?: number): Promise<void>;
23
- export declare function modelRestConnector(modelerCreatePage: ModelerCreatePage, connectorSettingsPage: ConnectorSettingsPage, connectorMarketplacePage: ConnectorMarketplacePage, processName: string, url: string, auth: string, resultExpression: string, resultVariable?: string, basicAuthCredentials?: {
24
- username: string;
25
- password: string;
23
+ export declare function modelRestConnector(modelerCreatePage: ModelerCreatePage, connectorSettingsPage: ConnectorSettingsPage, connectorMarketplacePage: ConnectorMarketplacePage, processName: string, url: string, auth: string, resultExpression: string, { resultVariable, basicAuthCredentials, recoverSession, }?: {
24
+ resultVariable?: string;
25
+ basicAuthCredentials?: {
26
+ username: string;
27
+ password: string;
28
+ };
29
+ recoverSession?: () => Promise<void>;
26
30
  }): Promise<void>;
27
31
  export declare function assertLocatorVisibleWithPaginated(page: Page, locator: Locator, text: string): Promise<void>;
28
32
  export declare function assertLocatorVisibleWithRetry(page: Page, locator: Locator, text: string, timeout?: number, notVisible?: boolean, maxRetries?: number, clickLocator?: Locator): Promise<void>;
@@ -139,10 +139,7 @@ async function completeTaskWithRetry(page, taskPanelPage, taskDetailsPage, taskN
139
139
  }
140
140
  }
141
141
  exports.completeTaskWithRetry = completeTaskWithRetry;
142
- async function modelRestConnector(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName, url, auth, resultExpression, resultVariable = '', basicAuthCredentials = {
143
- username: '',
144
- password: '',
145
- }) {
142
+ async function modelRestConnector(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName, url, auth, resultExpression, { resultVariable = '', basicAuthCredentials = { username: '', password: '' }, recoverSession, } = {}) {
146
143
  await (0, test_1.expect)(modelerCreatePage.generalPanel).toBeVisible({
147
144
  timeout: 120000,
148
145
  });
@@ -178,7 +175,7 @@ async function modelRestConnector(modelerCreatePage, connectorSettingsPage, conn
178
175
  await connectorMarketplacePage.waitForConnectorSearchResults();
179
176
  await connectorMarketplacePage.downloadConnectorToProject();
180
177
  }
181
- await modelerCreatePage.clickRestConnectorOption();
178
+ await modelerCreatePage.clickRestConnectorOption(recoverSession);
182
179
  await connectorSettingsPage.clickAuthenticationTab();
183
180
  await connectorSettingsPage.clickHTTPEndpointTab();
184
181
  if (auth == 'bearer') {
@@ -137,7 +137,7 @@ declare class ModelerCreatePage {
137
137
  clickDeploySubButton(): Promise<void>;
138
138
  clickCancelButton(): Promise<void>;
139
139
  private recoverModelerSession;
140
- clickRestConnectorOption(): Promise<void>;
140
+ clickRestConnectorOption(recoverSession?: () => Promise<void>): Promise<void>;
141
141
  clickMarketPlaceButton(): Promise<void>;
142
142
  completeDeploymentEndpointConfiguration(): Promise<void>;
143
143
  completePlayConfiguration(): Promise<void>;
@@ -629,21 +629,33 @@ class ModelerCreatePage {
629
629
  async clickCancelButton() {
630
630
  await this.cancelButton.click();
631
631
  }
632
- async recoverModelerSession() {
633
- const url = this.page.url().split('?')[0];
634
- await this.page.context().clearCookies();
635
- await this.page.goto(url, { timeout: 30000, waitUntil: 'domcontentloaded' });
636
- const username = process.env.DEMO_USER_EMAIL || 'demo';
637
- const password = process.env.DISTRO_QA_E2E_TESTS_IDENTITY_FIRSTUSER_PASSWORD || 'demo';
638
- const loginInput = this.page.locator('#username');
639
- if (await loginInput.isVisible({ timeout: 5000 }).catch(() => false)) {
640
- await loginInput.fill(username);
641
- await this.page.locator('#password').fill(password);
642
- await this.page.locator('#kc-login').click();
632
+ async recoverModelerSession(recoverSession) {
633
+ const rawUrl = this.page.url();
634
+ let url;
635
+ if (rawUrl.includes('client_id=web-modeler')) {
636
+ const match = rawUrl.match(/redirect_uri=([^&]+)/);
637
+ url = match
638
+ ? decodeURIComponent(match[1]).split('?')[0]
639
+ : rawUrl.split('?')[0];
643
640
  }
641
+ else {
642
+ url = rawUrl.split('?')[0];
643
+ }
644
+ if (recoverSession) {
645
+ // Caller-provided function handles auth + navigation (e.g. navigationPage.goToModeler).
646
+ // It retries internally; after it returns the session is valid on Modeler home.
647
+ await recoverSession();
648
+ }
649
+ // Navigate to the diagram URL directly — goToModeler lands on Modeler home, and
650
+ // after a pod restart Modeler also loses OIDC state and redirects home, so we go
651
+ // to the diagram explicitly while the session is valid.
652
+ await this.page.goto(url, {
653
+ timeout: 30000,
654
+ waitUntil: 'domcontentloaded',
655
+ });
644
656
  await (0, test_1.expect)(this.secondElement).toBeVisible({ timeout: 60000 });
645
657
  }
646
- async clickRestConnectorOption() {
658
+ async clickRestConnectorOption(recoverSession) {
647
659
  const maxRetries = 4;
648
660
  for (let retries = 0; retries < maxRetries; retries++) {
649
661
  try {
@@ -654,7 +666,7 @@ class ModelerCreatePage {
654
666
  }
655
667
  else {
656
668
  // Recover session cleanly instead of page.reload()
657
- await this.recoverModelerSession();
669
+ await this.recoverModelerSession(recoverSession);
658
670
  await this.secondElement.click({ force: true, timeout: 60000 });
659
671
  await this.changeTypeButton.click({ force: true, timeout: 60000 });
660
672
  await (0, test_1.expect)(this.restConnectorOption).toBeVisible({ timeout: 90000 });
@@ -20,10 +20,16 @@ export declare function createUserAndAssignToRole(page: Page, navigationPage: Na
20
20
  export declare function assignMappingToRole(page: Page, ocIdentityHomePage: OCIdentityHomePage, ocIdentityRolesPage: OCIdentityRolesPage, role: string, mappingRuleId: string, testMappings?: Serializable): Promise<void>;
21
21
  export declare function createAndRunProcess(page: Page, modelerHomePage: ModelerHomePage, modelerCreatePage: ModelerCreatePage, processName: string, processId?: string): Promise<void>;
22
22
  export declare function completeTaskWithRetry(page: Page, taskPanelPage: TaskPanelPage, taskDetailsPage: TaskDetailsPage, taskName: string, taskPriority: string): Promise<void>;
23
- export declare function modelRestConnector(modelerCreatePage: ModelerCreatePage, connectorSettingsPage: ConnectorSettingsPage, connectorMarketplacePage: ConnectorMarketplacePage, processName: string, url: string, auth: string, resultExpression: string, resultVariable?: string, basicAuthCredentials?: {
24
- username: string;
25
- password: string;
26
- }, page?: Page, modelerHomePage?: ModelerHomePage): Promise<void>;
23
+ export declare function modelRestConnector(modelerCreatePage: ModelerCreatePage, connectorSettingsPage: ConnectorSettingsPage, connectorMarketplacePage: ConnectorMarketplacePage, processName: string, url: string, auth: string, resultExpression: string, { resultVariable, basicAuthCredentials, page, modelerHomePage, recoverSession, }?: {
24
+ resultVariable?: string;
25
+ basicAuthCredentials?: {
26
+ username: string;
27
+ password: string;
28
+ };
29
+ page?: Page;
30
+ modelerHomePage?: ModelerHomePage;
31
+ recoverSession?: () => Promise<void>;
32
+ }): Promise<void>;
27
33
  export declare function assertLocatorVisibleWithPaginated(page: Page, locator: Locator, text: string): Promise<void>;
28
34
  export declare function assertLocatorVisibleWithRetry(page: Page, locator: Locator, text: string, timeout?: number, notVisible?: boolean, maxRetries?: number, clickLocator?: Locator): Promise<void>;
29
35
  export declare function assertPageTextWithRetry(page: Page, text: string, notVisible?: boolean, timeout?: number, maxRetries?: number): Promise<void>;
@@ -112,10 +112,7 @@ async function completeTaskWithRetry(page, taskPanelPage, taskDetailsPage, taskN
112
112
  throw new Error(`Completion of task ${taskName} failed after ${attempt} attempts (${TOTAL_TIMEOUT_MS / 1000}s timeout)`);
113
113
  }
114
114
  exports.completeTaskWithRetry = completeTaskWithRetry;
115
- async function modelRestConnector(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName, url, auth, resultExpression, resultVariable = '', basicAuthCredentials = {
116
- username: '',
117
- password: '',
118
- }, page, modelerHomePage) {
115
+ async function modelRestConnector(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName, url, auth, resultExpression, { resultVariable = '', basicAuthCredentials = { username: '', password: '' }, page, modelerHomePage, recoverSession, } = {}) {
119
116
  await (0, test_1.expect)(modelerCreatePage.generalPanel).toBeVisible({
120
117
  timeout: 120000,
121
118
  });
@@ -179,7 +176,7 @@ async function modelRestConnector(modelerCreatePage, connectorSettingsPage, conn
179
176
  }
180
177
  }
181
178
  }
182
- await modelerCreatePage.clickRestConnectorOption();
179
+ await modelerCreatePage.clickRestConnectorOption(recoverSession);
183
180
  await connectorSettingsPage.clickAuthenticationTab();
184
181
  await connectorSettingsPage.clickHTTPEndpointTab();
185
182
  if (auth == 'bearer') {
@@ -225,10 +225,12 @@ _8_7_1.test.describe('Web Modeler User Flow Tests', () => {
225
225
  });
226
226
  await settingsPage.clickOpenSettingsButton();
227
227
  await settingsPage.clickLogoutButton();
228
- await loginPage.login(testUser);
228
+ await (0, UtilitiesPage_1.loginWithRetry)(page, loginPage, testUser, 1000);
229
229
  await (0, sleep_1.sleep)(20000);
230
+ await appsPage.clickCamundaApps();
231
+ await appsPage.clickModeler();
230
232
  await (0, test_1.expect)(modelerHomePage.modelerPageBanner).toBeVisible({
231
- timeout: 60000,
233
+ timeout: 90000,
232
234
  });
233
235
  await modelerHomePage.clickMessageBanner();
234
236
  await (0, test_1.expect)(modelerHomePage.openOrganizationsButton).toBeVisible({
@@ -237,7 +239,6 @@ _8_7_1.test.describe('Web Modeler User Flow Tests', () => {
237
239
  await modelerHomePage.clickOpenOrganizationsButton();
238
240
  await modelerHomePage.clickManageButton();
239
241
  await consoleOrganizationsPage.clickUsersTab();
240
- await page.reload();
241
242
  await consoleOrganizationsPage.filterTable([
242
243
  process.env.C8_USERNAME_TEST_3,
243
244
  ]);
@@ -447,8 +448,29 @@ _8_7_1.test.describe('Web Modeler User Flow Tests', () => {
447
448
  await homePage.clickSkipCustomization();
448
449
  });
449
450
  await _8_7_1.test.step('Navigate to Console', async () => {
450
- await appsPage.clickCamundaApps();
451
- await appsPage.clickConsoleLink();
451
+ // After clickSkipCustomization the browser is already on Console at
452
+ // /org/<uuid>/... – avoid triggering a redundant app-switcher navigation
453
+ // which can cause Auth0 to re-authenticate new users (taking >120 s).
454
+ const alreadyOnOrg = await page
455
+ .waitForURL(/\/org\//, { timeout: 10000 })
456
+ .then(() => true)
457
+ .catch(() => false);
458
+ if (!alreadyOnOrg) {
459
+ await appsPage.clickCamundaApps();
460
+ await appsPage.clickConsoleLink();
461
+ }
462
+ // If Auth0 re-auth was triggered (new-user first Console visit), log back in.
463
+ const onAuth0 = await loginPage.usernameInput
464
+ .waitFor({ state: 'visible', timeout: 10000 })
465
+ .then(() => true)
466
+ .catch(() => false);
467
+ if (onAuth0) {
468
+ await loginPage.fillUsername(emailAddress);
469
+ await loginPage.clickContinueButton();
470
+ await loginPage.fillPassword(password);
471
+ await loginPage.clickLoginButton();
472
+ await page.waitForURL(/\/org\//, { timeout: 90000 });
473
+ }
452
474
  await (0, test_1.expect)(homePage.consoleBanner).toBeVisible({
453
475
  timeout: 120000,
454
476
  });
@@ -143,7 +143,13 @@ SM_8_10_1.test.describe('Connectors User Flow Tests @tasklistV2', () => {
143
143
  await modelerHomePage.clickBpmnTemplateOption();
144
144
  });
145
145
  await SM_8_10_1.test.step('Create BPMN Diagram with REST Connector using secrets and Start Process Instance', async () => {
146
- await (0, UtilitiesPage_1.modelRestConnector)(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName, 'https://camunda.proxy.beeceptor.com/pre-prod/basic-auth-test', 'basic', '{message:response.body.message}', 'result', { username: '{{secrets.username}}', password: '{{secrets.password}}' });
146
+ await (0, UtilitiesPage_1.modelRestConnector)(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName, 'https://camunda.proxy.beeceptor.com/pre-prod/basic-auth-test', 'basic', '{message:response.body.message}', {
147
+ resultVariable: 'result',
148
+ basicAuthCredentials: {
149
+ username: '{{secrets.username}}',
150
+ password: '{{secrets.password}}',
151
+ },
152
+ });
147
153
  await modelerCreatePage.runProcessInstance('', mtTenant);
148
154
  await (0, sleep_1.sleep)(20000);
149
155
  });
@@ -301,7 +301,9 @@ if (process.env.IS_MT === 'true') {
301
301
  await modelerHomePage.clickBpmnTemplateOption();
302
302
  });
303
303
  await SM_8_10_1.test.step('Create A Diagram with a REST Connector and Start Process Instance', async () => {
304
- await (0, UtilitiesPage_1.modelRestConnector)(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName, 'https://camunda.proxy.beeceptor.com/pre-prod/no-auth-test', 'noAuth', 'body');
304
+ await (0, UtilitiesPage_1.modelRestConnector)(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName, 'https://camunda.proxy.beeceptor.com/pre-prod/no-auth-test', 'noAuth', 'body', {
305
+ recoverSession: () => navigationPage.goToModeler(undefined, credentials),
306
+ });
305
307
  await modelerCreatePage.runProcessInstance('', tenantName); //Identity bug https://github.com/camunda/camunda/issues/35834
306
308
  });
307
309
  await SM_8_10_1.test.step('View Process Instance in Operate & assert process is complete', async () => {
@@ -142,7 +142,10 @@ SM_8_10_1.test.describe.parallel('Smoke Tests', () => {
142
142
  await modelerHomePage.clickBpmnTemplateOption();
143
143
  });
144
144
  await SM_8_10_1.test.step('Create BPMN Diagram with REST Connector with Basic Auth and Start Process Instance', async () => {
145
- await (0, UtilitiesPage_1.modelRestConnector)(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName, 'https://camunda.proxy.beeceptor.com/pre-prod/basic-auth-test', 'basic', '{message:response.body.message}', 'result', { username: 'username', password: 'password' });
145
+ await (0, UtilitiesPage_1.modelRestConnector)(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName, 'https://camunda.proxy.beeceptor.com/pre-prod/basic-auth-test', 'basic', '{message:response.body.message}', {
146
+ resultVariable: 'result',
147
+ basicAuthCredentials: { username: 'username', password: 'password' },
148
+ });
146
149
  await modelerCreatePage.runProcessInstance();
147
150
  });
148
151
  await SM_8_10_1.test.step('View Process Instance in Operate, assert it completes and assert result expression', async () => {
@@ -24,7 +24,7 @@ SM_8_8_1.test.describe('Connectors User Flow Tests @tasklistV2', () => {
24
24
  await modelerHomePage.clickBpmnTemplateOption();
25
25
  });
26
26
  await SM_8_8_1.test.step('Create BPMN Diagram with REST Connector and Start Process Instance', async () => {
27
- await (0, UtilitiesPage_1.modelRestConnector)(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName, 'https://camunda.proxy.beeceptor.com/pre-prod/no-auth-test', 'noAuth', 'body', '', { username: '', password: '' }, page, modelerHomePage);
27
+ await (0, UtilitiesPage_1.modelRestConnector)(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName, 'https://camunda.proxy.beeceptor.com/pre-prod/no-auth-test', 'noAuth', 'body', { page, modelerHomePage });
28
28
  await modelerCreatePage.runProcessInstance();
29
29
  await (0, sleep_1.sleep)(20000);
30
30
  });
@@ -54,7 +54,7 @@ SM_8_8_1.test.describe('Connectors User Flow Tests @tasklistV2', () => {
54
54
  await modelerHomePage.clickBpmnTemplateOption();
55
55
  });
56
56
  await SM_8_8_1.test.step('Create BPMN Diagram with REST Connector with Basic Auth and Start Process Instance', async () => {
57
- await (0, UtilitiesPage_1.modelRestConnector)(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName, 'https://camunda.proxy.beeceptor.com/pre-prod/bearer-auth-test', 'bearer', '{message:response.body.status}', '', { username: '', password: '' }, page, modelerHomePage);
57
+ await (0, UtilitiesPage_1.modelRestConnector)(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName, 'https://camunda.proxy.beeceptor.com/pre-prod/bearer-auth-test', 'bearer', '{message:response.body.status}', { page, modelerHomePage });
58
58
  await modelerCreatePage.runProcessInstance();
59
59
  await (0, _setup_1.performBearerTokenAuthPostRequest)('https://camunda.proxy.beeceptor.com/pre-prod/bearer-auth-test', 'thisisabearertoken');
60
60
  await (0, sleep_1.sleep)(20000);
@@ -145,7 +145,15 @@ SM_8_8_1.test.describe('Connectors User Flow Tests @tasklistV2', () => {
145
145
  await modelerHomePage.clickBpmnTemplateOption();
146
146
  });
147
147
  await SM_8_8_1.test.step('Create BPMN Diagram with REST Connector using secrets and Start Process Instance', async () => {
148
- await (0, UtilitiesPage_1.modelRestConnector)(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName, 'https://camunda.proxy.beeceptor.com/pre-prod/basic-auth-test', 'basic', '{message:response.body.message}', 'result', { username: '{{secrets.username}}', password: '{{secrets.password}}' }, page, modelerHomePage);
148
+ await (0, UtilitiesPage_1.modelRestConnector)(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName, 'https://camunda.proxy.beeceptor.com/pre-prod/basic-auth-test', 'basic', '{message:response.body.message}', {
149
+ resultVariable: 'result',
150
+ basicAuthCredentials: {
151
+ username: '{{secrets.username}}',
152
+ password: '{{secrets.password}}',
153
+ },
154
+ page,
155
+ modelerHomePage,
156
+ });
149
157
  await modelerCreatePage.runProcessInstance();
150
158
  await (0, sleep_1.sleep)(20000);
151
159
  });
@@ -157,7 +157,7 @@ if (process.env.IS_MT === 'true') {
157
157
  await modelerHomePage.clickBpmnTemplateOption();
158
158
  });
159
159
  await SM_8_8_1.test.step('Create A Diagram with a REST Connector and Start Process Instance', async () => {
160
- await (0, UtilitiesPage_1.modelRestConnector)(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName, 'https://camunda.proxy.beeceptor.com/pre-prod/no-auth-test', 'noAuth', 'body', '', { username: '', password: '' }, page, modelerHomePage);
160
+ await (0, UtilitiesPage_1.modelRestConnector)(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName, 'https://camunda.proxy.beeceptor.com/pre-prod/no-auth-test', 'noAuth', 'body', { page, modelerHomePage });
161
161
  await modelerCreatePage.runProcessInstance('', tenantName); //Identity bug https://github.com/camunda/camunda/issues/35834
162
162
  });
163
163
  await SM_8_8_1.test.step('View Process Instance in Operate & assert process is complete', async () => {
@@ -302,7 +302,11 @@ if (process.env.IS_MT === 'true') {
302
302
  await modelerHomePage.clickBpmnTemplateOption();
303
303
  });
304
304
  await SM_8_8_1.test.step('Create A Diagram with a REST Connector and Start Process Instance', async () => {
305
- await (0, UtilitiesPage_1.modelRestConnector)(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName, 'https://camunda.proxy.beeceptor.com/pre-prod/no-auth-test', 'noAuth', 'body', '', { username: '', password: '' }, page, modelerHomePage);
305
+ await (0, UtilitiesPage_1.modelRestConnector)(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName, 'https://camunda.proxy.beeceptor.com/pre-prod/no-auth-test', 'noAuth', 'body', {
306
+ page,
307
+ modelerHomePage,
308
+ recoverSession: () => navigationPage.goToModeler(undefined, credentials),
309
+ });
306
310
  await modelerCreatePage.runProcessInstance('', tenantName); //Identity bug https://github.com/camunda/camunda/issues/35834
307
311
  });
308
312
  await SM_8_8_1.test.step('View Process Instance in Operate & assert process is complete', async () => {
@@ -436,14 +440,14 @@ if (process.env.IS_MT === 'true') {
436
440
  await modelerHomePage.clickBpmnTemplateOption();
437
441
  });
438
442
  await SM_8_8_1.test.step('Create A Diagram with a REST Connector and Start Process Instance With Tenant 1', async () => {
439
- await (0, UtilitiesPage_1.modelRestConnector)(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName1, 'https://camunda.proxy.beeceptor.com/pre-prod/no-auth-test', 'noAuth', 'body', '', { username: '', password: '' }, page, modelerHomePage);
443
+ await (0, UtilitiesPage_1.modelRestConnector)(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName1, 'https://camunda.proxy.beeceptor.com/pre-prod/no-auth-test', 'noAuth', 'body', { page, modelerHomePage });
440
444
  await modelerCreatePage.runProcessInstance('', tenantName1); //Identity bug https://github.com/camunda/camunda/issues/35834
441
445
  });
442
446
  await SM_8_8_1.test.step('Create A Diagram with a REST Connector and Start Process Instance With Tenant 2', async () => {
443
447
  await modelerHomePage.clickProjectBreadcrumb();
444
448
  await modelerHomePage.clickDiagramTypeDropdown();
445
449
  await modelerHomePage.clickBpmnTemplateOption();
446
- await (0, UtilitiesPage_1.modelRestConnector)(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName2, 'https://camunda.proxy.beeceptor.com/pre-prod/no-auth-test', 'noAuth', 'body', '', { username: '', password: '' }, page, modelerHomePage);
450
+ await (0, UtilitiesPage_1.modelRestConnector)(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName2, 'https://camunda.proxy.beeceptor.com/pre-prod/no-auth-test', 'noAuth', 'body', { page, modelerHomePage });
447
451
  await modelerCreatePage.runProcessInstance('', tenantName2);
448
452
  });
449
453
  await SM_8_8_1.test.step('View Process Instances in Operate, and Assert Process Complete in Operate with Correct Tenant', async () => {
@@ -147,7 +147,12 @@ SM_8_8_1.test.describe.parallel('Smoke Tests', () => {
147
147
  await modelerHomePage.clickBpmnTemplateOption();
148
148
  });
149
149
  await SM_8_8_1.test.step('Create BPMN Diagram with REST Connector with Basic Auth and Start Process Instance', async () => {
150
- await (0, UtilitiesPage_1.modelRestConnector)(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName, 'https://camunda.proxy.beeceptor.com/pre-prod/basic-auth-test', 'basic', '{message:response.body.message}', 'result', { username: 'username', password: 'password' }, page, modelerHomePage);
150
+ await (0, UtilitiesPage_1.modelRestConnector)(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName, 'https://camunda.proxy.beeceptor.com/pre-prod/basic-auth-test', 'basic', '{message:response.body.message}', {
151
+ resultVariable: 'result',
152
+ basicAuthCredentials: { username: 'username', password: 'password' },
153
+ page,
154
+ modelerHomePage,
155
+ });
151
156
  await modelerCreatePage.runProcessInstance();
152
157
  });
153
158
  await SM_8_8_1.test.step('View Process Instance in Operate, assert it completes and assert result expression', async () => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camunda/e2e-test-suite",
3
- "version": "0.0.563",
3
+ "version": "0.0.565",
4
4
  "description": "End-to-end test helpers for Camunda 8",
5
5
  "repository": {
6
6
  "type": "git",