d5-testing-library 1.5.0 → 1.7.0-alpha.0
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/FormEdit-2OXEIJRD.mjs +7 -0
- package/dist/ListForm-NWULJ2P6.mjs +7 -0
- package/dist/TreeView-USLYNLBL.mjs +8 -0
- package/dist/{chunk-FP26UOTI.mjs → chunk-H6LCUGIP.mjs} +1 -1
- package/dist/{chunk-VWNH6HVN.mjs → chunk-ISIVPVER.mjs} +152 -32
- package/dist/{chunk-44JIUIEW.mjs → chunk-M7ZEJQ34.mjs} +1 -1
- package/dist/{chunk-NWWYF43G.mjs → chunk-PVVYHCDQ.mjs} +124 -2
- package/dist/cjs/d5-testing-library.cjs +1407 -995
- package/dist/d5-testing-library.d.ts +194 -64
- package/dist/d5-testing-library.legacy-esm.js +137 -8
- package/dist/d5-testing-library.mjs +137 -8
- package/package.json +4 -2
- package/dist/FormEdit-MZJH5R5H.mjs +0 -7
- package/dist/ListForm-HDVXB6CG.mjs +0 -7
- package/dist/TreeView-DE5RBMDD.mjs +0 -8
|
@@ -1,21 +1,22 @@
|
|
|
1
1
|
import {
|
|
2
2
|
TreeView
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-M7ZEJQ34.mjs";
|
|
4
4
|
import {
|
|
5
5
|
FilterPanel,
|
|
6
6
|
FormFilterField,
|
|
7
7
|
ListForm,
|
|
8
8
|
PanelFilterField
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-PVVYHCDQ.mjs";
|
|
10
10
|
import {
|
|
11
11
|
FormEdit
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-H6LCUGIP.mjs";
|
|
13
13
|
import {
|
|
14
14
|
AbstractButton,
|
|
15
15
|
AbstractElement,
|
|
16
16
|
AbstractElementWithParent,
|
|
17
17
|
AbstractPage,
|
|
18
18
|
ControlClass,
|
|
19
|
+
DX_CLEAR_BUTTON_AREA,
|
|
19
20
|
FormField,
|
|
20
21
|
NumberEditor,
|
|
21
22
|
TextEditor,
|
|
@@ -23,11 +24,13 @@ import {
|
|
|
23
24
|
byTestIdCssSelector,
|
|
24
25
|
click,
|
|
25
26
|
config,
|
|
27
|
+
createSubSystemTestId,
|
|
26
28
|
editorFactory,
|
|
29
|
+
fixElementStaleError,
|
|
27
30
|
readonlyLocator,
|
|
28
31
|
wait,
|
|
29
32
|
waitElementIsVisible
|
|
30
|
-
} from "./chunk-
|
|
33
|
+
} from "./chunk-ISIVPVER.mjs";
|
|
31
34
|
|
|
32
35
|
// src/pageObjects/pages/LoginPage.ts
|
|
33
36
|
var LOGIN_PATH = "/login";
|
|
@@ -103,6 +106,36 @@ var SubsystemsPanelHeader = class extends AbstractElementWithParent {
|
|
|
103
106
|
};
|
|
104
107
|
|
|
105
108
|
// src/pageObjects/elements/SubsystemsPanel/SubsystemsPanel.ts
|
|
109
|
+
import { By as By3 } from "selenium-webdriver";
|
|
110
|
+
|
|
111
|
+
// src/pageObjects/elements/SubsystemsPanel/SubsystemItem.ts
|
|
112
|
+
var SubsystemItem = class {
|
|
113
|
+
bySelector;
|
|
114
|
+
driver;
|
|
115
|
+
constructor({ driver, bySelector }) {
|
|
116
|
+
this.bySelector = bySelector;
|
|
117
|
+
this.driver = driver;
|
|
118
|
+
}
|
|
119
|
+
async getElement() {
|
|
120
|
+
return fixElementStaleError(this.bySelector, this.driver);
|
|
121
|
+
}
|
|
122
|
+
async getTitle() {
|
|
123
|
+
const el = await this.getElement();
|
|
124
|
+
return await el.getAttribute("data-title");
|
|
125
|
+
}
|
|
126
|
+
async click() {
|
|
127
|
+
const el = await this.getElement();
|
|
128
|
+
await click(el, this.driver);
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
// src/pageObjects/elements/SubsystemsPanel/SubsystemsPanel.ts
|
|
133
|
+
var SEARCH_ITEM_SELECTOR = "search-item";
|
|
134
|
+
var BACK_BUTTON_SELECTOR = "subsystem-back-item";
|
|
135
|
+
var SEARCH_INPUT_SELECTOR = "search-subsystem-input";
|
|
136
|
+
var byTitleCssSelector = (title) => {
|
|
137
|
+
return `span[data-title="${title}"]`;
|
|
138
|
+
};
|
|
106
139
|
var SubsystemsPanel = class extends AbstractElement {
|
|
107
140
|
header;
|
|
108
141
|
constructor(driver) {
|
|
@@ -114,10 +147,105 @@ var SubsystemsPanel = class extends AbstractElement {
|
|
|
114
147
|
await wait(async () => await title.getText() != "", this.driver);
|
|
115
148
|
return title.getText();
|
|
116
149
|
}
|
|
150
|
+
getSearchComponent() {
|
|
151
|
+
return new TextEditor("#aside", byTestIdCssSelector(SEARCH_INPUT_SELECTOR));
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Находит сабсистему по заголовку
|
|
155
|
+
* @example
|
|
156
|
+
* const subsystemsPanel= new SubsystemsPanel();
|
|
157
|
+
* //...
|
|
158
|
+
* await subsystemsPanel.search('SubSystemTitle');
|
|
159
|
+
*/
|
|
160
|
+
async search(title) {
|
|
161
|
+
const searchComponent = this.getSearchComponent();
|
|
162
|
+
await searchComponent.setValue(title);
|
|
163
|
+
await wait(
|
|
164
|
+
async () => {
|
|
165
|
+
const findElement = await this.itemByTitle(title).getElement();
|
|
166
|
+
const classes = await findElement.getAttribute("class");
|
|
167
|
+
return classes.includes(SEARCH_ITEM_SELECTOR);
|
|
168
|
+
},
|
|
169
|
+
this.driver,
|
|
170
|
+
`Cannot find element: ${title}`
|
|
171
|
+
);
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Очищает поиск сабсистем
|
|
175
|
+
* @example
|
|
176
|
+
* const subsystemsPanel= new SubsystemsPanel();
|
|
177
|
+
* //...
|
|
178
|
+
* await subsystemsPanel.searchClear();
|
|
179
|
+
*/
|
|
180
|
+
async searchClear() {
|
|
181
|
+
const clearBtnSelector = `#aside ${byTestIdCssSelector(SEARCH_INPUT_SELECTOR)} .${DX_CLEAR_BUTTON_AREA}`;
|
|
182
|
+
const clearBtn = await this.driver.findElement(By3.css(clearBtnSelector));
|
|
183
|
+
if (await clearBtn.isDisplayed()) {
|
|
184
|
+
await click(clearBtn, this.driver);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Возвращает сабсистему по имени
|
|
189
|
+
* @example
|
|
190
|
+
* const subsystemsPanel= new SubsystemsPanel();
|
|
191
|
+
* //...
|
|
192
|
+
* const subsystem = subsystemsPanel.item('SubSystemName');
|
|
193
|
+
*/
|
|
194
|
+
item(name) {
|
|
195
|
+
const elementCSS = createSubSystemTestId(name);
|
|
196
|
+
return new SubsystemItem({ driver: this.driver, bySelector: By3.css(`${byTestIdCssSelector(elementCSS, "span")}`) });
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Возвращает сабсистему по заголовку
|
|
200
|
+
* @example
|
|
201
|
+
* const subsystemsPanel= new SubsystemsPanel();
|
|
202
|
+
* //...
|
|
203
|
+
* const subsystem = subsystemsPanel.itemByTitle('SubSystemTitle');
|
|
204
|
+
*/
|
|
205
|
+
itemByTitle(title) {
|
|
206
|
+
return new SubsystemItem({ driver: this.driver, bySelector: By3.css(byTitleCssSelector(title)) });
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Возвращается на уровень выше по сабсистемам
|
|
210
|
+
* @example
|
|
211
|
+
* const subsystemsPanel= new SubsystemsPanel();
|
|
212
|
+
* //...
|
|
213
|
+
* wait subsystemsPanel.back();
|
|
214
|
+
*/
|
|
215
|
+
async back() {
|
|
216
|
+
const backButton = this.driver.findElement(By3.css(`#aside .${BACK_BUTTON_SELECTOR}`));
|
|
217
|
+
await waitElementIsVisible(
|
|
218
|
+
{
|
|
219
|
+
element: backButton,
|
|
220
|
+
driver: this.driver
|
|
221
|
+
}
|
|
222
|
+
);
|
|
223
|
+
await click(backButton, this.driver);
|
|
224
|
+
}
|
|
225
|
+
};
|
|
226
|
+
|
|
227
|
+
// src/pageObjects/elements/Forms/ReportForm.ts
|
|
228
|
+
import { By as By4 } from "selenium-webdriver";
|
|
229
|
+
var ReportForm = class extends FormEdit {
|
|
230
|
+
constructor(driver) {
|
|
231
|
+
super(driver);
|
|
232
|
+
this.popupContainerCssSelector = `.popup .form-report-${this.formName}`;
|
|
233
|
+
this.saveButtonBy = By4.id("button-apply");
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Знаходить поле/фільтр у формі репорту за ім'ям
|
|
237
|
+
* @example
|
|
238
|
+
* const formReport = new MyForm();
|
|
239
|
+
* //...
|
|
240
|
+
* expect(await formReport.filterField('Name').getValue()).toBe('test value');
|
|
241
|
+
*/
|
|
242
|
+
filterField(name) {
|
|
243
|
+
return super.field(name);
|
|
244
|
+
}
|
|
117
245
|
};
|
|
118
246
|
|
|
119
247
|
// src/pageObjects/elements/Dialog.ts
|
|
120
|
-
import { By as
|
|
248
|
+
import { By as By5 } from "selenium-webdriver";
|
|
121
249
|
var DIALOG_CLASS = ".d5-dialog";
|
|
122
250
|
var DIALOG_TITLE_CLASS = ".dialog__title";
|
|
123
251
|
var DIALOG_TEXT_CLASS = ".dialog__text";
|
|
@@ -131,7 +259,7 @@ var DialogButton = class extends AbstractButton {
|
|
|
131
259
|
}
|
|
132
260
|
async getElement() {
|
|
133
261
|
const panel = await super.getElement();
|
|
134
|
-
return panel.findElement(
|
|
262
|
+
return panel.findElement(By5.xpath(buttonByTextXpath(this.text)));
|
|
135
263
|
}
|
|
136
264
|
buttonNotDisplayedError() {
|
|
137
265
|
return `Dialog button ${this.text} cannot be clicked. It is not displayed or it is disabled`;
|
|
@@ -151,11 +279,11 @@ var Dialog = class extends AbstractElement {
|
|
|
151
279
|
return this.joinRelativeCssSelectors([DIALOG_CLASS, DIALOG_BUTTONS_PANEL_CLASS]);
|
|
152
280
|
}
|
|
153
281
|
async title() {
|
|
154
|
-
const el = await this.driver.findElement(
|
|
282
|
+
const el = await this.driver.findElement(By5.css(this.titleSelector));
|
|
155
283
|
return await el.getText();
|
|
156
284
|
}
|
|
157
285
|
async text() {
|
|
158
|
-
const el = await this.driver.findElement(
|
|
286
|
+
const el = await this.driver.findElement(By5.css(this.textSelector));
|
|
159
287
|
return await el.getText();
|
|
160
288
|
}
|
|
161
289
|
button(text) {
|
|
@@ -174,6 +302,7 @@ export {
|
|
|
174
302
|
LoginPage,
|
|
175
303
|
NumberEditor,
|
|
176
304
|
PanelFilterField,
|
|
305
|
+
ReportForm,
|
|
177
306
|
SubsystemsPanel,
|
|
178
307
|
TextEditor,
|
|
179
308
|
TreeView,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "d5-testing-library",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.7.0-alpha.0",
|
|
4
4
|
"description": "e2e testing D5 projects",
|
|
5
5
|
"main": "dist/cjs/d5-testing-library.cjs",
|
|
6
6
|
"module": "dist/d5-testing-library.legacy-esm.js",
|
|
@@ -22,7 +22,9 @@
|
|
|
22
22
|
"build": "tsup",
|
|
23
23
|
"changelog": "node ./scripts/releaseChangelog.mjs changelog -p v1.0.1",
|
|
24
24
|
"prepublishOnly": "yarn clean",
|
|
25
|
-
"prepack": "yarn build"
|
|
25
|
+
"prepack": "yarn build",
|
|
26
|
+
"preminor": "npm version preminor --preid=alpha",
|
|
27
|
+
"prerelease": "npm version prerelease --preid=alpha"
|
|
26
28
|
},
|
|
27
29
|
"files": [
|
|
28
30
|
"dist"
|