@camunda/e2e-test-suite 0.0.422 → 0.0.424

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.
@@ -398,9 +398,11 @@ class ModelerCreatePage {
398
398
  async fillIdInput(id) {
399
399
  try {
400
400
  await this.processIdInput.fill(id);
401
+ await (0, test_1.expect)(this.processIdInput).toHaveValue(id);
401
402
  }
402
403
  catch {
403
404
  await this.processIdSecondLocator.fill(id);
405
+ await (0, test_1.expect)(this.processIdSecondLocator).toHaveValue(id);
404
406
  }
405
407
  }
406
408
  async clickElemendIdInput() {
@@ -562,6 +564,7 @@ class ModelerCreatePage {
562
564
  }
563
565
  async fillNameInput(name) {
564
566
  await this.nameInput.fill(name);
567
+ await (0, test_1.expect)(this.nameInput).toHaveValue(name);
565
568
  }
566
569
  async clickJobTypeInput() {
567
570
  await this.jobTypeInput.click();
@@ -578,6 +581,7 @@ class ModelerCreatePage {
578
581
  async enterDiagramName(name) {
579
582
  await this.diagramNameInput.fill(name, { timeout: 60000 });
580
583
  await this.diagramNameInput.press('Enter', { timeout: 60000 });
584
+ await (0, sleep_1.sleep)(1000);
581
585
  }
582
586
  async clickVariableInput() {
583
587
  await this.variableInput.click();
@@ -6,9 +6,11 @@ declare class OperateProcessInstancePage {
6
6
  readonly diagramSpinner: Locator;
7
7
  readonly activeIcon: Locator;
8
8
  readonly incidentIcon: Locator;
9
+ readonly variablesList: Locator;
9
10
  constructor(page: Page);
10
- connectorResultVariableName(name: string): Promise<Locator>;
11
- connectorResultVariableValue(variableName: string): Promise<Locator>;
11
+ assertVariablesListVisible(timeout?: number): Promise<void>;
12
+ connectorResultVariableName(name: string, timeout?: number): Promise<Locator>;
13
+ connectorResultVariableValue(variableName: string, timeout?: number): Promise<Locator>;
12
14
  completedIconAssertion(): Promise<void>;
13
15
  activeIconAssertion(): Promise<void>;
14
16
  activeUserTaskIconVisibleAssertion(taskName: string): Promise<void>;
@@ -10,6 +10,7 @@ class OperateProcessInstancePage {
10
10
  diagramSpinner;
11
11
  activeIcon;
12
12
  incidentIcon;
13
+ variablesList;
13
14
  constructor(page) {
14
15
  this.page = page;
15
16
  this.diagram = page.getByTestId('diagram');
@@ -23,15 +24,60 @@ class OperateProcessInstancePage {
23
24
  this.incidentIcon = page
24
25
  .getByTestId('instance-header')
25
26
  .getByTestId('INCIDENT-icon');
27
+ this.variablesList = page.getByTestId('variables-list');
26
28
  }
27
- async connectorResultVariableName(name) {
28
- return this.page.getByTestId('variable-' + name);
29
+ async assertVariablesListVisible(timeout = 30000) {
30
+ const startTime = Date.now();
31
+ while (Date.now() - startTime < timeout) {
32
+ try {
33
+ await (0, test_1.expect)(this.variablesList).toBeVisible({ timeout: 10000 });
34
+ return;
35
+ }
36
+ catch {
37
+ console.log(`Variables list not visible, reloading... (${Math.round((Date.now() - startTime) / 1000)}s elapsed)`);
38
+ await this.page
39
+ .reload({ timeout: 10000 })
40
+ .catch(() => console.log('Page reload timed out, continuing...'));
41
+ await (0, sleep_1.sleep)(2000);
42
+ }
43
+ }
44
+ throw new Error(`Variables list not visible after ${Math.round(timeout / 1000)}s`);
45
+ }
46
+ async connectorResultVariableName(name, timeout = 30000) {
47
+ const locator = this.page.getByTestId('variable-' + name);
48
+ const startTime = Date.now();
49
+ while (Date.now() - startTime < timeout) {
50
+ try {
51
+ await (0, test_1.expect)(locator).toBeVisible({ timeout: 10000 });
52
+ return locator;
53
+ }
54
+ catch {
55
+ console.log(`Variable "${name}" not visible, reloading... (${Math.round((Date.now() - startTime) / 1000)}s elapsed)`);
56
+ await this.page
57
+ .reload({ timeout: 10000 })
58
+ .catch(() => console.log('Page reload timed out, continuing...'));
59
+ await (0, sleep_1.sleep)(2000);
60
+ }
61
+ }
62
+ throw new Error(`Variable "${name}" not visible after ${Math.round(timeout / 1000)}s`);
29
63
  }
30
- async connectorResultVariableValue(variableName) {
31
- return this.page
32
- .getByTestId('variable-' + variableName)
33
- .locator('td')
34
- .last();
64
+ async connectorResultVariableValue(variableName, timeout = 30000) {
65
+ const locator = this.page.getByTestId('variable-' + variableName);
66
+ const startTime = Date.now();
67
+ while (Date.now() - startTime < timeout) {
68
+ try {
69
+ await (0, test_1.expect)(locator).toBeVisible({ timeout: 10000 });
70
+ return locator;
71
+ }
72
+ catch {
73
+ console.log(`Variable value "${variableName}" not visible, reloading... (${Math.round((Date.now() - startTime) / 1000)}s elapsed)`);
74
+ await this.page
75
+ .reload({ timeout: 10000 })
76
+ .catch(() => console.log('Page reload timed out, continuing...'));
77
+ await (0, sleep_1.sleep)(2000);
78
+ }
79
+ }
80
+ throw new Error(`Variable value "${variableName}" not visible after ${Math.round(timeout / 1000)}s`);
35
81
  }
36
82
  async completedIconAssertion() {
37
83
  let retryCount = 0;
@@ -137,6 +137,10 @@ class OperateProcessesPage {
137
137
  });
138
138
  if (!(await this.processActiveCheckbox.isChecked({ timeout: 60000 }))) {
139
139
  await this.processActiveCheckbox.click({ timeout: 120000 });
140
+ await (0, test_1.expect)(this.processActiveCheckbox).toBeChecked({
141
+ checked: true,
142
+ timeout: constants_1._1_SECOND_IN_MS * 5,
143
+ });
140
144
  }
141
145
  }
142
146
  async clickProcessCompletedCheckbox() {
@@ -146,6 +150,10 @@ class OperateProcessesPage {
146
150
  });
147
151
  if (!(await this.processCompletedCheckbox.isChecked({ timeout: 60000 }))) {
148
152
  await this.processCompletedCheckbox.click({ timeout: 120000 });
153
+ await (0, test_1.expect)(this.processCompletedCheckbox).toBeChecked({
154
+ checked: true,
155
+ timeout: constants_1._1_SECOND_IN_MS * 5,
156
+ });
149
157
  }
150
158
  }
151
159
  async clickProcessIncidentsCheckbox() {
@@ -153,28 +161,43 @@ class OperateProcessesPage {
153
161
  state: 'visible',
154
162
  timeout: constants_1._1_SECOND_IN_MS * 10,
155
163
  });
164
+ const wasChecked = await this.processIncidentsCheckbox.isChecked();
156
165
  await this.processIncidentsCheckbox.click({ timeout: 90000 });
166
+ await (0, test_1.expect)(this.processIncidentsCheckbox).toBeChecked({
167
+ checked: !wasChecked,
168
+ timeout: constants_1._1_SECOND_IN_MS * 5,
169
+ });
157
170
  }
158
171
  async clickRunningProcessInstancesCheckbox() {
159
172
  await this.processRunningInstancesCheckbox.waitFor({
160
173
  state: 'visible',
161
174
  timeout: constants_1._1_SECOND_IN_MS * 10,
162
175
  });
176
+ const wasChecked = await this.processRunningInstancesCheckbox.isChecked();
163
177
  await this.processRunningInstancesCheckbox.click({ timeout: 90000 });
178
+ await (0, test_1.expect)(this.processRunningInstancesCheckbox).toBeChecked({
179
+ checked: !wasChecked,
180
+ timeout: constants_1._1_SECOND_IN_MS * 5,
181
+ });
164
182
  }
165
183
  async clickFinishedProcessInstancesCheckbox() {
166
184
  await this.processFinishedInstancesCheckbox.waitFor({
167
185
  state: 'visible',
168
186
  timeout: constants_1._1_SECOND_IN_MS * 10,
169
187
  });
188
+ const wasChecked = await this.processFinishedInstancesCheckbox.isChecked();
170
189
  await this.processFinishedInstancesCheckbox.click({ timeout: 90000 });
190
+ await (0, test_1.expect)(this.processFinishedInstancesCheckbox).toBeChecked({
191
+ checked: !wasChecked,
192
+ timeout: constants_1._1_SECOND_IN_MS * 5,
193
+ });
171
194
  }
172
195
  async clickProcessInstanceLink(processName, type = 'active') {
173
196
  if (await this.checkTableForProcess(processName)) {
174
197
  return;
175
198
  }
176
199
  const MAX_ATTEMPTS = 100;
177
- const TOTAL_TIMEOUT_MS = constants_1._1_MINUTE_IN_MS * 4;
200
+ const TOTAL_TIMEOUT_MS = constants_1._1_MINUTE_IN_MS * 6;
178
201
  let attempt = 0;
179
202
  let lastError;
180
203
  const startTime = Date.now();
@@ -191,19 +214,28 @@ class OperateProcessesPage {
191
214
  if (await this.checkTableForProcess(processName)) {
192
215
  return;
193
216
  }
194
- throw new Error(`Failed to open instance "${processName}" after ${MAX_ATTEMPTS} attempts.`);
217
+ throw new Error(`Process "${processName}" not found in table on attempt ${attempt}.`);
195
218
  }
196
219
  catch (err) {
197
220
  lastError = err instanceof Error ? err.message : err;
198
- await this.page.reload();
199
- await this.page.waitForLoadState('networkidle');
221
+ console.log(`clickProcessInstanceLink attempt ${attempt}: ${String(lastError)}`);
222
+ await this.page
223
+ .reload({ timeout: 30000 })
224
+ .catch(() => console.log('Page reload timed out, continuing...'));
225
+ await this.page
226
+ .waitForLoadState('networkidle', { timeout: 30000 })
227
+ .catch(() => console.log('waitForLoadState networkidle timed out, continuing...'));
200
228
  await (0, sleep_1.sleep)(2000);
201
229
  // After reload, check if page redirected away from Operate
202
230
  if (!this.page.url().includes('/operate')) {
203
231
  const operatePath = (process.env.ORCHESTRATION_CONTEXT_PATH ?? '/orchestration') +
204
232
  '/operate';
205
- await this.page.goto(operatePath, { timeout: 30000 });
206
- await this.page.waitForLoadState('networkidle');
233
+ await this.page
234
+ .goto(operatePath, { timeout: 30000 })
235
+ .catch(() => console.log('Navigation to Operate timed out, continuing...'));
236
+ await this.page
237
+ .waitForLoadState('networkidle', { timeout: 30000 })
238
+ .catch(() => console.log('waitForLoadState after Operate navigation timed out, continuing...'));
207
239
  await (0, sleep_1.sleep)(2000);
208
240
  }
209
241
  try {
@@ -220,7 +252,7 @@ class OperateProcessesPage {
220
252
  }
221
253
  }
222
254
  }
223
- throw new Error(`Failed to open instance "${processName}" after ${MAX_ATTEMPTS} attempts. Last error: ${String(lastError)}`);
255
+ throw new Error(`Failed to open instance "${processName}" after ${attempt} attempts (${Math.round((Date.now() - startTime) / 1000)}s elapsed). Last error: ${String(lastError)}`);
224
256
  }
225
257
  async clickProcessInstanceLinkWithPartialNameMatch(processName) {
226
258
  let retryCount = 0;
@@ -15,7 +15,7 @@ SM_8_9_1.test.describe('Connectors User Flow Tests @tasklistV2', () => {
15
15
  await (0, _setup_1.captureScreenshot)(page, testInfo);
16
16
  await (0, _setup_1.captureFailureVideo)(page, testInfo);
17
17
  });
18
- (0, SM_8_9_1.test)('REST Connector No Auth User Flow', async ({ page, operateHomePage, modelerHomePage, operateProcessInstancePage, modelerCreatePage, connectorSettingsPage, operateProcessesPage, connectorMarketplacePage, navigationPage, }) => {
18
+ (0, SM_8_9_1.test)('REST Connector No Auth User Flow', async ({ operateHomePage, modelerHomePage, operateProcessInstancePage, modelerCreatePage, connectorSettingsPage, operateProcessesPage, connectorMarketplacePage, navigationPage, }) => {
19
19
  SM_8_9_1.test.slow();
20
20
  const processName = 'REST_Connector_No_Auth_Process' + (await (0, _setup_1.generateRandomStringAsync)(3));
21
21
  await SM_8_9_1.test.step('Open Cross Component Test Project and Create a BPMN Diagram Template', async () => {
@@ -34,16 +34,12 @@ SM_8_9_1.test.describe('Connectors User Flow Tests @tasklistV2', () => {
34
34
  await operateProcessesPage.clickProcessInstanceLink(processName, 'completed');
35
35
  const result = await operateProcessInstancePage.assertEitherIncidentOrCompletedIconVisible();
36
36
  (0, test_1.expect)(result).toBe('completed');
37
- await (0, test_1.expect)(page.getByTestId('variables-list')).toBeVisible({
38
- timeout: 30000,
39
- });
40
- await (0, test_1.expect)(await operateProcessInstancePage.connectorResultVariableName('status')).toBeVisible({ timeout: 30000 });
41
- await (0, test_1.expect)(page.getByText('"Awesome!"')).toBeVisible({
42
- timeout: 60000,
43
- });
37
+ await operateProcessInstancePage.assertVariablesListVisible();
38
+ await operateProcessInstancePage.connectorResultVariableName('status');
39
+ await operateProcessInstancePage.assertProcessVariableContainsText('status', '"Awesome!"');
44
40
  });
45
41
  });
46
- (0, SM_8_9_1.test)('REST Connector Bearer Token Auth User Flow', async ({ page, operateHomePage, modelerHomePage, modelerCreatePage, connectorSettingsPage, navigationPage, operateProcessInstancePage, operateProcessesPage, connectorMarketplacePage, }) => {
42
+ (0, SM_8_9_1.test)('REST Connector Bearer Token Auth User Flow', async ({ operateHomePage, modelerHomePage, modelerCreatePage, connectorSettingsPage, navigationPage, operateProcessInstancePage, operateProcessesPage, connectorMarketplacePage, }) => {
47
43
  SM_8_9_1.test.slow();
48
44
  const processName = 'REST_Connector_Bearer_Auth_Process' +
49
45
  (await (0, _setup_1.generateRandomStringAsync)(3));
@@ -64,13 +60,9 @@ SM_8_9_1.test.describe('Connectors User Flow Tests @tasklistV2', () => {
64
60
  await operateProcessesPage.clickProcessInstanceLink(processName, 'completed');
65
61
  const result = await operateProcessInstancePage.assertEitherIncidentOrCompletedIconVisible();
66
62
  (0, test_1.expect)(result).toBe('completed');
67
- await (0, test_1.expect)(page.getByTestId('variables-list')).toBeVisible({
68
- timeout: 90000,
69
- });
70
- (0, test_1.expect)((await operateProcessInstancePage.connectorResultVariableName('message')).isVisible()).toBeTruthy();
71
- await (0, test_1.expect)(page.getByText('"Awesome!"')).toBeVisible({
72
- timeout: 60000,
73
- });
63
+ await operateProcessInstancePage.assertVariablesListVisible();
64
+ await operateProcessInstancePage.connectorResultVariableName('message');
65
+ await operateProcessInstancePage.assertProcessVariableContainsText('message', '"Awesome!"');
74
66
  });
75
67
  });
76
68
  (0, SM_8_9_1.test)('Message Start Event Webhook Connector No Auth User Flow', async ({ modelerHomePage, navigationPage, modelerCreatePage, request, operateHomePage, operateProcessInstancePage, operateProcessesPage, connectorMarketplacePage, connectorSettingsPage, }) => {
@@ -134,7 +126,7 @@ SM_8_9_1.test.describe('Connectors User Flow Tests @tasklistV2', () => {
134
126
  (0, test_1.expect)(result).toBe('completed');
135
127
  });
136
128
  });
137
- (0, SM_8_9_1.test)('Connector Secrets User Flow', async ({ page, operateHomePage, modelerHomePage, navigationPage, modelerCreatePage, connectorSettingsPage, operateProcessInstancePage, operateProcessesPage, connectorMarketplacePage, }) => {
129
+ (0, SM_8_9_1.test)('Connector Secrets User Flow', async ({ operateHomePage, modelerHomePage, navigationPage, modelerCreatePage, connectorSettingsPage, operateProcessInstancePage, operateProcessesPage, connectorMarketplacePage, }) => {
138
130
  SM_8_9_1.test.slow();
139
131
  const processName = 'REST_Connector_Process' + (await (0, _setup_1.generateRandomStringAsync)(3));
140
132
  await SM_8_9_1.test.step('Open Cross Component Test Project and Create a BPMN Diagram Template', async () => {
@@ -153,10 +145,8 @@ SM_8_9_1.test.describe('Connectors User Flow Tests @tasklistV2', () => {
153
145
  await operateProcessesPage.clickProcessInstanceLink(processName, 'completed');
154
146
  const result = await operateProcessInstancePage.assertEitherIncidentOrCompletedIconVisible();
155
147
  (0, test_1.expect)(result).toBe('completed');
156
- await (0, test_1.expect)(page.getByTestId('variables-list')).toBeVisible({
157
- timeout: 90000,
158
- });
159
- await (0, test_1.expect)(page.getByTestId('variable-message').getByText('"Message from Mock!"')).toBeVisible({ timeout: 180000 });
148
+ await operateProcessInstancePage.assertVariablesListVisible();
149
+ await operateProcessInstancePage.assertProcessVariableContainsText('message', '"Message from Mock!"');
160
150
  });
161
151
  });
162
152
  (0, SM_8_9_1.test)('Intermediate Event Webhook Connector No Auth User Flow', async ({ modelerHomePage, modelerCreatePage, request, operateHomePage, operateProcessInstancePage, operateProcessesPage, navigationPage, connectorMarketplacePage, connectorSettingsPage, }) => {
@@ -70,7 +70,7 @@ if (process.env.IS_MIGRATION === 'true') {
70
70
  });
71
71
  });
72
72
  });
73
- (0, SM_8_9_1.test)('Assert REST Connector Process Migration @tasklistV2', async ({ page, operateHomePage, navigationPage, operateProcessesPage, operateProcessInstancePage, }) => {
73
+ (0, SM_8_9_1.test)('Assert REST Connector Process Migration @tasklistV2', async ({ operateHomePage, navigationPage, operateProcessesPage, operateProcessInstancePage, }) => {
74
74
  SM_8_9_1.test.slow();
75
75
  const processName = 'REST_Connector_Basic_Auth_Process';
76
76
  await SM_8_9_1.test.step('View Process Instance in Operate, assert it completes and assert result expression', async () => {
@@ -79,13 +79,9 @@ if (process.env.IS_MIGRATION === 'true') {
79
79
  await operateProcessesPage.clickProcessCompletedCheckbox();
80
80
  await operateProcessesPage.clickProcessInstanceLinkWithPartialNameMatch(processName);
81
81
  await operateProcessInstancePage.completedIconAssertion();
82
- await (0, test_1.expect)(page.getByTestId('variables-list')).toBeVisible({
83
- timeout: 60000,
84
- });
85
- (0, test_1.expect)((await operateProcessInstancePage.connectorResultVariableName('message')).isVisible()).toBeTruthy();
86
- await (0, test_1.expect)(page
87
- .getByTestId('variable-message')
88
- .getByText('"Message from Mock!"')).toBeVisible({ timeout: 60000 });
82
+ await operateProcessInstancePage.assertVariablesListVisible();
83
+ await operateProcessInstancePage.connectorResultVariableName('message');
84
+ await operateProcessInstancePage.assertProcessVariableContainsText('message', '"Message from Mock!"');
89
85
  });
90
86
  });
91
87
  (0, SM_8_9_1.test)('Assert Users Persist in Management Identity With Correct Roles @tasklistV2', async ({ managementIdentityPage, identityUsersPage, }) => {
@@ -165,9 +165,7 @@ if (process.env.IS_MT === 'true') {
165
165
  await operateHomePage.clickProcessesTab();
166
166
  await operateProcessesPage.clickProcessInstanceLink(processName, 'completed');
167
167
  await operateProcessInstancePage.completedIconAssertion();
168
- await (0, test_1.expect)(page.getByTestId('variables-list')).toBeVisible({
169
- timeout: 30000,
170
- });
168
+ await operateProcessInstancePage.assertVariablesListVisible();
171
169
  await (0, test_1.expect)(page.getByText('"Awesome!"')).toBeVisible({
172
170
  timeout: 60000,
173
171
  });
@@ -309,9 +307,7 @@ if (process.env.IS_MT === 'true') {
309
307
  await operateHomePage.clickProcessesTab();
310
308
  await operateProcessesPage.clickProcessInstanceLink(processName, 'completed');
311
309
  await operateProcessInstancePage.completedIconAssertion();
312
- await (0, test_1.expect)(page.getByTestId('variables-list')).toBeVisible({
313
- timeout: 30000,
314
- });
310
+ await operateProcessInstancePage.assertVariablesListVisible();
315
311
  await (0, test_1.expect)(page.getByText('"Awesome!"')).toBeVisible({
316
312
  timeout: 60000,
317
313
  });
@@ -8,6 +8,7 @@ const optimizeReportUtils_1 = require("../../pages/SM-8.9/optimizeReportUtils");
8
8
  const loggingUtils_1 = require("../../utils/loggingUtils");
9
9
  const resetSession_1 = require("../../utils/resetSession");
10
10
  const KeycloakUtils_1 = require("../../pages/SM-8.9/KeycloakUtils");
11
+ const sleep_1 = require("../../utils/sleep");
11
12
  SM_8_9_1.test.describe.parallel('Smoke Tests', () => {
12
13
  SM_8_9_1.test.beforeEach(async ({ navigationPage, managementIdentityPage, keycloakLoginPage, keycloakAdminPage, page, browser, loginPage, ocIdentityHomePage, ocIdentityRolesPage, }, testInfo) => {
13
14
  if (process.env.IS_MIGRATION === 'true') {
@@ -130,7 +131,7 @@ SM_8_9_1.test.describe.parallel('Smoke Tests', () => {
130
131
  console.log(`[${testInfo.title}] Test end: timeout = ${testInfo.timeout}`);
131
132
  });
132
133
  // Skipped to unblock AG until failure is investigate
133
- SM_8_9_1.test.skip('Most Common REST Connector User Flow @tasklistV2', async ({ page, context, operateHomePage, modelerHomePage, modelerCreatePage, connectorSettingsPage, navigationPage, operateProcessesPage, operateProcessInstancePage, connectorMarketplacePage, }, testInfo) => {
134
+ SM_8_9_1.test.skip('Most Common REST Connector User Flow @tasklistV2', async ({ context, operateHomePage, modelerHomePage, modelerCreatePage, connectorSettingsPage, navigationPage, operateProcessesPage, operateProcessInstancePage, connectorMarketplacePage, }, testInfo) => {
134
135
  console.log(`[${testInfo.title}] Test start: timeout = ${testInfo.timeout}`);
135
136
  const processName = 'REST_Connector_Basic_Auth_Process' +
136
137
  (await (0, _setup_1.generateRandomStringAsync)(3));
@@ -144,6 +145,7 @@ SM_8_9_1.test.describe.parallel('Smoke Tests', () => {
144
145
  await SM_8_9_1.test.step('Create BPMN Diagram with REST Connector with Basic Auth and Start Process Instance', async () => {
145
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: 'username', password: 'password' });
146
147
  await modelerCreatePage.runProcessInstance();
148
+ await (0, sleep_1.sleep)(3000);
147
149
  });
148
150
  await SM_8_9_1.test.step('View Process Instance in Operate, assert it completes and assert result expression', async () => {
149
151
  await navigationPage.goToOperate();
@@ -151,11 +153,9 @@ SM_8_9_1.test.describe.parallel('Smoke Tests', () => {
151
153
  await operateProcessesPage.clickProcessInstanceLink(processName, 'completed');
152
154
  const result = await operateProcessInstancePage.assertEitherIncidentOrCompletedIconVisible();
153
155
  (0, test_1.expect)(result).toBe('completed');
154
- await (0, test_1.expect)(page.getByTestId('variables-list')).toBeVisible({
155
- timeout: 60000,
156
- });
157
- (0, test_1.expect)((await operateProcessInstancePage.connectorResultVariableName('message')).isVisible()).toBeTruthy();
158
- await (0, test_1.expect)(page.getByTestId('variable-message').getByText('"Message from Mock!"')).toBeVisible({ timeout: 60000 });
156
+ await operateProcessInstancePage.assertVariablesListVisible();
157
+ await operateProcessInstancePage.connectorResultVariableName('message');
158
+ await operateProcessInstancePage.assertProcessVariableContainsText('message', '"Message from Mock!"');
159
159
  });
160
160
  console.log(`[${testInfo.title}] Test end: timeout = ${testInfo.timeout}`);
161
161
  });
@@ -149,7 +149,7 @@ SM_8_9_1.test.describe('Web Modeler User Flow Tests', () => {
149
149
  await (0, fileUpload_1.uploadFile)(page, bpmnFileName);
150
150
  });
151
151
  await SM_8_9_1.test.step('Open uploaded BPMN diagram', async () => {
152
- await (0, sleep_1.sleep)(5000);
152
+ await (0, sleep_1.sleep)(3000); // Wait for file upload to be processed before clicking
153
153
  await modelerHomePage.clickProcessDiagram(bpmnFileName.replace('.bpmn', ''));
154
154
  await modelerCreatePage.clickDiagramBreadcrumb();
155
155
  await modelerCreatePage.clickEditDiagramNameButton();
@@ -159,13 +159,14 @@ SM_8_9_1.test.describe('Web Modeler User Flow Tests', () => {
159
159
  await modelerCreatePage.fillNameInput(processName);
160
160
  await modelerCreatePage.clickIdInput();
161
161
  await modelerCreatePage.fillIdInput(processName);
162
- await (0, sleep_1.sleep)(10000);
162
+ await (0, sleep_1.sleep)(2000); // Allow modeler auto-save to persist changes
163
163
  });
164
164
  await SM_8_9_1.test.step('Deploy and run process with variable', async () => {
165
165
  const variables = '{"myVar": 8}';
166
166
  await modelerCreatePage.runProcessInstance(variables);
167
167
  });
168
168
  await SM_8_9_1.test.step('View process instance in Operate and verify completion', async () => {
169
+ await (0, sleep_1.sleep)(3000); // Allow Zeebe to index the instance before navigating to Operate
169
170
  await navigationPage.goToOperate();
170
171
  await operateHomePage.clickProcessesTab();
171
172
  await operateProcessesPage.clickProcessInstanceLink(processName, 'completed');
@@ -176,11 +177,13 @@ SM_8_9_1.test.describe('Web Modeler User Flow Tests', () => {
176
177
  await SM_8_9_1.test.step('Navigate to Optimize and verify process in dashboard', async () => {
177
178
  await navigationPage.goToOptimize();
178
179
  await optimizeHomePage.clickDashboardLink();
179
- await (0, sleep_1.sleep)(60000);
180
+ await (0, sleep_1.sleep)(3000); // Brief wait for Optimize dashboard to initialize
180
181
  await page.reload();
181
182
  await optimizeDashboardPage.clickFilterTable();
182
183
  await optimizeDashboardPage.fillFilterTable(processName);
183
- await optimizeDashboardPage.processAssertion(processName);
184
+ await optimizeDashboardPage.processAssertion(processName, {
185
+ timeout: 60000,
186
+ });
184
187
  });
185
188
  }
186
189
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camunda/e2e-test-suite",
3
- "version": "0.0.422",
3
+ "version": "0.0.424",
4
4
  "description": "End-to-end test helpers for Camunda 8",
5
5
  "repository": {
6
6
  "type": "git",