@camunda/e2e-test-suite 0.0.548 → 0.0.550
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/SM-8.10/ModelerHomePage.js +6 -2
- package/dist/pages/SM-8.10/OperateProcessesPage.js +42 -29
- package/dist/pages/SM-8.8/ModelerHomePage.d.ts +1 -0
- package/dist/pages/SM-8.8/ModelerHomePage.js +21 -4
- package/dist/pages/SM-8.9/ModelerHomePage.d.ts +1 -0
- package/dist/pages/SM-8.9/ModelerHomePage.js +21 -4
- package/dist/pages/SM-8.9/OperateProcessesPage.js +2 -2
- package/package.json +1 -1
|
@@ -73,12 +73,16 @@ class ModelerHomePage {
|
|
|
73
73
|
await (0, expectLocatorWithRetry_1.expectLocatorWithRetry)(this.page, this.createNewProjectButton, {
|
|
74
74
|
totalTimeout: 30000,
|
|
75
75
|
});
|
|
76
|
-
//
|
|
77
|
-
//
|
|
76
|
+
// Modals (WhatsNew, "BPMN conditional events", etc.) render lazily after
|
|
77
|
+
// page load and intercept clicks on the button underneath. Dismiss them.
|
|
78
78
|
await this.closeButton
|
|
79
79
|
.waitFor({ state: 'visible', timeout: 5000 })
|
|
80
80
|
.then(() => this.closeButton.click())
|
|
81
81
|
.catch(() => { });
|
|
82
|
+
await this.modalCloseButton
|
|
83
|
+
.waitFor({ state: 'visible', timeout: 2000 })
|
|
84
|
+
.then(() => this.modalCloseButton.click())
|
|
85
|
+
.catch(() => { });
|
|
82
86
|
await this.createNewProjectButton.click();
|
|
83
87
|
}
|
|
84
88
|
async enterNewProjectName(name) {
|
|
@@ -24,18 +24,12 @@ class OperateProcessesPage {
|
|
|
24
24
|
this.page = page;
|
|
25
25
|
this.processResultCount = page.getByTestId('result-count');
|
|
26
26
|
this.processesTabLink = page.getByRole('link', { name: 'Processes' });
|
|
27
|
-
this.processActiveCheckbox = page
|
|
28
|
-
|
|
29
|
-
.filter({ hasText: 'Active' });
|
|
30
|
-
this.processCompletedCheckbox = page
|
|
31
|
-
.locator('label')
|
|
32
|
-
.filter({ hasText: 'Completed' });
|
|
27
|
+
this.processActiveCheckbox = page.locator('input#active');
|
|
28
|
+
this.processCompletedCheckbox = page.locator('input#completed');
|
|
33
29
|
this.processRunningInstancesCheckbox = page
|
|
34
|
-
.
|
|
35
|
-
.
|
|
36
|
-
this.processIncidentsCheckbox = page
|
|
37
|
-
.locator('label')
|
|
38
|
-
.filter({ hasText: 'Incidents' });
|
|
30
|
+
.getByTestId('filter-running-instances')
|
|
31
|
+
.getByRole('checkbox');
|
|
32
|
+
this.processIncidentsCheckbox = page.locator('input#incidents');
|
|
39
33
|
this.processPageHeading = page
|
|
40
34
|
.getByTestId('expanded-panel')
|
|
41
35
|
.getByRole('heading', { name: 'Process' });
|
|
@@ -53,22 +47,22 @@ class OperateProcessesPage {
|
|
|
53
47
|
this.gotItButton = page.getByRole('button', { name: 'Got it' });
|
|
54
48
|
}
|
|
55
49
|
async checkCheckbox(checkbox) {
|
|
56
|
-
await checkbox.waitFor({ state: '
|
|
50
|
+
await checkbox.waitFor({ state: 'attached', timeout: constants_1._1_SECOND_IN_MS * 10 });
|
|
57
51
|
if (!(await checkbox.isChecked())) {
|
|
58
|
-
await checkbox.
|
|
52
|
+
await checkbox.check({ force: true, timeout: constants_1._1_SECOND_IN_MS * 30 });
|
|
59
53
|
await (0, test_1.expect)(checkbox).toBeChecked({
|
|
60
54
|
checked: true,
|
|
61
|
-
timeout: constants_1._1_SECOND_IN_MS *
|
|
55
|
+
timeout: constants_1._1_SECOND_IN_MS * 30,
|
|
62
56
|
});
|
|
63
57
|
}
|
|
64
58
|
}
|
|
65
59
|
async uncheckCheckbox(checkbox) {
|
|
66
|
-
await checkbox.waitFor({ state: '
|
|
60
|
+
await checkbox.waitFor({ state: 'attached', timeout: constants_1._1_SECOND_IN_MS * 10 });
|
|
67
61
|
if (await checkbox.isChecked()) {
|
|
68
|
-
await checkbox.
|
|
62
|
+
await checkbox.uncheck({ force: true, timeout: constants_1._1_SECOND_IN_MS * 30 });
|
|
69
63
|
await (0, test_1.expect)(checkbox).toBeChecked({
|
|
70
64
|
checked: false,
|
|
71
|
-
timeout: constants_1._1_SECOND_IN_MS *
|
|
65
|
+
timeout: constants_1._1_SECOND_IN_MS * 30,
|
|
72
66
|
});
|
|
73
67
|
}
|
|
74
68
|
}
|
|
@@ -82,7 +76,7 @@ class OperateProcessesPage {
|
|
|
82
76
|
await this.uncheckCompletedCheckbox();
|
|
83
77
|
await this.clickProcessIncidentsCheckbox();
|
|
84
78
|
await this.processActiveCheckbox.waitFor({
|
|
85
|
-
state: '
|
|
79
|
+
state: 'attached',
|
|
86
80
|
timeout: constants_1._1_SECOND_IN_MS * 10,
|
|
87
81
|
});
|
|
88
82
|
if (await this.processActiveCheckbox.isChecked({ timeout: constants_1._1_SECOND_IN_MS })) {
|
|
@@ -98,7 +92,7 @@ class OperateProcessesPage {
|
|
|
98
92
|
await this.uncheckActiveCheckbox();
|
|
99
93
|
await this.clickProcessIncidentsCheckbox();
|
|
100
94
|
await this.processCompletedCheckbox.waitFor({
|
|
101
|
-
state: '
|
|
95
|
+
state: 'attached',
|
|
102
96
|
timeout: constants_1._1_SECOND_IN_MS * 10,
|
|
103
97
|
});
|
|
104
98
|
if (await this.processCompletedCheckbox.isChecked({ timeout: constants_1._1_SECOND_IN_MS })) {
|
|
@@ -142,11 +136,11 @@ class OperateProcessesPage {
|
|
|
142
136
|
}
|
|
143
137
|
async clickProcessActiveCheckbox() {
|
|
144
138
|
await this.processActiveCheckbox.waitFor({
|
|
145
|
-
state: '
|
|
139
|
+
state: 'attached',
|
|
146
140
|
timeout: constants_1._1_SECOND_IN_MS * 10,
|
|
147
141
|
});
|
|
148
|
-
if (!(await this.processActiveCheckbox.isChecked(
|
|
149
|
-
await this.processActiveCheckbox.
|
|
142
|
+
if (!(await this.processActiveCheckbox.isChecked())) {
|
|
143
|
+
await this.processActiveCheckbox.check({ force: true, timeout: 120000 });
|
|
150
144
|
await (0, test_1.expect)(this.processActiveCheckbox).toBeChecked({
|
|
151
145
|
checked: true,
|
|
152
146
|
timeout: constants_1._1_SECOND_IN_MS * 5,
|
|
@@ -155,11 +149,11 @@ class OperateProcessesPage {
|
|
|
155
149
|
}
|
|
156
150
|
async clickProcessCompletedCheckbox() {
|
|
157
151
|
await this.processCompletedCheckbox.waitFor({
|
|
158
|
-
state: '
|
|
152
|
+
state: 'attached',
|
|
159
153
|
timeout: constants_1._1_SECOND_IN_MS * 10,
|
|
160
154
|
});
|
|
161
|
-
if (!(await this.processCompletedCheckbox.isChecked(
|
|
162
|
-
await this.processCompletedCheckbox.
|
|
155
|
+
if (!(await this.processCompletedCheckbox.isChecked())) {
|
|
156
|
+
await this.processCompletedCheckbox.check({ force: true, timeout: 120000 });
|
|
163
157
|
await (0, test_1.expect)(this.processCompletedCheckbox).toBeChecked({
|
|
164
158
|
checked: true,
|
|
165
159
|
timeout: constants_1._1_SECOND_IN_MS * 5,
|
|
@@ -168,11 +162,19 @@ class OperateProcessesPage {
|
|
|
168
162
|
}
|
|
169
163
|
async clickProcessIncidentsCheckbox() {
|
|
170
164
|
await this.processIncidentsCheckbox.waitFor({
|
|
171
|
-
state: '
|
|
165
|
+
state: 'attached',
|
|
172
166
|
timeout: constants_1._1_SECOND_IN_MS * 10,
|
|
173
167
|
});
|
|
174
168
|
const wasChecked = await this.processIncidentsCheckbox.isChecked();
|
|
175
|
-
|
|
169
|
+
if (wasChecked) {
|
|
170
|
+
await this.processIncidentsCheckbox.uncheck({
|
|
171
|
+
force: true,
|
|
172
|
+
timeout: 90000,
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
await this.processIncidentsCheckbox.check({ force: true, timeout: 90000 });
|
|
177
|
+
}
|
|
176
178
|
await (0, test_1.expect)(this.processIncidentsCheckbox).toBeChecked({
|
|
177
179
|
checked: !wasChecked,
|
|
178
180
|
timeout: constants_1._1_SECOND_IN_MS * 5,
|
|
@@ -180,11 +182,22 @@ class OperateProcessesPage {
|
|
|
180
182
|
}
|
|
181
183
|
async clickRunningProcessInstancesCheckbox() {
|
|
182
184
|
await this.processRunningInstancesCheckbox.waitFor({
|
|
183
|
-
state: '
|
|
185
|
+
state: 'attached',
|
|
184
186
|
timeout: constants_1._1_SECOND_IN_MS * 10,
|
|
185
187
|
});
|
|
186
188
|
const wasChecked = await this.processRunningInstancesCheckbox.isChecked();
|
|
187
|
-
|
|
189
|
+
if (wasChecked) {
|
|
190
|
+
await this.processRunningInstancesCheckbox.uncheck({
|
|
191
|
+
force: true,
|
|
192
|
+
timeout: 90000,
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
await this.processRunningInstancesCheckbox.check({
|
|
197
|
+
force: true,
|
|
198
|
+
timeout: 90000,
|
|
199
|
+
});
|
|
200
|
+
}
|
|
188
201
|
await (0, test_1.expect)(this.processRunningInstancesCheckbox).toBeChecked({
|
|
189
202
|
checked: !wasChecked,
|
|
190
203
|
timeout: constants_1._1_SECOND_IN_MS * 5,
|
|
@@ -23,6 +23,7 @@ declare class ModelerHomePage {
|
|
|
23
23
|
readonly uploadFilesButton: Locator;
|
|
24
24
|
readonly messageBanner: Locator;
|
|
25
25
|
readonly closeButton: Locator;
|
|
26
|
+
readonly modalCloseButton: Locator;
|
|
26
27
|
readonly idpTemplateOption: Locator;
|
|
27
28
|
readonly idpApplicationNameInput: Locator;
|
|
28
29
|
readonly dialog: Locator;
|
|
@@ -28,6 +28,7 @@ class ModelerHomePage {
|
|
|
28
28
|
uploadFilesButton;
|
|
29
29
|
messageBanner;
|
|
30
30
|
closeButton;
|
|
31
|
+
modalCloseButton;
|
|
31
32
|
idpTemplateOption;
|
|
32
33
|
idpApplicationNameInput;
|
|
33
34
|
dialog;
|
|
@@ -71,6 +72,7 @@ class ModelerHomePage {
|
|
|
71
72
|
this.uploadFilesButton = page.getByRole('menuitem', { name: 'Upload files' });
|
|
72
73
|
this.messageBanner = page.locator('[data-test="close-top-banner"]');
|
|
73
74
|
this.closeButton = page.getByRole('button', { name: 'Got it - Dismiss' });
|
|
75
|
+
this.modalCloseButton = page.locator('.cds--modal.is-visible .cds--modal-close');
|
|
74
76
|
this.idpTemplateOption = page
|
|
75
77
|
.locator('[data-test="create-idp-application"]')
|
|
76
78
|
.getByText('IDP Application');
|
|
@@ -85,6 +87,16 @@ class ModelerHomePage {
|
|
|
85
87
|
await (0, expectLocatorWithRetry_1.expectLocatorWithRetry)(this.page, this.createNewProjectButton, {
|
|
86
88
|
totalTimeout: 30000,
|
|
87
89
|
});
|
|
90
|
+
// Modals (WhatsNew, "BPMN conditional events", etc.) render lazily after
|
|
91
|
+
// page load and intercept clicks on the button underneath. Dismiss them.
|
|
92
|
+
await this.closeButton
|
|
93
|
+
.waitFor({ state: 'visible', timeout: 5000 })
|
|
94
|
+
.then(() => this.closeButton.click())
|
|
95
|
+
.catch(() => { });
|
|
96
|
+
await this.modalCloseButton
|
|
97
|
+
.waitFor({ state: 'visible', timeout: 2000 })
|
|
98
|
+
.then(() => this.modalCloseButton.click())
|
|
99
|
+
.catch(() => { });
|
|
88
100
|
await this.createNewProjectButton.click();
|
|
89
101
|
}
|
|
90
102
|
async enterNewProjectName(name) {
|
|
@@ -177,10 +189,15 @@ class ModelerHomePage {
|
|
|
177
189
|
}
|
|
178
190
|
async clickMessageBanner() {
|
|
179
191
|
try {
|
|
180
|
-
|
|
181
|
-
this.
|
|
182
|
-
this.
|
|
183
|
-
|
|
192
|
+
const banner = this.messageBanner
|
|
193
|
+
.or(this.closeButton)
|
|
194
|
+
.or(this.modalCloseButton);
|
|
195
|
+
if (await banner.isVisible({ timeout: 2000 })) {
|
|
196
|
+
await banner.click();
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
console.log('No banner or close button found to click');
|
|
200
|
+
}
|
|
184
201
|
}
|
|
185
202
|
catch {
|
|
186
203
|
console.log('No banner or close button found to click');
|
|
@@ -23,6 +23,7 @@ declare class ModelerHomePage {
|
|
|
23
23
|
readonly uploadFilesButton: Locator;
|
|
24
24
|
readonly messageBanner: Locator;
|
|
25
25
|
readonly closeButton: Locator;
|
|
26
|
+
readonly modalCloseButton: Locator;
|
|
26
27
|
constructor(page: Page);
|
|
27
28
|
clickCreateNewProjectButton(): Promise<void>;
|
|
28
29
|
enterNewProjectName(name: string): Promise<void>;
|
|
@@ -28,6 +28,7 @@ class ModelerHomePage {
|
|
|
28
28
|
uploadFilesButton;
|
|
29
29
|
messageBanner;
|
|
30
30
|
closeButton;
|
|
31
|
+
modalCloseButton;
|
|
31
32
|
constructor(page) {
|
|
32
33
|
this.page = page;
|
|
33
34
|
this.modelerPageBanner = page
|
|
@@ -71,11 +72,22 @@ class ModelerHomePage {
|
|
|
71
72
|
this.uploadFilesButton = page.getByRole('menuitem', { name: 'Upload files' });
|
|
72
73
|
this.messageBanner = page.locator('[data-test="close-top-banner"]');
|
|
73
74
|
this.closeButton = page.getByRole('button', { name: 'Got it - Dismiss' });
|
|
75
|
+
this.modalCloseButton = page.locator('.cds--modal.is-visible .cds--modal-close');
|
|
74
76
|
}
|
|
75
77
|
async clickCreateNewProjectButton() {
|
|
76
78
|
await (0, expectLocatorWithRetry_1.expectLocatorWithRetry)(this.page, this.createNewProjectButton, {
|
|
77
79
|
totalTimeout: 60000,
|
|
78
80
|
});
|
|
81
|
+
// Modals (WhatsNew, "BPMN conditional events", etc.) render lazily after
|
|
82
|
+
// page load and intercept clicks on the button underneath. Dismiss them.
|
|
83
|
+
await this.closeButton
|
|
84
|
+
.waitFor({ state: 'visible', timeout: 5000 })
|
|
85
|
+
.then(() => this.closeButton.click())
|
|
86
|
+
.catch(() => { });
|
|
87
|
+
await this.modalCloseButton
|
|
88
|
+
.waitFor({ state: 'visible', timeout: 2000 })
|
|
89
|
+
.then(() => this.modalCloseButton.click())
|
|
90
|
+
.catch(() => { });
|
|
79
91
|
await this.createNewProjectButton.click();
|
|
80
92
|
}
|
|
81
93
|
async enterNewProjectName(name) {
|
|
@@ -189,10 +201,15 @@ class ModelerHomePage {
|
|
|
189
201
|
}
|
|
190
202
|
async clickMessageBanner() {
|
|
191
203
|
try {
|
|
192
|
-
|
|
193
|
-
this.
|
|
194
|
-
this.
|
|
195
|
-
|
|
204
|
+
const banner = this.messageBanner
|
|
205
|
+
.or(this.closeButton)
|
|
206
|
+
.or(this.modalCloseButton);
|
|
207
|
+
if (await banner.isVisible({ timeout: 2000 })) {
|
|
208
|
+
await banner.click();
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
console.log('No banner or close button found to click');
|
|
212
|
+
}
|
|
196
213
|
}
|
|
197
214
|
catch {
|
|
198
215
|
console.log('No banner or close button found to click');
|
|
@@ -52,7 +52,7 @@ class OperateProcessesPage {
|
|
|
52
52
|
await checkbox.check({ force: true, timeout: constants_1._1_SECOND_IN_MS * 30 });
|
|
53
53
|
await (0, test_1.expect)(checkbox).toBeChecked({
|
|
54
54
|
checked: true,
|
|
55
|
-
timeout: constants_1._1_SECOND_IN_MS *
|
|
55
|
+
timeout: constants_1._1_SECOND_IN_MS * 30,
|
|
56
56
|
});
|
|
57
57
|
}
|
|
58
58
|
}
|
|
@@ -62,7 +62,7 @@ class OperateProcessesPage {
|
|
|
62
62
|
await checkbox.uncheck({ force: true, timeout: constants_1._1_SECOND_IN_MS * 30 });
|
|
63
63
|
await (0, test_1.expect)(checkbox).toBeChecked({
|
|
64
64
|
checked: false,
|
|
65
|
-
timeout: constants_1._1_SECOND_IN_MS *
|
|
65
|
+
timeout: constants_1._1_SECOND_IN_MS * 30,
|
|
66
66
|
});
|
|
67
67
|
}
|
|
68
68
|
}
|