d5-testing-library 1.8.0-alpha.9 → 1.8.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-QNZOB7PA.mjs +7 -0
- package/dist/ListForm-MXGUBMWS.mjs +7 -0
- package/dist/TreeView-VZBOZCFW.mjs +8 -0
- package/dist/{chunk-R3BWDLN3.mjs → chunk-32KSAOFJ.mjs} +171 -147
- package/dist/{chunk-VPTIEIX5.mjs → chunk-75FRHQCI.mjs} +3 -2
- package/dist/{chunk-4JWY3XDX.mjs → chunk-S62QEWWA.mjs} +444 -121
- package/dist/{chunk-XQTIDP34.mjs → chunk-XGIXXZD6.mjs} +3 -3
- package/dist/cjs/d5-testing-library.cjs +776 -325
- package/dist/{d5-testing-library.d.ts → d5-testing-library.d.mts} +194 -72
- package/dist/d5-testing-library.legacy-esm.js +83 -28
- package/dist/d5-testing-library.mjs +83 -28
- package/package.json +23 -11
- package/dist/FormEdit-ELCXSD63.mjs +0 -7
- package/dist/ListForm-A7HQKGCR.mjs +0 -7
- package/dist/TreeView-ANBLGS27.mjs +0 -8
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
2
|
TreeView
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-75FRHQCI.mjs";
|
|
4
4
|
import {
|
|
5
5
|
FilterPanel,
|
|
6
6
|
FormFilterField,
|
|
7
7
|
ListForm,
|
|
8
8
|
PanelFilterField
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-S62QEWWA.mjs";
|
|
10
10
|
import {
|
|
11
11
|
FormEdit
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-XGIXXZD6.mjs";
|
|
13
13
|
import {
|
|
14
14
|
AbstractButton,
|
|
15
15
|
AbstractElement,
|
|
@@ -24,15 +24,18 @@ import {
|
|
|
24
24
|
byTestIdCssSelector,
|
|
25
25
|
click,
|
|
26
26
|
config,
|
|
27
|
+
contextMenu,
|
|
27
28
|
createSubSystemTestId,
|
|
28
29
|
editorFactory,
|
|
29
30
|
fixElementStaleError,
|
|
30
31
|
readonlyLocator,
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
safeWait,
|
|
33
|
+
waitElementIsClickable_default,
|
|
34
|
+
waitElementIsVisible_default
|
|
35
|
+
} from "./chunk-32KSAOFJ.mjs";
|
|
34
36
|
|
|
35
37
|
// src/pageObjects/pages/LoginPage.ts
|
|
38
|
+
import { By } from "selenium-webdriver";
|
|
36
39
|
var LOGIN_PATH = "/login";
|
|
37
40
|
var LoginPage = class extends AbstractPage {
|
|
38
41
|
usernameField = byTestId("loginField", "input");
|
|
@@ -41,7 +44,7 @@ var LoginPage = class extends AbstractPage {
|
|
|
41
44
|
async locate() {
|
|
42
45
|
await super.locate();
|
|
43
46
|
const login = await this.driver.findElement(this.usernameField);
|
|
44
|
-
await
|
|
47
|
+
await waitElementIsVisible_default({
|
|
45
48
|
element: login,
|
|
46
49
|
driver: this.driver
|
|
47
50
|
});
|
|
@@ -57,6 +60,11 @@ var LoginPage = class extends AbstractPage {
|
|
|
57
60
|
}
|
|
58
61
|
async clickLoginButton() {
|
|
59
62
|
await click(await this.driver.findElement(this.loginButton), this.driver);
|
|
63
|
+
await waitElementIsVisible_default({
|
|
64
|
+
driver: this.driver,
|
|
65
|
+
by: By.id("section"),
|
|
66
|
+
errorMessage: "Sing in not successful"
|
|
67
|
+
});
|
|
60
68
|
}
|
|
61
69
|
async loginWith(username, password) {
|
|
62
70
|
await this.enterUsername(username);
|
|
@@ -70,8 +78,38 @@ var LoginPage = class extends AbstractPage {
|
|
|
70
78
|
|
|
71
79
|
// src/utils/createDriver.ts
|
|
72
80
|
import { Builder } from "selenium-webdriver";
|
|
81
|
+
import Chrome from "selenium-webdriver/chrome";
|
|
82
|
+
import Firefox from "selenium-webdriver/firefox";
|
|
83
|
+
function chromeOptions(builder, options) {
|
|
84
|
+
const ChromeOptions = new Chrome.Options();
|
|
85
|
+
if (options.headless) {
|
|
86
|
+
ChromeOptions.addArguments(`--headless=new`);
|
|
87
|
+
}
|
|
88
|
+
return builder.setChromeOptions(ChromeOptions);
|
|
89
|
+
}
|
|
90
|
+
function firefoxOptions(builder, options) {
|
|
91
|
+
const FirefoxOptions = new Firefox.Options();
|
|
92
|
+
if (options.headless) {
|
|
93
|
+
FirefoxOptions.addArguments(`--headless`);
|
|
94
|
+
}
|
|
95
|
+
return builder.setFirefoxOptions(FirefoxOptions);
|
|
96
|
+
}
|
|
97
|
+
function setOptions(builder, browser, options) {
|
|
98
|
+
switch (browser) {
|
|
99
|
+
case "chrome":
|
|
100
|
+
return chromeOptions(builder, options);
|
|
101
|
+
case "firefox":
|
|
102
|
+
return firefoxOptions(builder, options);
|
|
103
|
+
default:
|
|
104
|
+
return builder;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
73
107
|
var createDriver = async (browser) => {
|
|
74
|
-
const
|
|
108
|
+
const _browser = browser ?? config().browser;
|
|
109
|
+
const headless = config().headless === "true";
|
|
110
|
+
let builder = new Builder().forBrowser(_browser);
|
|
111
|
+
builder = setOptions(builder, _browser, { headless });
|
|
112
|
+
const driver = await builder.build();
|
|
75
113
|
const manage = driver.manage();
|
|
76
114
|
await manage.setTimeouts({ implicit: config().timeout });
|
|
77
115
|
await manage.window().maximize();
|
|
@@ -90,7 +128,6 @@ var elementIsNotPresent = function elementIsNotPresent2(locator) {
|
|
|
90
128
|
// src/utils/signIn.ts
|
|
91
129
|
async function signIn(driver) {
|
|
92
130
|
const webDriver = driver ?? await createDriver();
|
|
93
|
-
config().driver = webDriver;
|
|
94
131
|
const loginPage = new LoginPage(webDriver);
|
|
95
132
|
await loginPage.locate();
|
|
96
133
|
await loginPage.authorize();
|
|
@@ -98,15 +135,15 @@ async function signIn(driver) {
|
|
|
98
135
|
}
|
|
99
136
|
|
|
100
137
|
// src/pageObjects/elements/SubsystemsPanel/SubsystemsPanelHeader.ts
|
|
101
|
-
import { By as
|
|
138
|
+
import { By as By3 } from "selenium-webdriver";
|
|
102
139
|
var SubsystemsPanelHeader = class extends AbstractElementWithParent {
|
|
103
140
|
async title() {
|
|
104
|
-
return this.driver.findElement(
|
|
141
|
+
return this.driver.findElement(By3.css(this.getFullCssSelector()));
|
|
105
142
|
}
|
|
106
143
|
};
|
|
107
144
|
|
|
108
145
|
// src/pageObjects/elements/SubsystemsPanel/SubsystemsPanel.ts
|
|
109
|
-
import { By as
|
|
146
|
+
import { By as By4 } from "selenium-webdriver";
|
|
110
147
|
|
|
111
148
|
// src/pageObjects/elements/SubsystemsPanel/SubsystemItem.ts
|
|
112
149
|
var SubsystemItem = class {
|
|
@@ -120,10 +157,22 @@ var SubsystemItem = class {
|
|
|
120
157
|
return fixElementStaleError(this.bySelector, this.driver);
|
|
121
158
|
}
|
|
122
159
|
async getTitle() {
|
|
160
|
+
await waitElementIsVisible_default(
|
|
161
|
+
{
|
|
162
|
+
by: this.bySelector,
|
|
163
|
+
driver: this.driver
|
|
164
|
+
}
|
|
165
|
+
);
|
|
123
166
|
const el = await this.getElement();
|
|
124
167
|
return await el.getAttribute("data-title");
|
|
125
168
|
}
|
|
126
169
|
async click() {
|
|
170
|
+
await waitElementIsClickable_default(
|
|
171
|
+
{
|
|
172
|
+
by: this.bySelector,
|
|
173
|
+
driver: this.driver
|
|
174
|
+
}
|
|
175
|
+
);
|
|
127
176
|
const el = await this.getElement();
|
|
128
177
|
await click(el, this.driver);
|
|
129
178
|
}
|
|
@@ -144,11 +193,11 @@ var SubsystemsPanel = class extends AbstractElement {
|
|
|
144
193
|
}
|
|
145
194
|
async headerTitle() {
|
|
146
195
|
const title = await this.header.title();
|
|
147
|
-
await
|
|
196
|
+
await safeWait(async () => await title.getText() != "", this.driver);
|
|
148
197
|
return title.getText();
|
|
149
198
|
}
|
|
150
199
|
getSearchComponent() {
|
|
151
|
-
return new TextEditor("#aside", byTestIdCssSelector(SEARCH_INPUT_SELECTOR));
|
|
200
|
+
return new TextEditor("#aside", byTestIdCssSelector(SEARCH_INPUT_SELECTOR), this.driver);
|
|
152
201
|
}
|
|
153
202
|
/**
|
|
154
203
|
* Находит сабсистему по заголовку
|
|
@@ -159,8 +208,9 @@ var SubsystemsPanel = class extends AbstractElement {
|
|
|
159
208
|
*/
|
|
160
209
|
async search(title) {
|
|
161
210
|
const searchComponent = this.getSearchComponent();
|
|
211
|
+
await this.searchClear();
|
|
162
212
|
await searchComponent.setValue(title);
|
|
163
|
-
await
|
|
213
|
+
await safeWait(
|
|
164
214
|
async () => {
|
|
165
215
|
const findElement = await this.itemByTitle(title).getElement();
|
|
166
216
|
const classes = await findElement.getAttribute("class");
|
|
@@ -179,7 +229,7 @@ var SubsystemsPanel = class extends AbstractElement {
|
|
|
179
229
|
*/
|
|
180
230
|
async searchClear() {
|
|
181
231
|
const clearBtnSelector = `#aside ${byTestIdCssSelector(SEARCH_INPUT_SELECTOR)} .${DX_CLEAR_BUTTON_AREA}`;
|
|
182
|
-
const clearBtn = await
|
|
232
|
+
const clearBtn = await fixElementStaleError(By4.css(clearBtnSelector), this.driver);
|
|
183
233
|
if (await clearBtn.isDisplayed()) {
|
|
184
234
|
await click(clearBtn, this.driver);
|
|
185
235
|
}
|
|
@@ -193,7 +243,7 @@ var SubsystemsPanel = class extends AbstractElement {
|
|
|
193
243
|
*/
|
|
194
244
|
item(name) {
|
|
195
245
|
const elementCSS = createSubSystemTestId(name);
|
|
196
|
-
return new SubsystemItem({ driver: this.driver, bySelector:
|
|
246
|
+
return new SubsystemItem({ driver: this.driver, bySelector: By4.css(`${byTestIdCssSelector(elementCSS, "span")}`) });
|
|
197
247
|
}
|
|
198
248
|
/**
|
|
199
249
|
* Возвращает сабсистему по заголовку
|
|
@@ -203,7 +253,7 @@ var SubsystemsPanel = class extends AbstractElement {
|
|
|
203
253
|
* const subsystem = subsystemsPanel.itemByTitle('SubSystemTitle');
|
|
204
254
|
*/
|
|
205
255
|
itemByTitle(title) {
|
|
206
|
-
return new SubsystemItem({ driver: this.driver, bySelector:
|
|
256
|
+
return new SubsystemItem({ driver: this.driver, bySelector: By4.css(byTitleCssSelector(title)) });
|
|
207
257
|
}
|
|
208
258
|
/**
|
|
209
259
|
* Возвращается на уровень выше по сабсистемам
|
|
@@ -213,14 +263,14 @@ var SubsystemsPanel = class extends AbstractElement {
|
|
|
213
263
|
* wait subsystemsPanel.back();
|
|
214
264
|
*/
|
|
215
265
|
async back() {
|
|
216
|
-
const
|
|
217
|
-
await
|
|
266
|
+
const by = By4.css(`#aside .${BACK_BUTTON_SELECTOR}`);
|
|
267
|
+
await waitElementIsVisible_default(
|
|
218
268
|
{
|
|
219
|
-
|
|
269
|
+
by,
|
|
220
270
|
driver: this.driver
|
|
221
271
|
}
|
|
222
272
|
);
|
|
223
|
-
await click(
|
|
273
|
+
await click(await fixElementStaleError(by, this.driver), this.driver);
|
|
224
274
|
}
|
|
225
275
|
};
|
|
226
276
|
|
|
@@ -244,7 +294,7 @@ var ReportForm = class extends FormEdit {
|
|
|
244
294
|
};
|
|
245
295
|
|
|
246
296
|
// src/pageObjects/elements/Dialog.ts
|
|
247
|
-
import { By as
|
|
297
|
+
import { By as By5 } from "selenium-webdriver";
|
|
248
298
|
var DIALOG_CLASS = ".d5-dialog";
|
|
249
299
|
var DIALOG_TITLE_CLASS = ".dialog__title";
|
|
250
300
|
var DIALOG_TEXT_CLASS = ".dialog__text";
|
|
@@ -258,11 +308,14 @@ var DialogButton = class extends AbstractButton {
|
|
|
258
308
|
}
|
|
259
309
|
async getElement() {
|
|
260
310
|
const panel = await super.getElement();
|
|
261
|
-
return panel.findElement(
|
|
311
|
+
return panel.findElement(By5.xpath(buttonByTextXpath(this.text)));
|
|
262
312
|
}
|
|
263
313
|
buttonNotDisplayedError() {
|
|
264
314
|
return `Dialog button ${this.text} cannot be clicked. It is not displayed or it is disabled`;
|
|
265
315
|
}
|
|
316
|
+
getTitle() {
|
|
317
|
+
throw new Error(`Method "getTitle()" is not working.`);
|
|
318
|
+
}
|
|
266
319
|
};
|
|
267
320
|
var Dialog = class extends AbstractElement {
|
|
268
321
|
constructor(driver) {
|
|
@@ -278,11 +331,11 @@ var Dialog = class extends AbstractElement {
|
|
|
278
331
|
return this.joinRelativeCssSelectors([DIALOG_CLASS, DIALOG_BUTTONS_PANEL_CLASS]);
|
|
279
332
|
}
|
|
280
333
|
async title() {
|
|
281
|
-
const el = await this.driver.findElement(
|
|
334
|
+
const el = await this.driver.findElement(By5.css(this.titleSelector));
|
|
282
335
|
return await el.getText();
|
|
283
336
|
}
|
|
284
337
|
async text() {
|
|
285
|
-
const el = await this.driver.findElement(
|
|
338
|
+
const el = await this.driver.findElement(By5.css(this.textSelector));
|
|
286
339
|
return await el.getText();
|
|
287
340
|
}
|
|
288
341
|
button(text) {
|
|
@@ -309,11 +362,13 @@ export {
|
|
|
309
362
|
byTestIdCssSelector,
|
|
310
363
|
click,
|
|
311
364
|
config,
|
|
365
|
+
contextMenu,
|
|
312
366
|
createDriver,
|
|
313
367
|
editorFactory,
|
|
314
368
|
elementIsNotPresent,
|
|
315
369
|
readonlyLocator,
|
|
316
370
|
signIn,
|
|
317
|
-
wait,
|
|
318
|
-
|
|
371
|
+
safeWait as wait,
|
|
372
|
+
waitElementIsClickable_default as waitElementIsClickable,
|
|
373
|
+
waitElementIsVisible_default as waitElementIsVisible
|
|
319
374
|
};
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
2
|
TreeView
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-75FRHQCI.mjs";
|
|
4
4
|
import {
|
|
5
5
|
FilterPanel,
|
|
6
6
|
FormFilterField,
|
|
7
7
|
ListForm,
|
|
8
8
|
PanelFilterField
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-S62QEWWA.mjs";
|
|
10
10
|
import {
|
|
11
11
|
FormEdit
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-XGIXXZD6.mjs";
|
|
13
13
|
import {
|
|
14
14
|
AbstractButton,
|
|
15
15
|
AbstractElement,
|
|
@@ -24,15 +24,18 @@ import {
|
|
|
24
24
|
byTestIdCssSelector,
|
|
25
25
|
click,
|
|
26
26
|
config,
|
|
27
|
+
contextMenu,
|
|
27
28
|
createSubSystemTestId,
|
|
28
29
|
editorFactory,
|
|
29
30
|
fixElementStaleError,
|
|
30
31
|
readonlyLocator,
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
safeWait,
|
|
33
|
+
waitElementIsClickable_default,
|
|
34
|
+
waitElementIsVisible_default
|
|
35
|
+
} from "./chunk-32KSAOFJ.mjs";
|
|
34
36
|
|
|
35
37
|
// src/pageObjects/pages/LoginPage.ts
|
|
38
|
+
import { By } from "selenium-webdriver";
|
|
36
39
|
var LOGIN_PATH = "/login";
|
|
37
40
|
var LoginPage = class extends AbstractPage {
|
|
38
41
|
usernameField = byTestId("loginField", "input");
|
|
@@ -41,7 +44,7 @@ var LoginPage = class extends AbstractPage {
|
|
|
41
44
|
async locate() {
|
|
42
45
|
await super.locate();
|
|
43
46
|
const login = await this.driver.findElement(this.usernameField);
|
|
44
|
-
await
|
|
47
|
+
await waitElementIsVisible_default({
|
|
45
48
|
element: login,
|
|
46
49
|
driver: this.driver
|
|
47
50
|
});
|
|
@@ -57,6 +60,11 @@ var LoginPage = class extends AbstractPage {
|
|
|
57
60
|
}
|
|
58
61
|
async clickLoginButton() {
|
|
59
62
|
await click(await this.driver.findElement(this.loginButton), this.driver);
|
|
63
|
+
await waitElementIsVisible_default({
|
|
64
|
+
driver: this.driver,
|
|
65
|
+
by: By.id("section"),
|
|
66
|
+
errorMessage: "Sing in not successful"
|
|
67
|
+
});
|
|
60
68
|
}
|
|
61
69
|
async loginWith(username, password) {
|
|
62
70
|
await this.enterUsername(username);
|
|
@@ -70,8 +78,38 @@ var LoginPage = class extends AbstractPage {
|
|
|
70
78
|
|
|
71
79
|
// src/utils/createDriver.ts
|
|
72
80
|
import { Builder } from "selenium-webdriver";
|
|
81
|
+
import Chrome from "selenium-webdriver/chrome";
|
|
82
|
+
import Firefox from "selenium-webdriver/firefox";
|
|
83
|
+
function chromeOptions(builder, options) {
|
|
84
|
+
const ChromeOptions = new Chrome.Options();
|
|
85
|
+
if (options.headless) {
|
|
86
|
+
ChromeOptions.addArguments(`--headless=new`);
|
|
87
|
+
}
|
|
88
|
+
return builder.setChromeOptions(ChromeOptions);
|
|
89
|
+
}
|
|
90
|
+
function firefoxOptions(builder, options) {
|
|
91
|
+
const FirefoxOptions = new Firefox.Options();
|
|
92
|
+
if (options.headless) {
|
|
93
|
+
FirefoxOptions.addArguments(`--headless`);
|
|
94
|
+
}
|
|
95
|
+
return builder.setFirefoxOptions(FirefoxOptions);
|
|
96
|
+
}
|
|
97
|
+
function setOptions(builder, browser, options) {
|
|
98
|
+
switch (browser) {
|
|
99
|
+
case "chrome":
|
|
100
|
+
return chromeOptions(builder, options);
|
|
101
|
+
case "firefox":
|
|
102
|
+
return firefoxOptions(builder, options);
|
|
103
|
+
default:
|
|
104
|
+
return builder;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
73
107
|
var createDriver = async (browser) => {
|
|
74
|
-
const
|
|
108
|
+
const _browser = browser ?? config().browser;
|
|
109
|
+
const headless = config().headless === "true";
|
|
110
|
+
let builder = new Builder().forBrowser(_browser);
|
|
111
|
+
builder = setOptions(builder, _browser, { headless });
|
|
112
|
+
const driver = await builder.build();
|
|
75
113
|
const manage = driver.manage();
|
|
76
114
|
await manage.setTimeouts({ implicit: config().timeout });
|
|
77
115
|
await manage.window().maximize();
|
|
@@ -90,7 +128,6 @@ var elementIsNotPresent = function elementIsNotPresent2(locator) {
|
|
|
90
128
|
// src/utils/signIn.ts
|
|
91
129
|
async function signIn(driver) {
|
|
92
130
|
const webDriver = driver ?? await createDriver();
|
|
93
|
-
config().driver = webDriver;
|
|
94
131
|
const loginPage = new LoginPage(webDriver);
|
|
95
132
|
await loginPage.locate();
|
|
96
133
|
await loginPage.authorize();
|
|
@@ -98,15 +135,15 @@ async function signIn(driver) {
|
|
|
98
135
|
}
|
|
99
136
|
|
|
100
137
|
// src/pageObjects/elements/SubsystemsPanel/SubsystemsPanelHeader.ts
|
|
101
|
-
import { By as
|
|
138
|
+
import { By as By3 } from "selenium-webdriver";
|
|
102
139
|
var SubsystemsPanelHeader = class extends AbstractElementWithParent {
|
|
103
140
|
async title() {
|
|
104
|
-
return this.driver.findElement(
|
|
141
|
+
return this.driver.findElement(By3.css(this.getFullCssSelector()));
|
|
105
142
|
}
|
|
106
143
|
};
|
|
107
144
|
|
|
108
145
|
// src/pageObjects/elements/SubsystemsPanel/SubsystemsPanel.ts
|
|
109
|
-
import { By as
|
|
146
|
+
import { By as By4 } from "selenium-webdriver";
|
|
110
147
|
|
|
111
148
|
// src/pageObjects/elements/SubsystemsPanel/SubsystemItem.ts
|
|
112
149
|
var SubsystemItem = class {
|
|
@@ -120,10 +157,22 @@ var SubsystemItem = class {
|
|
|
120
157
|
return fixElementStaleError(this.bySelector, this.driver);
|
|
121
158
|
}
|
|
122
159
|
async getTitle() {
|
|
160
|
+
await waitElementIsVisible_default(
|
|
161
|
+
{
|
|
162
|
+
by: this.bySelector,
|
|
163
|
+
driver: this.driver
|
|
164
|
+
}
|
|
165
|
+
);
|
|
123
166
|
const el = await this.getElement();
|
|
124
167
|
return await el.getAttribute("data-title");
|
|
125
168
|
}
|
|
126
169
|
async click() {
|
|
170
|
+
await waitElementIsClickable_default(
|
|
171
|
+
{
|
|
172
|
+
by: this.bySelector,
|
|
173
|
+
driver: this.driver
|
|
174
|
+
}
|
|
175
|
+
);
|
|
127
176
|
const el = await this.getElement();
|
|
128
177
|
await click(el, this.driver);
|
|
129
178
|
}
|
|
@@ -144,11 +193,11 @@ var SubsystemsPanel = class extends AbstractElement {
|
|
|
144
193
|
}
|
|
145
194
|
async headerTitle() {
|
|
146
195
|
const title = await this.header.title();
|
|
147
|
-
await
|
|
196
|
+
await safeWait(async () => await title.getText() != "", this.driver);
|
|
148
197
|
return title.getText();
|
|
149
198
|
}
|
|
150
199
|
getSearchComponent() {
|
|
151
|
-
return new TextEditor("#aside", byTestIdCssSelector(SEARCH_INPUT_SELECTOR));
|
|
200
|
+
return new TextEditor("#aside", byTestIdCssSelector(SEARCH_INPUT_SELECTOR), this.driver);
|
|
152
201
|
}
|
|
153
202
|
/**
|
|
154
203
|
* Находит сабсистему по заголовку
|
|
@@ -159,8 +208,9 @@ var SubsystemsPanel = class extends AbstractElement {
|
|
|
159
208
|
*/
|
|
160
209
|
async search(title) {
|
|
161
210
|
const searchComponent = this.getSearchComponent();
|
|
211
|
+
await this.searchClear();
|
|
162
212
|
await searchComponent.setValue(title);
|
|
163
|
-
await
|
|
213
|
+
await safeWait(
|
|
164
214
|
async () => {
|
|
165
215
|
const findElement = await this.itemByTitle(title).getElement();
|
|
166
216
|
const classes = await findElement.getAttribute("class");
|
|
@@ -179,7 +229,7 @@ var SubsystemsPanel = class extends AbstractElement {
|
|
|
179
229
|
*/
|
|
180
230
|
async searchClear() {
|
|
181
231
|
const clearBtnSelector = `#aside ${byTestIdCssSelector(SEARCH_INPUT_SELECTOR)} .${DX_CLEAR_BUTTON_AREA}`;
|
|
182
|
-
const clearBtn = await
|
|
232
|
+
const clearBtn = await fixElementStaleError(By4.css(clearBtnSelector), this.driver);
|
|
183
233
|
if (await clearBtn.isDisplayed()) {
|
|
184
234
|
await click(clearBtn, this.driver);
|
|
185
235
|
}
|
|
@@ -193,7 +243,7 @@ var SubsystemsPanel = class extends AbstractElement {
|
|
|
193
243
|
*/
|
|
194
244
|
item(name) {
|
|
195
245
|
const elementCSS = createSubSystemTestId(name);
|
|
196
|
-
return new SubsystemItem({ driver: this.driver, bySelector:
|
|
246
|
+
return new SubsystemItem({ driver: this.driver, bySelector: By4.css(`${byTestIdCssSelector(elementCSS, "span")}`) });
|
|
197
247
|
}
|
|
198
248
|
/**
|
|
199
249
|
* Возвращает сабсистему по заголовку
|
|
@@ -203,7 +253,7 @@ var SubsystemsPanel = class extends AbstractElement {
|
|
|
203
253
|
* const subsystem = subsystemsPanel.itemByTitle('SubSystemTitle');
|
|
204
254
|
*/
|
|
205
255
|
itemByTitle(title) {
|
|
206
|
-
return new SubsystemItem({ driver: this.driver, bySelector:
|
|
256
|
+
return new SubsystemItem({ driver: this.driver, bySelector: By4.css(byTitleCssSelector(title)) });
|
|
207
257
|
}
|
|
208
258
|
/**
|
|
209
259
|
* Возвращается на уровень выше по сабсистемам
|
|
@@ -213,14 +263,14 @@ var SubsystemsPanel = class extends AbstractElement {
|
|
|
213
263
|
* wait subsystemsPanel.back();
|
|
214
264
|
*/
|
|
215
265
|
async back() {
|
|
216
|
-
const
|
|
217
|
-
await
|
|
266
|
+
const by = By4.css(`#aside .${BACK_BUTTON_SELECTOR}`);
|
|
267
|
+
await waitElementIsVisible_default(
|
|
218
268
|
{
|
|
219
|
-
|
|
269
|
+
by,
|
|
220
270
|
driver: this.driver
|
|
221
271
|
}
|
|
222
272
|
);
|
|
223
|
-
await click(
|
|
273
|
+
await click(await fixElementStaleError(by, this.driver), this.driver);
|
|
224
274
|
}
|
|
225
275
|
};
|
|
226
276
|
|
|
@@ -244,7 +294,7 @@ var ReportForm = class extends FormEdit {
|
|
|
244
294
|
};
|
|
245
295
|
|
|
246
296
|
// src/pageObjects/elements/Dialog.ts
|
|
247
|
-
import { By as
|
|
297
|
+
import { By as By5 } from "selenium-webdriver";
|
|
248
298
|
var DIALOG_CLASS = ".d5-dialog";
|
|
249
299
|
var DIALOG_TITLE_CLASS = ".dialog__title";
|
|
250
300
|
var DIALOG_TEXT_CLASS = ".dialog__text";
|
|
@@ -258,11 +308,14 @@ var DialogButton = class extends AbstractButton {
|
|
|
258
308
|
}
|
|
259
309
|
async getElement() {
|
|
260
310
|
const panel = await super.getElement();
|
|
261
|
-
return panel.findElement(
|
|
311
|
+
return panel.findElement(By5.xpath(buttonByTextXpath(this.text)));
|
|
262
312
|
}
|
|
263
313
|
buttonNotDisplayedError() {
|
|
264
314
|
return `Dialog button ${this.text} cannot be clicked. It is not displayed or it is disabled`;
|
|
265
315
|
}
|
|
316
|
+
getTitle() {
|
|
317
|
+
throw new Error(`Method "getTitle()" is not working.`);
|
|
318
|
+
}
|
|
266
319
|
};
|
|
267
320
|
var Dialog = class extends AbstractElement {
|
|
268
321
|
constructor(driver) {
|
|
@@ -278,11 +331,11 @@ var Dialog = class extends AbstractElement {
|
|
|
278
331
|
return this.joinRelativeCssSelectors([DIALOG_CLASS, DIALOG_BUTTONS_PANEL_CLASS]);
|
|
279
332
|
}
|
|
280
333
|
async title() {
|
|
281
|
-
const el = await this.driver.findElement(
|
|
334
|
+
const el = await this.driver.findElement(By5.css(this.titleSelector));
|
|
282
335
|
return await el.getText();
|
|
283
336
|
}
|
|
284
337
|
async text() {
|
|
285
|
-
const el = await this.driver.findElement(
|
|
338
|
+
const el = await this.driver.findElement(By5.css(this.textSelector));
|
|
286
339
|
return await el.getText();
|
|
287
340
|
}
|
|
288
341
|
button(text) {
|
|
@@ -309,11 +362,13 @@ export {
|
|
|
309
362
|
byTestIdCssSelector,
|
|
310
363
|
click,
|
|
311
364
|
config,
|
|
365
|
+
contextMenu,
|
|
312
366
|
createDriver,
|
|
313
367
|
editorFactory,
|
|
314
368
|
elementIsNotPresent,
|
|
315
369
|
readonlyLocator,
|
|
316
370
|
signIn,
|
|
317
|
-
wait,
|
|
318
|
-
|
|
371
|
+
safeWait as wait,
|
|
372
|
+
waitElementIsClickable_default as waitElementIsClickable,
|
|
373
|
+
waitElementIsVisible_default as waitElementIsVisible
|
|
319
374
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "d5-testing-library",
|
|
3
|
-
"version": "1.8.0
|
|
3
|
+
"version": "1.8.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",
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
"scripts": {
|
|
21
21
|
"clean": "rimraf dist",
|
|
22
22
|
"build": "tsup",
|
|
23
|
+
"test": "jest",
|
|
23
24
|
"changelog": "node ./scripts/releaseChangelog.mjs changelog -p v1.0.1",
|
|
24
25
|
"prepublishOnly": "yarn clean",
|
|
25
26
|
"prepack": "yarn build",
|
|
@@ -32,19 +33,30 @@
|
|
|
32
33
|
"author": "",
|
|
33
34
|
"license": "ISC",
|
|
34
35
|
"dependencies": {
|
|
35
|
-
"selenium-webdriver": "4.
|
|
36
|
-
"typescript": "5.
|
|
36
|
+
"selenium-webdriver": "4.29.0",
|
|
37
|
+
"typescript": "5.8.2"
|
|
37
38
|
},
|
|
38
39
|
"devDependencies": {
|
|
39
|
-
"@babel/core": "
|
|
40
|
-
"@types/node": "
|
|
41
|
-
"@types/
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
"
|
|
45
|
-
"
|
|
40
|
+
"@babel/core": "7.26.9",
|
|
41
|
+
"@types/node": "20.11.16",
|
|
42
|
+
"@types/jest": "29.5.14",
|
|
43
|
+
"@types/selenium-webdriver": "4.1.28",
|
|
44
|
+
"commander": "12.1.0",
|
|
45
|
+
"esbuild-extra": "0.4.0",
|
|
46
|
+
"rimraf": "5.0.10",
|
|
47
|
+
"jest": "29.7.0",
|
|
48
|
+
"ts-jest": "29.2.6",
|
|
49
|
+
"tsup": "8.4.0"
|
|
46
50
|
},
|
|
47
51
|
"peerDependencies": {
|
|
48
|
-
"selenium-webdriver": "4.
|
|
52
|
+
"selenium-webdriver": "4.29.0"
|
|
53
|
+
},
|
|
54
|
+
"jest": {
|
|
55
|
+
"preset": "ts-jest",
|
|
56
|
+
"testEnvironment": "node",
|
|
57
|
+
"transformIgnorePatterns": [
|
|
58
|
+
"[/\\\\]node_modules[/\\\\].+[^esm]\\.(js|jsx|mjs|cjs|ts|tsx)$",
|
|
59
|
+
"^.+\\.module\\.(css|sass|scss)$"
|
|
60
|
+
]
|
|
49
61
|
}
|
|
50
62
|
}
|