@camunda/e2e-test-suite 0.0.863 → 0.0.865
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/dist/pages/8.8/ClusterDetailsPage.d.ts +1 -0
- package/dist/pages/8.8/ClusterDetailsPage.js +26 -1
- package/dist/pages/8.8/ClusterSecretsPage.js +10 -1
- package/dist/pages/SM-8.10/NavigationPage.d.ts +1 -1
- package/dist/pages/SM-8.10/NavigationPage.js +2 -2
- package/dist/tests/SM-8.10/document-handling-user-flows.spec.js +9 -1
- package/package.json +1 -1
|
@@ -50,6 +50,7 @@ declare class ClusterDetailsPage {
|
|
|
50
50
|
readonly tasklistV2RadioButton: Locator;
|
|
51
51
|
constructor(page: Page);
|
|
52
52
|
clickAPITab(): Promise<void>;
|
|
53
|
+
dismissOopsIfPresent(): Promise<void>;
|
|
53
54
|
clickCreateClientButton(): Promise<void>;
|
|
54
55
|
clickClientNameTextbox(): Promise<void>;
|
|
55
56
|
fillClientNameTextbox(name: string): Promise<void>;
|
|
@@ -177,8 +177,33 @@ class ClusterDetailsPage {
|
|
|
177
177
|
await (0, test_1.expect)(this.apiTab).toBeVisible({ timeout: 60000 });
|
|
178
178
|
await this.apiTab.click({ timeout: 60000 });
|
|
179
179
|
}
|
|
180
|
+
async dismissOopsIfPresent() {
|
|
181
|
+
// The clients list panel sometimes lands in a Carbon "Oops ... something
|
|
182
|
+
// went wrong." state when a background ClustersService request fails on
|
|
183
|
+
// SaaS INT. The panel replaces the create-client button, so any click
|
|
184
|
+
// attempt will time out until the user clicks the inline Reload button.
|
|
185
|
+
const oopsHeading = this.page.getByRole('heading', { name: /Oops/i });
|
|
186
|
+
if (!(await oopsHeading.isVisible({ timeout: 1000 }).catch(() => false))) {
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
const reloadButton = this.page.getByRole('button', {
|
|
190
|
+
name: 'Reload',
|
|
191
|
+
exact: true,
|
|
192
|
+
});
|
|
193
|
+
if (await reloadButton.isVisible({ timeout: 1000 }).catch(() => false)) {
|
|
194
|
+
await reloadButton.click({ timeout: 15000 }).catch(() => { });
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
await this.page.reload();
|
|
198
|
+
}
|
|
199
|
+
await this.page.waitForLoadState('domcontentloaded');
|
|
200
|
+
}
|
|
180
201
|
async clickCreateClientButton() {
|
|
181
|
-
await (0, clickLocatorWithRetry_1.clickLocatorWithRetry)(this.page, this.createFirstClientButton.or(this.createNewClientButton)
|
|
202
|
+
await (0, clickLocatorWithRetry_1.clickLocatorWithRetry)(this.page, this.createFirstClientButton.or(this.createNewClientButton), {
|
|
203
|
+
preAction: async () => {
|
|
204
|
+
await this.dismissOopsIfPresent();
|
|
205
|
+
},
|
|
206
|
+
});
|
|
182
207
|
}
|
|
183
208
|
async clickClientNameTextbox() {
|
|
184
209
|
await this.clientNameTextbox.click({ timeout: 60000 });
|
|
@@ -216,9 +216,18 @@ class ClusterSecretsPage {
|
|
|
216
216
|
});
|
|
217
217
|
}
|
|
218
218
|
catch {
|
|
219
|
-
// Import dialog didn't close - press Escape and let assertSecretsOrCreate handle creation
|
|
219
|
+
// Import dialog didn't close - press Escape and let assertSecretsOrCreate handle creation.
|
|
220
|
+
// The dialog getting stuck like this is usually a transient "Oops ...
|
|
221
|
+
// something went wrong" error panel replacing its normal content after
|
|
222
|
+
// the import submission (observed in run 30063427178: the panel
|
|
223
|
+
// rendered inside the dialog with its own Reload button). Escape only
|
|
224
|
+
// force-dismisses the dialog chrome - the page behind it is left in
|
|
225
|
+
// the same broken state, so createNewSecretButton below never renders
|
|
226
|
+
// without a reload first.
|
|
220
227
|
await this.page.keyboard.press('Escape');
|
|
221
228
|
await (0, test_1.expect)(this.dialog).not.toBeVisible({ timeout: 10000 });
|
|
229
|
+
await this.page.reload();
|
|
230
|
+
await (0, sleep_1.sleep)(5000);
|
|
222
231
|
}
|
|
223
232
|
await (0, test_1.expect)(this.createNewSecretButton).toBeVisible({
|
|
224
233
|
timeout: 60000,
|
|
@@ -34,7 +34,7 @@ declare class NavigationPage {
|
|
|
34
34
|
goToOCAdmin(sleepTimeout?: number, credentials?: {
|
|
35
35
|
username: string;
|
|
36
36
|
password: string;
|
|
37
|
-
}): Promise<void>;
|
|
37
|
+
}, maxRetries?: number): Promise<void>;
|
|
38
38
|
goToClusters(sleepTimeout?: number, credentials?: {
|
|
39
39
|
username: string;
|
|
40
40
|
password: string;
|
|
@@ -175,8 +175,8 @@ class NavigationPage {
|
|
|
175
175
|
? lastError
|
|
176
176
|
: new Error(`goToKeycloak failed after ${maxRetries} attempts`);
|
|
177
177
|
}
|
|
178
|
-
async goToOCAdmin(sleepTimeout, credentials) {
|
|
179
|
-
await this.goTo(`${NORMALIZED_ORCHESTRATION_CONTEXT_PATH}/admin`, this.identityPageBanner, sleepTimeout, credentials, env_1.isOpenSearch ? 10 : 5);
|
|
178
|
+
async goToOCAdmin(sleepTimeout, credentials, maxRetries) {
|
|
179
|
+
await this.goTo(`${NORMALIZED_ORCHESTRATION_CONTEXT_PATH}/admin`, this.identityPageBanner, sleepTimeout, credentials, maxRetries ?? (env_1.isOpenSearch ? 10 : 5));
|
|
180
180
|
}
|
|
181
181
|
async goToClusters(sleepTimeout, credentials) {
|
|
182
182
|
await this.goTo(`${MODELER_CONTEXT_PATH}/clusters`, this.modelerPageBanner, sleepTimeout, credentials);
|
|
@@ -128,8 +128,16 @@ if (process.env.IS_DS === 'true') {
|
|
|
128
128
|
// application can take time to propagate; until it does, /admin
|
|
129
129
|
// redirects to /admin/forbidden and the navigation tabs never render.
|
|
130
130
|
// Re-navigate until the Roles tab is available to ride out that delay.
|
|
131
|
+
//
|
|
132
|
+
// goToOCAdmin's default retry count (5, with growing backoff) assumes
|
|
133
|
+
// a genuine login failure and can alone burn several minutes retrying
|
|
134
|
+
// one navigation attempt -- against a forbidden-redirect that clears
|
|
135
|
+
// the banner too, that single call can exhaust the whole outer
|
|
136
|
+
// toPass budget, leaving it effectively one shot instead of a real
|
|
137
|
+
// retry-until-propagated loop. Pass maxRetries=1 so each outer
|
|
138
|
+
// iteration fails fast and toPass gets many chances over 300s.
|
|
131
139
|
await (0, test_1.expect)(async () => {
|
|
132
|
-
await navigationPage.goToOCAdmin();
|
|
140
|
+
await navigationPage.goToOCAdmin(undefined, undefined, 1);
|
|
133
141
|
await (0, test_1.expect)(ocIdentityHomePage.rolesTab).toBeVisible({
|
|
134
142
|
timeout: 15000,
|
|
135
143
|
});
|