@camunda/e2e-test-suite 0.0.880 → 0.0.882
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.
|
@@ -121,7 +121,11 @@ class ModelerCreatePage {
|
|
|
121
121
|
name: 'Change element',
|
|
122
122
|
exact: true,
|
|
123
123
|
});
|
|
124
|
-
|
|
124
|
+
// The change-element popup lists the project's deployed resources next to
|
|
125
|
+
// the built-in element types, so a role+name match on 'User task' is
|
|
126
|
+
// ambiguous whenever a diagram name contains it (e.g. "Optimize Job Worker
|
|
127
|
+
// User Task Diagram"). Target the built-in entry by its stable data-id.
|
|
128
|
+
this.userTaskOption = page.locator('.djs-popup-results [data-id="replace-with-user-task"]');
|
|
125
129
|
this.priorityInput = page.getByRole('textbox', { name: 'priority' });
|
|
126
130
|
this.appendEndEventButton = page.getByRole('button', {
|
|
127
131
|
name: 'Append end event',
|
|
@@ -161,10 +165,11 @@ class ModelerCreatePage {
|
|
|
161
165
|
this.deploySubButton = page.locator('[data-test="deploy-action"]');
|
|
162
166
|
this.cancelButton = page.getByRole('button', { name: 'Cancel' });
|
|
163
167
|
this.restConnectorOption = page.locator('[data-id="replace.template-io.camunda.connectors.HttpJson.v2"]');
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
+
// Change-element popup entries are `role="option"` under
|
|
169
|
+
// `.djs-popup-results`, and their accessible name now includes the entry
|
|
170
|
+
// description, so no role+name matcher resolves them. Target the stable
|
|
171
|
+
// element-template data-id instead (same selector the hub e2e suite uses).
|
|
172
|
+
this.webhookMessageStartEventConnectorOption = page.locator('.djs-popup-results [data-id="replace.template-io.camunda.connectors.webhook.WebhookConnectorStartMessage.v1"]');
|
|
168
173
|
this.webhookTab = page.getByRole('tab', { name: 'Webhook' });
|
|
169
174
|
this.webhookIsActiveButton = page.getByRole('button', {
|
|
170
175
|
name: 'Webhook is active in Test',
|
|
@@ -176,7 +181,7 @@ class ModelerCreatePage {
|
|
|
176
181
|
.first();
|
|
177
182
|
this.createTask = page.getByTitle('Create task');
|
|
178
183
|
this.createEndEvent = page.getByTitle('Create end event');
|
|
179
|
-
this.canvas = page.locator('
|
|
184
|
+
this.canvas = page.locator('.djs-container');
|
|
180
185
|
this.endEventCanvas = page.locator('[class="bjs-container"]');
|
|
181
186
|
this.connectToOtherElementButton = page.getByRole('button', {
|
|
182
187
|
name: 'Connect to other element',
|
|
@@ -198,9 +203,7 @@ class ModelerCreatePage {
|
|
|
198
203
|
this.intermediateBoundaryEvent = page.getByRole('button', {
|
|
199
204
|
name: 'Append intermediate/boundary',
|
|
200
205
|
});
|
|
201
|
-
this.intermediateWebhookConnectorOption = page.
|
|
202
|
-
name: 'Webhook Intermediate Event',
|
|
203
|
-
});
|
|
206
|
+
this.intermediateWebhookConnectorOption = page.locator('.djs-popup-results [data-id="replace.template-io.camunda.connectors.webhook.WebhookConnectorIntermediate.v1"]');
|
|
204
207
|
this.correlationKeyPayloadInput = page.getByLabel('Correlation key (payload)');
|
|
205
208
|
this.correlationKeyProcessInput = page.getByLabel('Correlation key (process)');
|
|
206
209
|
this.form = page.locator('[class="fjs-container"]');
|
|
@@ -243,7 +246,7 @@ class ModelerCreatePage {
|
|
|
243
246
|
this.secondPlacedGateway = page
|
|
244
247
|
.locator('[data-element-id*="Gateway"]')
|
|
245
248
|
.last();
|
|
246
|
-
this.serviceTaskOption = page.
|
|
249
|
+
this.serviceTaskOption = page.locator('.djs-popup-results [data-id="replace-with-service-task"]');
|
|
247
250
|
this.taskDefinitionPanel = page.locator('[data-group-id="group-taskDefinition"]');
|
|
248
251
|
this.jobTypeInput = page.getByRole('textbox', { name: /job type/i });
|
|
249
252
|
this.playTab = page.getByRole('tab', {
|
|
@@ -285,10 +288,7 @@ class ModelerCreatePage {
|
|
|
285
288
|
.getByText('zeebeClientId');
|
|
286
289
|
this.variableAssignmentValueTextboxThirdVariable = page.locator('#bio-properties-panel-StartEvent_1-output-2-source div');
|
|
287
290
|
this.connectorsDocHandlingStartEventElement = page.locator('g:nth-child(5) > .djs-element > .djs-hit');
|
|
288
|
-
this.timerEventOption = page.
|
|
289
|
-
name: 'Timer intermediate catch event',
|
|
290
|
-
exact: true,
|
|
291
|
-
});
|
|
291
|
+
this.timerEventOption = page.locator('.djs-popup-results [data-id="replace-with-timer-intermediate-catch"]');
|
|
292
292
|
this.timerEventSettings = page.getByText(/^Timer$/).first();
|
|
293
293
|
this.timerType = page.getByLabel('Type');
|
|
294
294
|
this.timerValue = page.getByLabel('Value');
|
|
@@ -774,7 +774,11 @@ class ModelerCreatePage {
|
|
|
774
774
|
await this.createEndEvent.click({ timeout: 60000 });
|
|
775
775
|
}
|
|
776
776
|
async clickCanvas() {
|
|
777
|
-
|
|
777
|
+
// Clicking the canvas centre lands on a shape (or an open create pad) as
|
|
778
|
+
// soon as the diagram has more than a couple of elements, and the click is
|
|
779
|
+
// then intercepted instead of clearing the selection. Click the empty
|
|
780
|
+
// gutter above the diagram and right of the palette instead.
|
|
781
|
+
await this.canvas.click({ timeout: 60000, position: { x: 150, y: 25 } });
|
|
778
782
|
}
|
|
779
783
|
async clickEndEventCanvas() {
|
|
780
784
|
await this.endEventCanvas.click({ timeout: 60000 });
|
|
@@ -4,6 +4,7 @@ declare class ConnectorMarketplacePage {
|
|
|
4
4
|
readonly searchForConnectorTextbox: Locator;
|
|
5
5
|
readonly downloadToProjectButton: Locator;
|
|
6
6
|
readonly replaceResourceButton: Locator;
|
|
7
|
+
readonly addToProjectButton: Locator;
|
|
7
8
|
readonly cancelButton: Locator;
|
|
8
9
|
constructor(page: Page);
|
|
9
10
|
clickSearchForConnectorTextbox(): Promise<void>;
|
|
@@ -7,6 +7,7 @@ class ConnectorMarketplacePage {
|
|
|
7
7
|
searchForConnectorTextbox;
|
|
8
8
|
downloadToProjectButton;
|
|
9
9
|
replaceResourceButton;
|
|
10
|
+
addToProjectButton;
|
|
10
11
|
cancelButton;
|
|
11
12
|
constructor(page) {
|
|
12
13
|
this.page = page;
|
|
@@ -18,6 +19,9 @@ class ConnectorMarketplacePage {
|
|
|
18
19
|
this.replaceResourceButton = page.getByRole('button', {
|
|
19
20
|
name: 'Replace resource',
|
|
20
21
|
});
|
|
22
|
+
this.addToProjectButton = page.getByRole('button', {
|
|
23
|
+
name: 'Add to project',
|
|
24
|
+
});
|
|
21
25
|
}
|
|
22
26
|
async clickSearchForConnectorTextbox() {
|
|
23
27
|
await this.searchForConnectorTextbox.click({ timeout: 60000 });
|
|
@@ -36,17 +40,28 @@ class ConnectorMarketplacePage {
|
|
|
36
40
|
async clickReplaceResourceButton() {
|
|
37
41
|
await this.replaceResourceButton.click({ timeout: 30000 });
|
|
38
42
|
}
|
|
43
|
+
// Hub only opens its ImportModal when the download needs confirmation, and the
|
|
44
|
+
// primary button depends on project state: "Add to project" when the template
|
|
45
|
+
// is not in the project yet, "Replace resource" when one already exists.
|
|
46
|
+
// "Cancel" aborts the import, so the primary button is chosen explicitly --
|
|
47
|
+
// racing the two clicks lets Cancel win and silently drops the template.
|
|
39
48
|
async downloadConnectorToProject() {
|
|
40
49
|
await this.clickDownloadToProjectButton();
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
50
|
+
const primaryButton = this.addToProjectButton.or(this.replaceResourceButton);
|
|
51
|
+
const modalOpened = await primaryButton
|
|
52
|
+
.first()
|
|
53
|
+
.waitFor({ state: 'visible', timeout: 20000 })
|
|
54
|
+
.then(() => true)
|
|
55
|
+
.catch(() => false);
|
|
56
|
+
if (!modalOpened) {
|
|
48
57
|
return;
|
|
49
58
|
}
|
|
59
|
+
if (await this.addToProjectButton.isVisible()) {
|
|
60
|
+
await this.addToProjectButton.click({ timeout: 20000 });
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
await this.replaceResourceButton.click({ timeout: 20000 });
|
|
64
|
+
}
|
|
50
65
|
}
|
|
51
66
|
// The marketplace search backend can transiently return HTTP 504
|
|
52
67
|
// ("upstream request timeout"), which leaves the modal in an error or
|
|
@@ -116,7 +116,8 @@ if (process.env.IS_DS === 'true') {
|
|
|
116
116
|
await operateProcessInstancePage.assertProcessVariableContainsText('Upload_Files', 'aws');
|
|
117
117
|
});
|
|
118
118
|
});
|
|
119
|
-
|
|
119
|
+
// Skipped due to bug #8162: https://github.com/camunda/connectors/issues/8162
|
|
120
|
+
SM_8_9_1.test.skip('Document Handling Connectors User Flow - AWS @tasklistV2', async ({ page, navigationPage, modelerHomePage, modelerCreatePage, operateHomePage, operateProcessesPage, connectorMarketplacePage, operateProcessInstancePage, ocIdentityHomePage, ocIdentityRolesPage, }) => {
|
|
120
121
|
const processName = 'Document_Handling_Connectors_User_Flow_AWS_Process' +
|
|
121
122
|
(await (0, _setup_1.generateRandomStringAsync)(3));
|
|
122
123
|
const baseURL = process.env.PLAYWRIGHT_BASE_URL ||
|