@camunda/e2e-test-suite 0.0.796 → 0.0.798

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.
@@ -21,6 +21,7 @@ declare class ClusterPage {
21
21
  readonly connectorSecretsTab: Locator;
22
22
  readonly createAClusterButton: Locator;
23
23
  readonly clusterVersionOption: Locator;
24
+ readonly generationSearchInput: Locator;
24
25
  readonly g3DevClusterType: Locator;
25
26
  readonly alphaTab: Locator;
26
27
  readonly devTab: Locator;
@@ -26,6 +26,7 @@ class ClusterPage {
26
26
  connectorSecretsTab;
27
27
  createAClusterButton;
28
28
  clusterVersionOption;
29
+ generationSearchInput;
29
30
  g3DevClusterType;
30
31
  alphaTab;
31
32
  devTab;
@@ -85,6 +86,7 @@ class ClusterPage {
85
86
  name: 'Create a Cluster',
86
87
  });
87
88
  this.clusterVersionOption = page.getByText(`${process.env.CLUSTER_VERSION}`, { exact: true });
89
+ this.generationSearchInput = page.getByPlaceholder('Search generations');
88
90
  this.g3DevClusterType = page.locator('label').filter({
89
91
  hasText: this.defaultClusterType,
90
92
  });
@@ -304,14 +306,36 @@ class ClusterPage {
304
306
  this.clickStableTab,
305
307
  this.clickAlphaTab,
306
308
  ];
307
- for (const clickTab of tabs) {
308
- try {
309
- await clickTab.call(this);
310
- await this.clusterVersionOption.click({ timeout: 60000 });
311
- return;
312
- }
313
- catch (error) {
314
- console.error('Error clicking tab or cluster version option:', error);
309
+ // The channel tabs no longer list every generation — the list is filtered
310
+ // by a "Search generations" box, and switching tabs clears that box. So on
311
+ // each channel we must (re)type the generation name before its option
312
+ // renders. A generation created via the API moments earlier can also take
313
+ // time to surface, so cycle through every channel repeatedly within a
314
+ // bounded budget (maxCycles * tabs * perTabTimeout) rather than a single
315
+ // pass, giving a late-propagating generation multiple chances on any channel.
316
+ const maxCycles = 6;
317
+ // Increased from 12 s: search results can take longer to render, especially
318
+ // on first load or when the backend is slow.
319
+ const perTabTimeout = 30000;
320
+ for (let cycle = 0; cycle < maxCycles; cycle++) {
321
+ for (const clickTab of tabs) {
322
+ try {
323
+ await clickTab.call(this);
324
+ // Some tabs (e.g. Stable, Alpha) show a flat list with no search box.
325
+ // Use a short isVisible() probe instead of a hard toBeVisible() assert
326
+ // so we still try clicking the option on those tabs.
327
+ const searchInputVisible = await this.generationSearchInput
328
+ .isVisible({ timeout: 3000 })
329
+ .catch(() => false);
330
+ if (searchInputVisible) {
331
+ await this.generationSearchInput.fill(`${process.env.CLUSTER_VERSION}`);
332
+ }
333
+ await this.clusterVersionOption.click({ timeout: perTabTimeout });
334
+ return;
335
+ }
336
+ catch (error) {
337
+ console.error(`Cycle ${cycle + 1}/${maxCycles}: cluster generation not found on this tab yet:`, error);
338
+ }
315
339
  }
316
340
  }
317
341
  throw new Error('Failed to find cluster generation');
@@ -20,6 +20,7 @@ declare class ClusterPage {
20
20
  readonly connectorSecretsTab: Locator;
21
21
  readonly createAClusterButton: Locator;
22
22
  readonly clusterVersionOption: Locator;
23
+ readonly generationSearchInput: Locator;
23
24
  readonly g3DevClusterType: Locator;
24
25
  readonly alphaTab: Locator;
25
26
  readonly devTab: Locator;
@@ -27,6 +27,7 @@ class ClusterPage {
27
27
  connectorSecretsTab;
28
28
  createAClusterButton;
29
29
  clusterVersionOption;
30
+ generationSearchInput;
30
31
  g3DevClusterType;
31
32
  alphaTab;
32
33
  devTab;
@@ -76,6 +77,7 @@ class ClusterPage {
76
77
  this.clusterVersionOption = page.getByText(process.env.CLUSTER_VERSION, {
77
78
  exact: true,
78
79
  });
80
+ this.generationSearchInput = page.getByPlaceholder('Search generations');
79
81
  this.g3DevClusterType = page.locator('label').filter({
80
82
  hasText: this.defaultClusterType,
81
83
  });
@@ -309,6 +311,12 @@ class ClusterPage {
309
311
  try {
310
312
  if (version === clusterVersions_1.ClusterVersion.EIGHT_SEVEN_SNAPSHOT) {
311
313
  await this.clickDevTab();
314
+ // The channel list is filtered by a "Search generations" box; type
315
+ // the generation name so its option renders before selecting it.
316
+ await (0, test_1.expect)(this.generationSearchInput).toBeVisible({
317
+ timeout: 60000,
318
+ });
319
+ await this.generationSearchInput.fill(version);
312
320
  await this.clusterVersionOption.scrollIntoViewIfNeeded();
313
321
  await (0, test_1.expect)(this.clusterVersionOption).toBeVisible({ timeout: 60000 });
314
322
  await this.clusterVersionOption.click({ timeout: 60000 });
@@ -318,6 +326,17 @@ class ClusterPage {
318
326
  for (const clickTab of tabs) {
319
327
  try {
320
328
  await clickTab.call(this);
329
+ // Switching channels clears the search box so re-type the
330
+ // generation name each time to filter it into the list.
331
+ // Some tabs (e.g. Stable, Alpha) show a flat list with no search
332
+ // input — probe with isVisible() so we still try clicking the
333
+ // option on those tabs instead of catching and moving on.
334
+ const searchInputVisible87 = await this.generationSearchInput
335
+ .isVisible({ timeout: 3000 })
336
+ .catch(() => false);
337
+ if (searchInputVisible87) {
338
+ await this.generationSearchInput.fill(version);
339
+ }
321
340
  await this.clusterVersionOption.click({ timeout: 30000 });
322
341
  return;
323
342
  }
@@ -18,6 +18,7 @@ declare class ClusterPage {
18
18
  readonly connectorSecretsTab: Locator;
19
19
  readonly createAClusterButton: Locator;
20
20
  readonly clusterVersionOption: Locator;
21
+ readonly generationSearchInput: Locator;
21
22
  readonly g3DevClusterType: Locator;
22
23
  readonly belgiumRegion: Locator;
23
24
  readonly londonRegion: Locator;
@@ -25,6 +25,7 @@ class ClusterPage {
25
25
  connectorSecretsTab;
26
26
  createAClusterButton;
27
27
  clusterVersionOption;
28
+ generationSearchInput;
28
29
  g3DevClusterType;
29
30
  belgiumRegion;
30
31
  londonRegion;
@@ -79,6 +80,7 @@ class ClusterPage {
79
80
  name: 'Create a Cluster',
80
81
  });
81
82
  this.clusterVersionOption = page.getByText(`${process.env.CLUSTER_VERSION}`, { exact: true });
83
+ this.generationSearchInput = page.getByPlaceholder('Search generations');
82
84
  this.g3DevClusterType = page.locator('label').filter({
83
85
  hasText: this.defaultClusterType,
84
86
  });
@@ -329,6 +331,12 @@ class ClusterPage {
329
331
  try {
330
332
  if (version === clusterVersions_1.ClusterVersion.EIGHT_EIGHT_SNAPSHOT) {
331
333
  await this.clickDevTab();
334
+ // The channel list is filtered by a "Search generations" box; type
335
+ // the generation name so its option renders before selecting it.
336
+ await (0, test_1.expect)(this.generationSearchInput).toBeVisible({
337
+ timeout: 60000,
338
+ });
339
+ await this.generationSearchInput.fill(version);
332
340
  await this.clusterVersionOption.scrollIntoViewIfNeeded();
333
341
  await (0, test_1.expect)(this.clusterVersionOption).toBeVisible({ timeout: 60000 });
334
342
  await this.clusterVersionOption.click({ timeout: 60000 });
@@ -337,6 +345,17 @@ class ClusterPage {
337
345
  for (const clickTab of tabs) {
338
346
  try {
339
347
  await clickTab.call(this);
348
+ // Switching channels clears the search box so re-type the
349
+ // generation name each time to filter it into the list.
350
+ // Some tabs (e.g. Stable, Alpha) show a flat list with no search
351
+ // input — probe with isVisible() so we still try clicking the
352
+ // option on those tabs instead of catching and moving on.
353
+ const searchInputVisible88 = await this.generationSearchInput
354
+ .isVisible({ timeout: 3000 })
355
+ .catch(() => false);
356
+ if (searchInputVisible88) {
357
+ await this.generationSearchInput.fill(version);
358
+ }
340
359
  await this.clusterVersionOption.click({ timeout: 30000 });
341
360
  return;
342
361
  }
@@ -315,15 +315,21 @@ class ClusterPage {
315
315
  // bounded budget (maxCycles * tabs * perTabTimeout) rather than a single
316
316
  // pass, giving a late-propagating generation multiple chances on any channel.
317
317
  const maxCycles = 6;
318
- const perTabTimeout = 12000;
318
+ // Increased from 12 s: search results can take longer to render.
319
+ const perTabTimeout = 30000;
319
320
  for (let cycle = 0; cycle < maxCycles; cycle++) {
320
321
  for (const clickTab of tabs) {
321
322
  try {
322
323
  await clickTab.call(this);
323
- await (0, test_1.expect)(this.generationSearchInput).toBeVisible({
324
- timeout: perTabTimeout,
325
- });
326
- await this.generationSearchInput.fill(`${process.env.CLUSTER_VERSION}`);
324
+ // Some tabs (e.g. Stable, Alpha) show a flat list with no search box.
325
+ // Use a short isVisible() probe instead of a hard toBeVisible() assert
326
+ // so we still try clicking the option on those tabs.
327
+ const searchInputVisible = await this.generationSearchInput
328
+ .isVisible({ timeout: 3000 })
329
+ .catch(() => false);
330
+ if (searchInputVisible) {
331
+ await this.generationSearchInput.fill(`${process.env.CLUSTER_VERSION}`);
332
+ }
327
333
  await this.clusterVersionOption.click({ timeout: perTabTimeout });
328
334
  return;
329
335
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camunda/e2e-test-suite",
3
- "version": "0.0.796",
3
+ "version": "0.0.798",
4
4
  "description": "End-to-end test helpers for Camunda 8",
5
5
  "repository": {
6
6
  "type": "git",