d5-testing-library 1.4.0 → 1.5.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.
@@ -5,6 +5,9 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
6
  var __getProtoOf = Object.getPrototypeOf;
7
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __esm = (fn, res) => function __init() {
9
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
10
+ };
8
11
  var __export = (target, all) => {
9
12
  for (var name in all)
10
13
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -27,88 +30,166 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
27
30
  ));
28
31
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
32
 
30
- // src/index.ts
31
- var src_exports = {};
32
- __export(src_exports, {
33
- AbstractPage: () => AbstractPage,
34
- ControlClass: () => ControlClass,
35
- Dialog: () => Dialog,
36
- FilterPanel: () => FilterPanel,
37
- FormEdit: () => FormEdit,
38
- FormField: () => FormField,
39
- FormFilterField: () => FormFilterField,
40
- ListForm: () => ListForm,
41
- LoginPage: () => LoginPage,
42
- NumberEditor: () => NumberEditor,
43
- PanelFilterField: () => PanelFilterField,
44
- SubsystemsPanel: () => SubsystemsPanel,
45
- TextEditor: () => TextEditor,
46
- TreeView: () => TreeView,
47
- byTestId: () => byTestId,
48
- byTestIdCssSelector: () => byTestIdCssSelector,
49
- click: () => click,
50
- config: () => config,
51
- createDriver: () => createDriver,
52
- editorFactory: () => editorFactory,
53
- elementIsNotPresent: () => elementIsNotPresent,
54
- readonlyLocator: () => readonlyLocator,
55
- signIn: () => signIn,
56
- wait: () => wait,
57
- waitElementIsVisible: () => waitElementIsVisible
33
+ // src/config.ts
34
+ function config(cfg) {
35
+ return configInstance.config(cfg);
36
+ }
37
+ var process, driversMap, createConfigProxy, Config, configInstance;
38
+ var init_config = __esm({
39
+ "src/config.ts"() {
40
+ "use strict";
41
+ process = __toESM(require("process"));
42
+ driversMap = /* @__PURE__ */ new Map();
43
+ createConfigProxy = (config2) => {
44
+ return new Proxy(config2, {
45
+ get(_target, prop) {
46
+ if (prop === "driver") {
47
+ return driversMap.get(process.pid);
48
+ }
49
+ return Reflect.get(...arguments);
50
+ },
51
+ set(_target, prop, value) {
52
+ if (prop === "driver") {
53
+ driversMap.set(process.pid, value);
54
+ return true;
55
+ }
56
+ return Reflect.set(...arguments);
57
+ }
58
+ });
59
+ };
60
+ Config = class _Config {
61
+ static instance;
62
+ appConfig;
63
+ static getInstance() {
64
+ if (!_Config.instance) {
65
+ _Config.instance = new _Config();
66
+ }
67
+ return _Config.instance;
68
+ }
69
+ config = (cfg) => {
70
+ if (!cfg)
71
+ return createConfigProxy(this.appConfig);
72
+ this.appConfig = cfg;
73
+ };
74
+ };
75
+ configInstance = Config.getInstance();
76
+ }
58
77
  });
59
- module.exports = __toCommonJS(src_exports);
60
78
 
61
- // src/config.ts
62
- var process = __toESM(require("process"));
63
- var driversMap = /* @__PURE__ */ new Map();
64
- var createConfigProxy = (config2) => {
65
- return new Proxy(config2, {
66
- get(_target, prop) {
67
- if (prop === "driver") {
68
- return driversMap.get(process.pid);
69
- }
70
- return Reflect.get(...arguments);
71
- },
72
- set(_target, prop, value) {
73
- if (prop === "driver") {
74
- driversMap.set(process.pid, value);
75
- return true;
76
- }
77
- return Reflect.set(...arguments);
78
- }
79
- });
80
- };
81
- var Config = class _Config {
82
- static instance;
83
- appConfig;
84
- static getInstance() {
85
- if (!_Config.instance) {
86
- _Config.instance = new _Config();
79
+ // src/utils/fixElementStaleError.ts
80
+ function fixElementStaleError(by, driver) {
81
+ const maxCount = 3;
82
+ let err;
83
+ const call = async (times = 0) => {
84
+ if (times > maxCount)
85
+ throw err;
86
+ try {
87
+ let el = await driver.findElement(by);
88
+ await el.getAttribute("class");
89
+ return el;
90
+ } catch (e) {
91
+ err = e;
92
+ if (e instanceof Error && e.name === "StaleElementReferenceError") {
93
+ return call(++times);
94
+ }
87
95
  }
88
- return _Config.instance;
89
- }
90
- config = (cfg) => {
91
- if (!cfg)
92
- return createConfigProxy(this.appConfig);
93
- this.appConfig = cfg;
96
+ if (err)
97
+ throw err;
94
98
  };
95
- };
96
- var configInstance = Config.getInstance();
97
- function config(cfg) {
98
- return configInstance.config(cfg);
99
+ return call();
99
100
  }
101
+ var init_fixElementStaleError = __esm({
102
+ "src/utils/fixElementStaleError.ts"() {
103
+ "use strict";
104
+ }
105
+ });
100
106
 
101
107
  // src/pageObjects/AbstractElement.ts
102
- var import_selenium_webdriver2 = require("selenium-webdriver");
108
+ var import_selenium_webdriver, AbstractElement;
109
+ var init_AbstractElement = __esm({
110
+ "src/pageObjects/AbstractElement.ts"() {
111
+ "use strict";
112
+ import_selenium_webdriver = require("selenium-webdriver");
113
+ init_config();
114
+ init_fixElementStaleError();
115
+ AbstractElement = class {
116
+ driver;
117
+ elementCssSelector;
118
+ constructor(driver, elementCssSelector) {
119
+ this.driver = driver || config().driver;
120
+ this.elementCssSelector = elementCssSelector;
121
+ }
122
+ getFullCssSelector() {
123
+ return this.elementCssSelector;
124
+ }
125
+ joinRelativeCssSelectors(selectors) {
126
+ return selectors.join(" ");
127
+ }
128
+ getElement() {
129
+ return fixElementStaleError(import_selenium_webdriver.By.css(this.getFullCssSelector()), this.driver);
130
+ }
131
+ async getAttribute(attr) {
132
+ const element = await this.getElement();
133
+ return await element.getAttribute(attr);
134
+ }
135
+ async getClasses() {
136
+ return await this.getAttribute("class");
137
+ }
138
+ async getDataTestId() {
139
+ return await this.getAttribute("data-testid");
140
+ }
141
+ };
142
+ }
143
+ });
103
144
 
104
- // src/utils/waitElementIsVisible.ts
105
- var import_selenium_webdriver = require("selenium-webdriver");
145
+ // src/pageObjects/pages/AbstractPage.ts
146
+ var AbstractPage;
147
+ var init_AbstractPage = __esm({
148
+ "src/pageObjects/pages/AbstractPage.ts"() {
149
+ "use strict";
150
+ init_config();
151
+ init_AbstractElement();
152
+ AbstractPage = class extends AbstractElement {
153
+ url;
154
+ host;
155
+ constructor(driver) {
156
+ super(driver);
157
+ this.host = config().auth.host;
158
+ this.url = this.host + this.prependHash(this.path);
159
+ }
160
+ prependHash(urlPath) {
161
+ if (!urlPath.startsWith("/#")) {
162
+ return `/#${urlPath}`;
163
+ }
164
+ return urlPath;
165
+ }
166
+ async goToUrl(url) {
167
+ await this.driver.get(url);
168
+ }
169
+ get path() {
170
+ return "/#";
171
+ }
172
+ async locate() {
173
+ await this.goToUrl(this.url);
174
+ }
175
+ async reloadPage() {
176
+ await this.driver.navigate().refresh();
177
+ }
178
+ };
179
+ }
180
+ });
106
181
 
107
182
  // src/utils/wait.ts
108
183
  async function wait(condition, driver, errorMessage, timeout) {
109
184
  driver = driver ?? config().driver;
110
185
  await driver.wait(condition, timeout ?? config().timeout, errorMessage);
111
186
  }
187
+ var init_wait = __esm({
188
+ "src/utils/wait.ts"() {
189
+ "use strict";
190
+ init_config();
191
+ }
192
+ });
112
193
 
113
194
  // src/utils/waitElementIsVisible.ts
114
195
  async function waitElementIsVisible({
@@ -118,205 +199,81 @@ async function waitElementIsVisible({
118
199
  driver
119
200
  }) {
120
201
  driver = driver ?? config().driver;
121
- const condition = import_selenium_webdriver.until.elementIsVisible(element);
202
+ const condition = import_selenium_webdriver2.until.elementIsVisible(element);
122
203
  await wait(condition.fn, driver, errorMessage ?? condition.description(), timeout ?? config().timeout);
123
204
  }
124
-
125
- // src/pageObjects/AbstractElement.ts
126
- var AbstractElement = class {
127
- driver;
128
- elementCssSelector;
129
- constructor(driver, elementCssSelector) {
130
- this.driver = driver || config().driver;
131
- this.elementCssSelector = elementCssSelector;
132
- }
133
- getFullCssSelector() {
134
- return this.elementCssSelector;
135
- }
136
- joinRelativeCssSelectors(selectors) {
137
- return selectors.join(" ");
138
- }
139
- async getElement() {
140
- return this.driver.findElement(import_selenium_webdriver2.By.css(this.getFullCssSelector()));
141
- }
142
- async getAttribute(attr) {
143
- const element = await this.getElement();
144
- await waitElementIsVisible({
145
- element,
146
- driver: this.driver,
147
- errorMessage: `Element not found: ${this.getFullCssSelector()}`
148
- });
149
- return await element.getAttribute(attr);
150
- }
151
- async getClasses() {
152
- return await this.getAttribute("class");
205
+ var import_selenium_webdriver2;
206
+ var init_waitElementIsVisible = __esm({
207
+ "src/utils/waitElementIsVisible.ts"() {
208
+ "use strict";
209
+ import_selenium_webdriver2 = require("selenium-webdriver");
210
+ init_config();
211
+ init_wait();
153
212
  }
154
- async getDataTestId() {
155
- return await this.getAttribute("data-testid");
156
- }
157
- };
158
-
159
- // src/pageObjects/pages/AbstractPage.ts
160
- var AbstractPage = class extends AbstractElement {
161
- url;
162
- host;
163
- constructor(driver) {
164
- super(driver);
165
- this.host = config().auth.host;
166
- this.url = this.host + this.prependHash(this.path);
167
- }
168
- prependHash(urlPath) {
169
- if (!urlPath.startsWith("/#")) {
170
- return `/#${urlPath}`;
171
- }
172
- return urlPath;
173
- }
174
- async goToUrl(url) {
175
- await this.driver.get(url);
176
- }
177
- get path() {
178
- return "/#";
179
- }
180
- async locate() {
181
- await this.goToUrl(this.url);
182
- }
183
- async reloadPage() {
184
- await this.driver.navigate().refresh();
185
- }
186
- };
213
+ });
187
214
 
188
215
  // src/utils/actions.ts
189
- var click = async (webElement, driver) => {
190
- driver = driver ?? config().driver;
191
- if (!await webElement.isDisplayed()) {
192
- await driver.executeScript("arguments[0].scrollIntoView(true);", webElement);
216
+ var click;
217
+ var init_actions = __esm({
218
+ "src/utils/actions.ts"() {
219
+ "use strict";
220
+ init_config();
221
+ click = async (webElement, driver) => {
222
+ driver = driver ?? config().driver;
223
+ if (!await webElement.isDisplayed()) {
224
+ await driver.executeScript("arguments[0].scrollIntoView(true);", webElement);
225
+ }
226
+ const actions = driver.actions({ async: true });
227
+ await actions.move({ origin: webElement }).click().perform();
228
+ };
193
229
  }
194
- const actions = driver.actions({ async: true });
195
- await actions.move({ origin: webElement }).click().perform();
196
- };
230
+ });
197
231
 
198
232
  // src/utils/locators.ts
199
- var import_selenium_webdriver3 = require("selenium-webdriver");
200
- var byTestIdCssSelector = (testId, element = "div") => {
201
- return `${element}[data-testid="${testId}"]`;
202
- };
203
- var byTestId = (testId, element = "div") => {
204
- return import_selenium_webdriver3.By.css(byTestIdCssSelector(testId, element));
205
- };
206
- var readonlyLocator = "readonly";
207
-
208
- // src/pageObjects/pages/LoginPage.ts
209
- var LOGIN_PATH = "/login";
210
- var LoginPage = class extends AbstractPage {
211
- usernameField = byTestId("loginField", "input");
212
- passwordField = byTestId("passwordField", "input");
213
- loginButton = byTestId("loginButton");
214
- async locate() {
215
- await super.locate();
216
- const login = await this.driver.findElement(this.usernameField);
217
- await waitElementIsVisible({
218
- element: login,
219
- driver: this.driver
220
- });
221
- }
222
- get path() {
223
- return LOGIN_PATH;
224
- }
225
- async enterUsername(username) {
226
- await this.driver.findElement(this.usernameField).sendKeys(username);
227
- }
228
- async enterPassword(password) {
229
- await this.driver.findElement(this.passwordField).sendKeys(password);
230
- }
231
- async clickLoginButton() {
232
- await click(await this.driver.findElement(this.loginButton), this.driver);
233
- }
234
- async loginWith(username, password) {
235
- await this.enterUsername(username);
236
- await this.enterPassword(password);
237
- await this.clickLoginButton();
238
- }
239
- async authorize() {
240
- await this.loginWith(config().auth.login, config().auth.password);
233
+ var import_selenium_webdriver3, byTestIdCssSelector, byTestId, readonlyLocator;
234
+ var init_locators = __esm({
235
+ "src/utils/locators.ts"() {
236
+ "use strict";
237
+ import_selenium_webdriver3 = require("selenium-webdriver");
238
+ byTestIdCssSelector = (testId, element = "div") => {
239
+ return `${element}[data-testid="${testId}"]`;
240
+ };
241
+ byTestId = (testId, element = "div") => {
242
+ return import_selenium_webdriver3.By.css(byTestIdCssSelector(testId, element));
243
+ };
244
+ readonlyLocator = "readonly";
241
245
  }
242
- };
243
-
244
- // src/utils/createDriver.ts
245
- var import_selenium_webdriver4 = require("selenium-webdriver");
246
- var createDriver = async (browser) => {
247
- const driver = await new import_selenium_webdriver4.Builder().forBrowser(browser ?? config().browser).build();
248
- const manage = driver.manage();
249
- await manage.setTimeouts({ implicit: config().timeout });
250
- await manage.window().maximize();
251
- return driver;
252
- };
253
-
254
- // src/utils/elementIsNotPresent.ts
255
- var import_selenium_webdriver5 = require("selenium-webdriver");
256
- var elementIsNotPresent = function elementIsNotPresent2(locator) {
257
- return new import_selenium_webdriver5.Condition("for no element to be located " + locator, async function(driver) {
258
- const elements = await driver.findElements(locator);
259
- return elements.length == 0;
260
- });
261
- };
262
-
263
- // src/utils/signIn.ts
264
- async function signIn(driver) {
265
- const webDriver = driver ?? await createDriver();
266
- config().driver = webDriver;
267
- const loginPage = new LoginPage(webDriver);
268
- await loginPage.locate();
269
- await loginPage.authorize();
270
- return webDriver;
271
- }
246
+ });
272
247
 
273
248
  // src/pageObjects/AbstractElementWithParent.ts
274
- var AbstractElementWithParent = class extends AbstractElement {
275
- parentCssSelector;
276
- constructor(parentCssSelector, elementCssSelector, driver) {
277
- super(driver, elementCssSelector);
278
- this.parentCssSelector = parentCssSelector;
279
- }
280
- getFullCssSelector() {
281
- if (!this.elementCssSelector) {
282
- return this.parentCssSelector;
283
- }
284
- if (!this.parentCssSelector) {
285
- return this.elementCssSelector;
286
- }
287
- return `${this.parentCssSelector} ${this.elementCssSelector}`;
288
- }
289
- async isReadonly() {
290
- const fieldEl = await this.getElement();
291
- const classSting = await fieldEl.getAttribute("class");
292
- return classSting.includes(readonlyLocator);
293
- }
294
- };
295
-
296
- // src/pageObjects/elements/SubsystemsPanel/SubsystemsPanelHeader.ts
297
- var import_selenium_webdriver6 = require("selenium-webdriver");
298
- var SubsystemsPanelHeader = class extends AbstractElementWithParent {
299
- async title() {
300
- return this.driver.findElement(import_selenium_webdriver6.By.css(this.getFullCssSelector()));
301
- }
302
- };
303
-
304
- // src/pageObjects/elements/SubsystemsPanel/SubsystemsPanel.ts
305
- var SubsystemsPanel = class extends AbstractElement {
306
- header;
307
- constructor(driver) {
308
- super(driver);
309
- this.header = new SubsystemsPanelHeader("#aside", byTestIdCssSelector("subsystems-panel-title", "span"), this.driver);
310
- }
311
- async headerTitle() {
312
- const title = await this.header.title();
313
- await wait(async () => await title.getText() != "", this.driver);
314
- return title.getText();
249
+ var AbstractElementWithParent;
250
+ var init_AbstractElementWithParent = __esm({
251
+ "src/pageObjects/AbstractElementWithParent.ts"() {
252
+ "use strict";
253
+ init_AbstractElement();
254
+ init_locators();
255
+ AbstractElementWithParent = class extends AbstractElement {
256
+ parentCssSelector;
257
+ constructor(parentCssSelector, elementCssSelector, driver) {
258
+ super(driver, elementCssSelector);
259
+ this.parentCssSelector = parentCssSelector;
260
+ }
261
+ getFullCssSelector() {
262
+ if (!this.elementCssSelector) {
263
+ return this.parentCssSelector;
264
+ }
265
+ if (!this.parentCssSelector) {
266
+ return this.elementCssSelector;
267
+ }
268
+ return `${this.parentCssSelector} ${this.elementCssSelector}`;
269
+ }
270
+ async isReadonly() {
271
+ const classSting = await this.getClasses();
272
+ return classSting.includes(readonlyLocator);
273
+ }
274
+ };
315
275
  }
316
- };
317
-
318
- // src/pageObjects/elements/Forms/AbstractForm.ts
319
- var import_selenium_webdriver8 = require("selenium-webdriver");
276
+ });
320
277
 
321
278
  // src/utils/createDataTestId.ts
322
279
  function createDataTestId(formName, itemType, itemName) {
@@ -343,6 +300,11 @@ function createTableId(formName) {
343
300
  function createFormButtonTestId(formName, itemName) {
344
301
  return createDataTestId(formName, "button" /* BUTTON */, itemName);
345
302
  }
303
+ var init_createDataTestId = __esm({
304
+ "src/utils/createDataTestId.ts"() {
305
+ "use strict";
306
+ }
307
+ });
346
308
 
347
309
  // src/utils/waitElementIsClickable.ts
348
310
  async function waitElementIsClickable({
@@ -357,1487 +319,2176 @@ async function waitElementIsClickable({
357
319
  return await element.isDisplayed() && !isDisabled;
358
320
  }, driver, errorMessage, timeout ?? config().timeout);
359
321
  }
322
+ var init_waitElementIsClickable = __esm({
323
+ "src/utils/waitElementIsClickable.ts"() {
324
+ "use strict";
325
+ init_config();
326
+ init_wait();
327
+ }
328
+ });
360
329
 
361
330
  // src/pageObjects/elements/TableToolbar/AbstractButton.ts
362
- var AbstractButton = class extends AbstractElementWithParent {
363
- constructor(parentCssSelector, elementCssSelector, driver) {
364
- super(parentCssSelector, elementCssSelector, driver);
365
- }
366
- async click() {
367
- const button = await this.getElement();
368
- await waitElementIsClickable({
369
- element: button,
370
- errorMessage: this.buttonNotDisplayedError(),
371
- driver: this.driver
372
- });
373
- await click(button, this.driver);
374
- }
375
- async isDisabled() {
376
- const button = await this.getElement();
377
- return await button.getCssValue("pointer-events") === "none";
331
+ var AbstractButton;
332
+ var init_AbstractButton = __esm({
333
+ "src/pageObjects/elements/TableToolbar/AbstractButton.ts"() {
334
+ "use strict";
335
+ init_AbstractElementWithParent();
336
+ init_actions();
337
+ init_waitElementIsClickable();
338
+ AbstractButton = class extends AbstractElementWithParent {
339
+ constructor(parentCssSelector, elementCssSelector, driver) {
340
+ super(parentCssSelector, elementCssSelector, driver);
341
+ }
342
+ async click() {
343
+ const button = await this.getElement();
344
+ await waitElementIsClickable({
345
+ element: button,
346
+ errorMessage: this.buttonNotDisplayedError(),
347
+ driver: this.driver
348
+ });
349
+ await click(button, this.driver);
350
+ }
351
+ async isDisabled() {
352
+ const button = await this.getElement();
353
+ return await button.getCssValue("pointer-events") === "none";
354
+ }
355
+ };
378
356
  }
379
- };
357
+ });
380
358
 
381
359
  // src/pageObjects/elements/DXComponents/DXButton.ts
382
- var import_selenium_webdriver7 = require("selenium-webdriver");
383
- var DXButton = class extends AbstractButton {
384
- async getText() {
385
- const classes = await this.getClasses();
386
- if (!classes.includes("dx-button-has-text")) {
387
- return null;
388
- }
389
- const el = await this.getElement();
390
- const textEl = el.findElement(import_selenium_webdriver7.By.className("dx-button-text"));
391
- return await textEl.getText();
360
+ var import_selenium_webdriver7, DXButton;
361
+ var init_DXButton = __esm({
362
+ "src/pageObjects/elements/DXComponents/DXButton.ts"() {
363
+ "use strict";
364
+ init_AbstractButton();
365
+ import_selenium_webdriver7 = require("selenium-webdriver");
366
+ DXButton = class extends AbstractButton {
367
+ async getText() {
368
+ const classes = await this.getClasses();
369
+ if (!classes.includes("dx-button-has-text")) {
370
+ return null;
371
+ }
372
+ const el = await this.getElement();
373
+ const textEl = el.findElement(import_selenium_webdriver7.By.className("dx-button-text"));
374
+ return await textEl.getText();
375
+ }
376
+ };
392
377
  }
393
- };
378
+ });
394
379
 
395
380
  // src/pageObjects/elements/FormButton.ts
396
- var FormButton = class extends DXButton {
397
- name;
398
- constructor(parentCssSelector, formName, name, driver) {
399
- super(parentCssSelector, byTestIdCssSelector(createFormButtonTestId(formName, name)), driver);
400
- this.name = name;
401
- }
402
- buttonNotDisplayedError() {
403
- return `Form Button ${this.name} cannot be clicked. It is not displayed or it is disabled`;
381
+ var FormButton;
382
+ var init_FormButton = __esm({
383
+ "src/pageObjects/elements/FormButton.ts"() {
384
+ "use strict";
385
+ init_locators();
386
+ init_createDataTestId();
387
+ init_DXButton();
388
+ FormButton = class extends DXButton {
389
+ name;
390
+ constructor(parentCssSelector, formName, name, driver) {
391
+ super(parentCssSelector, byTestIdCssSelector(createFormButtonTestId(formName, name)), driver);
392
+ this.name = name;
393
+ }
394
+ buttonNotDisplayedError() {
395
+ return `Form Button ${this.name} cannot be clicked. It is not displayed or it is disabled`;
396
+ }
397
+ };
404
398
  }
405
- };
399
+ });
406
400
 
407
- // src/pageObjects/elements/Forms/AbstractForm.ts
408
- var AbstractForm = class extends AbstractPage {
409
- containerCssSelector = "";
410
- containerBy;
411
- popupContainerCssSelector;
412
- constructor(driver) {
413
- super(driver);
414
- const testId = `form-content-wrapper-${this.formName}`;
415
- this.containerBy = byTestId(testId);
416
- this.containerCssSelector = byTestIdCssSelector(testId);
417
- }
418
- async isModal() {
419
- const el = await this.getContainerElement();
420
- const value = await el.getAttribute("data-ismodal");
421
- return value === "true";
422
- }
423
- getContainerElement = () => {
424
- return this.driver.findElement(this.containerBy);
425
- };
426
- get formName() {
427
- return "";
428
- }
429
- /**
430
- * Возвращает true если форма есть в DOM
431
- * @example
432
- * class MyForm extends FormEdit {}
433
- * //...
434
- * const formEdit = new MyForm();
435
- * expect(await formEdit.exists()).toBe(true);
436
- */
437
- async exists() {
438
- try {
439
- let elements = await this.driver.findElements(this.containerBy);
440
- return elements.length > 0;
441
- } catch (error) {
442
- return false;
443
- }
444
- }
445
- /**
446
- * Получение заголовка на формы
447
- * @example
448
- * const listForm = new MyForm();
449
- * //...
450
- * expect(await listForm.getTitleText()).toBe('MyFormTitle');
451
- */
452
- async getTitleText() {
453
- if (await this.isModal()) {
454
- const titleEl2 = await this.driver.findElement(import_selenium_webdriver8.By.css(`${this.popupContainerCssSelector} .popup-title`));
455
- return titleEl2.getText();
456
- }
457
- let titleEl = await this.driver.findElement(import_selenium_webdriver8.By.className("main-toolbar-form-title"));
458
- return titleEl.getText();
459
- }
460
- button(name) {
461
- return new FormButton(this.containerCssSelector, this.formName, name, this.driver);
401
+ // src/pageObjects/AbstractFormElement.ts
402
+ var AbstractFormElement;
403
+ var init_AbstractFormElement = __esm({
404
+ "src/pageObjects/AbstractFormElement.ts"() {
405
+ "use strict";
406
+ init_AbstractElementWithParent();
407
+ AbstractFormElement = class extends AbstractElementWithParent {
408
+ constructor(parentCssSelector, elementCssSelector, driver) {
409
+ super(parentCssSelector, elementCssSelector, driver);
410
+ }
411
+ };
462
412
  }
463
- };
464
-
465
- // src/pageObjects/elements/Forms/FormEdit.ts
466
- var import_selenium_webdriver17 = require("selenium-webdriver");
413
+ });
467
414
 
468
- // src/pageObjects/elements/Editors/AbstractEditor.ts
469
- var import_selenium_webdriver9 = require("selenium-webdriver");
415
+ // src/pageObjects/elements/Groups/AbstractGroup.ts
416
+ var AbstractGroup;
417
+ var init_AbstractGroup = __esm({
418
+ "src/pageObjects/elements/Groups/AbstractGroup.ts"() {
419
+ "use strict";
420
+ init_AbstractElementWithParent();
421
+ AbstractGroup = class extends AbstractElementWithParent {
422
+ async isDisplayed() {
423
+ const groupElement = await this.getElement();
424
+ return await groupElement.isDisplayed();
425
+ }
426
+ };
427
+ }
428
+ });
470
429
 
471
- // src/pageObjects/elements/Editors/ClearStrategy/InputClearStrategy.ts
472
- var InputClearStrategy = class {
473
- async clear(editor) {
474
- const inputEl = await editor.getInputElement();
475
- await inputEl.clear();
430
+ // src/pageObjects/elements/Groups/Panel.ts
431
+ var Panel;
432
+ var init_Panel = __esm({
433
+ "src/pageObjects/elements/Groups/Panel.ts"() {
434
+ "use strict";
435
+ init_AbstractGroup();
436
+ Panel = class extends AbstractGroup {
437
+ };
476
438
  }
477
- };
439
+ });
478
440
 
479
- // src/pageObjects/elements/Editors/AbstractEditor.ts
480
- var AbstractDXEditorWithInput = class extends AbstractElementWithParent {
481
- clearStrategy = new InputClearStrategy();
482
- setClearStrategy(strategy) {
483
- this.clearStrategy = strategy;
441
+ // src/pageObjects/elements/Groups/TabPanel/TabPanel.ts
442
+ var import_selenium_webdriver8, getTabTestIdByName, TabPanel;
443
+ var init_TabPanel = __esm({
444
+ "src/pageObjects/elements/Groups/TabPanel/TabPanel.ts"() {
445
+ "use strict";
446
+ init_AbstractGroup();
447
+ import_selenium_webdriver8 = require("selenium-webdriver");
448
+ init_locators();
449
+ getTabTestIdByName = (name) => `tab-caption-${name}`;
450
+ TabPanel = class extends AbstractGroup {
451
+ constructor(parentCssSelector, elementCssSelector, driver) {
452
+ super(parentCssSelector, elementCssSelector, driver);
453
+ }
454
+ _getTab(name) {
455
+ return this.driver.findElement(import_selenium_webdriver8.By.css(`${this.getFullCssSelector()} ${byTestIdCssSelector(getTabTestIdByName(name))}`));
456
+ }
457
+ async tabClick(name) {
458
+ const tabEl = this._getTab(name);
459
+ await tabEl.click();
460
+ }
461
+ };
484
462
  }
485
- getInputCssSelector() {
486
- return `${this.getFullCssSelector()} .dx-texteditor-input`;
463
+ });
464
+
465
+ // src/pageObjects/elements/Groups/groupFactory.ts
466
+ var groupFactory;
467
+ var init_groupFactory = __esm({
468
+ "src/pageObjects/elements/Groups/groupFactory.ts"() {
469
+ "use strict";
470
+ init_AbstractFormElement();
471
+ init_Panel();
472
+ init_TabPanel();
473
+ groupFactory = async (parentCssSelector, elementCssSelector, driver) => {
474
+ const elementInstance = new AbstractFormElement(parentCssSelector, elementCssSelector, driver);
475
+ const classSting = await elementInstance.getClasses();
476
+ if (classSting.includes("tab-panel-group"))
477
+ return new TabPanel(parentCssSelector, elementCssSelector, driver);
478
+ if (classSting.includes("panel-group"))
479
+ return new Panel(parentCssSelector, elementCssSelector, driver);
480
+ throw new Error("Unknown type of group. Please write ticket to the support");
481
+ };
487
482
  }
488
- async getInputElement() {
489
- return this.driver.findElement(import_selenium_webdriver9.By.css(this.getInputCssSelector()));
483
+ });
484
+
485
+ // src/pageObjects/elements/FormGroup.ts
486
+ var FormGroup;
487
+ var init_FormGroup = __esm({
488
+ "src/pageObjects/elements/FormGroup.ts"() {
489
+ "use strict";
490
+ init_AbstractElementWithParent();
491
+ init_locators();
492
+ init_createDataTestId();
493
+ init_groupFactory();
494
+ FormGroup = class extends AbstractElementWithParent {
495
+ editor;
496
+ constructor(parentCssSelector, formName, name, driver) {
497
+ super(parentCssSelector, byTestIdCssSelector(createGroupTestId(formName, name)), driver);
498
+ }
499
+ async initEditor() {
500
+ if (!this.editor) {
501
+ this.editor = await groupFactory(this.parentCssSelector, this.elementCssSelector, this.driver);
502
+ }
503
+ }
504
+ /**
505
+ * Возвращает булевое значение доступна ли группа
506
+ * @example
507
+ * expect(await tableList.group('MainSuperPanel').isDisplayed();
508
+ */
509
+ async isDisplayed() {
510
+ try {
511
+ await this.initEditor();
512
+ return this.editor.isDisplayed();
513
+ } catch {
514
+ return false;
515
+ }
516
+ }
517
+ /**
518
+ * Происходит клик по табе
519
+ * @example
520
+ * expect(await tableList.group('TabPanel').tabClick(tabName);
521
+ */
522
+ async tabClick(name) {
523
+ await this.initEditor();
524
+ await this.editor.tabClick(name);
525
+ }
526
+ };
490
527
  }
491
- async getInputValue() {
492
- const inputEl = await this.getInputElement();
493
- return inputEl.getAttribute("value");
528
+ });
529
+
530
+ // src/pageObjects/elements/Forms/AbstractForm.ts
531
+ var AbstractForm;
532
+ var init_AbstractForm = __esm({
533
+ "src/pageObjects/elements/Forms/AbstractForm.ts"() {
534
+ "use strict";
535
+ init_AbstractPage();
536
+ init_FormButton();
537
+ init_FormGroup();
538
+ AbstractForm = class extends AbstractPage {
539
+ containerCssSelector = "";
540
+ _formName = "";
541
+ containerBy;
542
+ getContainerElement = () => {
543
+ return this.driver.findElement(this.containerBy);
544
+ };
545
+ set formName(name) {
546
+ this._formName = name;
547
+ }
548
+ get formName() {
549
+ return this._formName;
550
+ }
551
+ /**
552
+ * Возвращает true если форма есть в DOM
553
+ * @example
554
+ * class MyForm extends FormEdit {}
555
+ * //...
556
+ * const formEdit = new MyForm();
557
+ * expect(await formEdit.exists()).toBe(true);
558
+ */
559
+ async exists() {
560
+ try {
561
+ let elements = await this.driver.findElements(this.containerBy);
562
+ return elements.length > 0;
563
+ } catch (error) {
564
+ return false;
565
+ }
566
+ }
567
+ button(name) {
568
+ return new FormButton(this.containerCssSelector, this.formName, name, this.driver);
569
+ }
570
+ /**
571
+ * Находит группу на форме по имени
572
+ * @example
573
+ * const formEdit = new MyForm();
574
+ * //...
575
+ * expect(await formEdit.group('Name');
576
+ */
577
+ group(name) {
578
+ return new FormGroup(this.containerCssSelector, this.formName, name, this.driver);
579
+ }
580
+ };
494
581
  }
495
- async setInputValue(value) {
496
- const inputEl = await this.getInputElement();
497
- await click(inputEl, this.driver);
498
- await inputEl.sendKeys(value, import_selenium_webdriver9.Key.ENTER);
582
+ });
583
+
584
+ // src/pageObjects/elements/Forms/types.ts
585
+ var init_types = __esm({
586
+ "src/pageObjects/elements/Forms/types.ts"() {
587
+ "use strict";
499
588
  }
500
- async clear() {
501
- await this.clearStrategy.clear(this);
589
+ });
590
+
591
+ // src/pageObjects/elements/Table/utils.ts
592
+ function getCssRowByIndexSelector(index) {
593
+ return `tr[aria-rowindex="${transformInputIndex(index)}"]`;
594
+ }
595
+ function getCssCellByIndexSelector(index) {
596
+ return `td[role="gridcell"][aria-colindex="${transformInputIndex(index)}"]`;
597
+ }
598
+ var import_selenium_webdriver9, getColumnByIndexCssSelector, getColumnByCaptionCssSelector, getColumnByNameCssSelector, transformInputIndex, transformOutputIndex;
599
+ var init_utils = __esm({
600
+ "src/pageObjects/elements/Table/utils.ts"() {
601
+ "use strict";
602
+ import_selenium_webdriver9 = require("selenium-webdriver");
603
+ getColumnByIndexCssSelector = (columnIndex) => `td[aria-colindex="${transformInputIndex(columnIndex)}"]`;
604
+ getColumnByCaptionCssSelector = (caption) => `td[role="columnheader"][aria-label="Column ${caption}"]`;
605
+ getColumnByNameCssSelector = (name) => `td[role="columnheader"][data-fieldname="${name}"]`;
606
+ transformInputIndex = (index) => index + 1;
607
+ transformOutputIndex = (index) => +index - 1;
502
608
  }
503
- };
609
+ });
504
610
 
505
- // src/pageObjects/elements/Editors/TextEditor.ts
506
- var TextEditor = class extends AbstractDXEditorWithInput {
507
- constructor(parentCssSelector, elementCssSelector, driver) {
508
- super(parentCssSelector, elementCssSelector, driver);
509
- this.setClearStrategy(new InputClearStrategy());
611
+ // src/pageObjects/elements/Table/types.ts
612
+ var init_types2 = __esm({
613
+ "src/pageObjects/elements/Table/types.ts"() {
614
+ "use strict";
510
615
  }
511
- getValue() {
512
- return this.getInputValue();
616
+ });
617
+
618
+ // src/pageObjects/elements/Table/elements/Cell.ts
619
+ var import_selenium_webdriver10, Cell;
620
+ var init_Cell = __esm({
621
+ "src/pageObjects/elements/Table/elements/Cell.ts"() {
622
+ "use strict";
623
+ import_selenium_webdriver10 = require("selenium-webdriver");
624
+ init_AbstractElementWithParent();
625
+ init_utils();
626
+ init_types2();
627
+ Cell = class extends AbstractElementWithParent {
628
+ _index;
629
+ getCellIndex;
630
+ constructor(parentCssSelector, getCellIndex, index, driver) {
631
+ super(parentCssSelector, getCssCellByIndexSelector(index), driver);
632
+ this.getCellIndex = getCellIndex;
633
+ this._index = index;
634
+ }
635
+ set index(index) {
636
+ this._index = index;
637
+ this.elementCssSelector = getCssCellByIndexSelector(index);
638
+ }
639
+ async getBooleanValue(cellEl) {
640
+ const booleanEl = await cellEl.findElement(import_selenium_webdriver10.By.className("boolean-widget"));
641
+ return await booleanEl.getAttribute("aria-checked") === "true" ? 1 : 0;
642
+ }
643
+ async getTagsValue(cellEl) {
644
+ const tagsCssSelector = ".multiselect-container .multiselect-cell";
645
+ const tags = await cellEl.findElements(import_selenium_webdriver10.By.css(tagsCssSelector));
646
+ const values = [];
647
+ for (const tag of tags) {
648
+ values.push(await tag.getAttribute("textContent"));
649
+ }
650
+ return values;
651
+ }
652
+ async getElement() {
653
+ if (this._index == null) {
654
+ this.index = await this.getCellIndex();
655
+ }
656
+ return super.getElement();
657
+ }
658
+ async getValue() {
659
+ const cellEl = await this.getElement();
660
+ const cellElClass = await cellEl.getAttribute("class");
661
+ if (cellElClass.includes("boolean-column" /* Boolean */))
662
+ return this.getBooleanValue(cellEl);
663
+ if (cellElClass.includes("tags-column" /* Tags */))
664
+ return this.getTagsValue(cellEl);
665
+ return cellEl.getText();
666
+ }
667
+ getIndex() {
668
+ return this._index;
669
+ }
670
+ };
513
671
  }
514
- setValue(value) {
515
- return this.setInputValue(value);
672
+ });
673
+
674
+ // src/pageObjects/elements/Table/elements/Row.ts
675
+ var import_selenium_webdriver11, DX_SELECTION_CLASS, DX_ROW_EDIT_CLASS, DX_DATA_ROW_CLASS, Row;
676
+ var init_Row = __esm({
677
+ "src/pageObjects/elements/Table/elements/Row.ts"() {
678
+ "use strict";
679
+ import_selenium_webdriver11 = require("selenium-webdriver");
680
+ init_Cell();
681
+ init_utils();
682
+ init_AbstractElementWithParent();
683
+ init_actions();
684
+ init_wait();
685
+ DX_SELECTION_CLASS = "dx-selection";
686
+ DX_ROW_EDIT_CLASS = "dx-edit-row";
687
+ DX_DATA_ROW_CLASS = "dx-data-row";
688
+ Row = class extends AbstractElementWithParent {
689
+ index;
690
+ getColumnBy;
691
+ constructor(parentCssSelector, index, driver, getColumnBy) {
692
+ super(parentCssSelector, getCssRowByIndexSelector(index), driver);
693
+ this.index = index;
694
+ this.getColumnBy = getColumnBy;
695
+ }
696
+ _getCell({ index, name, title }) {
697
+ return new Cell(
698
+ this.getFullCssSelector(),
699
+ () => {
700
+ return this.getColumnBy({ title, name }).getIndex();
701
+ },
702
+ index,
703
+ this.driver
704
+ );
705
+ }
706
+ getCellByIndex(index) {
707
+ return this._getCell({ index });
708
+ }
709
+ getCell(name) {
710
+ return this._getCell({ name });
711
+ }
712
+ getCellByTitle(title) {
713
+ return this._getCell({ title });
714
+ }
715
+ async select() {
716
+ const rowEl = await this.getElement();
717
+ await click(rowEl, this.driver);
718
+ await wait(
719
+ async () => {
720
+ const classes = await this.getClasses();
721
+ return classes.includes(DX_SELECTION_CLASS);
722
+ },
723
+ this.driver,
724
+ "Cannot select row"
725
+ );
726
+ }
727
+ async isSelected() {
728
+ const result = await this.getAttribute("aria-selected");
729
+ return result === "true";
730
+ }
731
+ getIndex() {
732
+ return this.index;
733
+ }
734
+ async getCells() {
735
+ const cells = await this.driver.findElements(import_selenium_webdriver11.By.css(`${this.getFullCssSelector()} td[role="gridcell"]`));
736
+ const result = [];
737
+ cells.forEach((_, index) => {
738
+ const newCell = this.getCellByIndex(index);
739
+ result.push(newCell);
740
+ });
741
+ return result;
742
+ }
743
+ async clickInlineButton(buttonClass) {
744
+ const FIXED_TABLE_CSS_SELECTOR = ".dx-fixed-columns .dx-datagrid-content.dx-datagrid-content-fixed";
745
+ const buttonCssSelector = `.${DX_DATA_ROW_CLASS}[aria-rowindex="${transformInputIndex(
746
+ this.index
747
+ )}"] .${buttonClass}`;
748
+ const button = await this.driver.findElement(
749
+ import_selenium_webdriver11.By.css(`${this.parentCssSelector} ${FIXED_TABLE_CSS_SELECTOR} ${buttonCssSelector}`)
750
+ );
751
+ return click(button, this.driver);
752
+ }
753
+ async checkEditingMode(isEditing, msg) {
754
+ await wait(
755
+ async () => {
756
+ return (await this.getClasses()).includes(DX_ROW_EDIT_CLASS) === isEditing;
757
+ },
758
+ this.driver,
759
+ msg
760
+ );
761
+ }
762
+ async edit() {
763
+ await this.clickInlineButton("edit");
764
+ await this.checkEditingMode(true, "Row did not switch to edit mode");
765
+ }
766
+ async save() {
767
+ await this.clickInlineButton("save");
768
+ await this.checkEditingMode(false, "Row did not saved");
769
+ }
770
+ async cancel() {
771
+ await this.clickInlineButton("cancel");
772
+ await this.checkEditingMode(false, "Row did not switch to normal mode");
773
+ }
774
+ };
516
775
  }
517
- };
776
+ });
518
777
 
519
- // src/pageObjects/elements/Editors/NumberEditor.ts
520
- var NumberEditor = class extends AbstractDXEditorWithInput {
521
- constructor(parentCssSelector, elementCssSelector, driver) {
522
- super(parentCssSelector, elementCssSelector, driver);
523
- this.setClearStrategy(new InputClearStrategy());
778
+ // src/pageObjects/elements/Table/elements/Column.ts
779
+ var import_selenium_webdriver12, Column;
780
+ var init_Column = __esm({
781
+ "src/pageObjects/elements/Table/elements/Column.ts"() {
782
+ "use strict";
783
+ import_selenium_webdriver12 = require("selenium-webdriver");
784
+ init_utils();
785
+ init_AbstractElementWithParent();
786
+ init_fixElementStaleError();
787
+ Column = class extends AbstractElementWithParent {
788
+ _index;
789
+ _caption;
790
+ _name;
791
+ headerCssSelector;
792
+ constructor({ parentCssSelector, headerCssSelector, name, caption, index, driver }) {
793
+ super(parentCssSelector, "", driver);
794
+ this._name = name;
795
+ this.index = index;
796
+ this._caption = caption;
797
+ this.headerCssSelector = headerCssSelector;
798
+ }
799
+ set index(index) {
800
+ this._index = index;
801
+ this.elementCssSelector = getColumnByIndexCssSelector(index);
802
+ }
803
+ get index() {
804
+ return this._index;
805
+ }
806
+ async getElement() {
807
+ await this.getIndex();
808
+ return super.getElement();
809
+ }
810
+ async getColumnHeaderIndexBy(cssSelector) {
811
+ const column = await fixElementStaleError(import_selenium_webdriver12.By.css(`${this.parentCssSelector} ${this.headerCssSelector} ${cssSelector}`), this.driver);
812
+ return transformOutputIndex(await column.getAttribute("aria-colindex"));
813
+ }
814
+ async getIndexByCaption() {
815
+ return this.getColumnHeaderIndexBy(getColumnByCaptionCssSelector(this._caption));
816
+ }
817
+ async getIndexByName() {
818
+ return this.getColumnHeaderIndexBy(getColumnByNameCssSelector(this._name));
819
+ }
820
+ async caption() {
821
+ const el = await this.getElement();
822
+ return el.getText();
823
+ }
824
+ async getIndex() {
825
+ if (this.index != null) {
826
+ return this.index;
827
+ }
828
+ if (this._caption != null) {
829
+ this.index = await this.getIndexByCaption();
830
+ return this.index;
831
+ }
832
+ if (this._name != null) {
833
+ this.index = await this.getIndexByName();
834
+ return this.index;
835
+ }
836
+ throw new Error("Cant get the index in the column");
837
+ }
838
+ };
524
839
  }
525
- async getValue() {
526
- const value = await super.getInputValue();
527
- return value == "" ? null : Number.parseFloat(value);
840
+ });
841
+
842
+ // src/pageObjects/elements/Editors/ClearStrategy/InputClearStrategy.ts
843
+ var InputClearStrategy;
844
+ var init_InputClearStrategy = __esm({
845
+ "src/pageObjects/elements/Editors/ClearStrategy/InputClearStrategy.ts"() {
846
+ "use strict";
847
+ InputClearStrategy = class {
848
+ async clear(editor) {
849
+ const inputEl = await editor.getInputElement();
850
+ await inputEl.clear();
851
+ }
852
+ };
528
853
  }
529
- setValue(value) {
530
- return this.setInputValue(value);
854
+ });
855
+
856
+ // src/pageObjects/elements/Editors/AbstractEditor.ts
857
+ var import_selenium_webdriver13, AbstractDXEditorWithInput;
858
+ var init_AbstractEditor = __esm({
859
+ "src/pageObjects/elements/Editors/AbstractEditor.ts"() {
860
+ "use strict";
861
+ import_selenium_webdriver13 = require("selenium-webdriver");
862
+ init_actions();
863
+ init_InputClearStrategy();
864
+ init_AbstractElementWithParent();
865
+ AbstractDXEditorWithInput = class extends AbstractElementWithParent {
866
+ clearStrategy = new InputClearStrategy();
867
+ setClearStrategy(strategy) {
868
+ this.clearStrategy = strategy;
869
+ }
870
+ getInputCssSelector() {
871
+ return `${this.getFullCssSelector()} .dx-texteditor-input`;
872
+ }
873
+ async getInputElement() {
874
+ return this.driver.findElement(import_selenium_webdriver13.By.css(this.getInputCssSelector()));
875
+ }
876
+ async getInputValue() {
877
+ const inputEl = await this.getInputElement();
878
+ return inputEl.getAttribute("value");
879
+ }
880
+ async setInputValue(value) {
881
+ const inputEl = await this.getInputElement();
882
+ await click(inputEl, this.driver);
883
+ await inputEl.sendKeys(value, import_selenium_webdriver13.Key.ENTER);
884
+ }
885
+ async clear() {
886
+ await this.clearStrategy.clear(this);
887
+ }
888
+ };
531
889
  }
532
- };
890
+ });
533
891
 
534
- // src/pageObjects/elements/Editors/types.ts
535
- var ControlClass = /* @__PURE__ */ ((ControlClass2) => {
536
- ControlClass2["Text"] = "text-control";
537
- ControlClass2["TextArea"] = "text-area-control";
538
- ControlClass2["Number"] = "number-control";
539
- ControlClass2["CheckBox"] = "check-box";
540
- ControlClass2["Multiselect"] = "multi-select-control";
541
- ControlClass2["Select"] = "select-control";
542
- ControlClass2["Switch"] = "switch-control";
543
- ControlClass2["Date"] = "date-control";
544
- ControlClass2["SingleDateRange"] = "single-date-range-control";
545
- ControlClass2["BooleanSelector"] = "buttons-group";
546
- ControlClass2["ButtonGroup"] = "button-group-field";
547
- return ControlClass2;
548
- })(ControlClass || {});
892
+ // src/pageObjects/elements/Editors/TextEditor.ts
893
+ var TextEditor;
894
+ var init_TextEditor = __esm({
895
+ "src/pageObjects/elements/Editors/TextEditor.ts"() {
896
+ "use strict";
897
+ init_AbstractEditor();
898
+ init_InputClearStrategy();
899
+ TextEditor = class extends AbstractDXEditorWithInput {
900
+ constructor(parentCssSelector, elementCssSelector, driver) {
901
+ super(parentCssSelector, elementCssSelector, driver);
902
+ this.setClearStrategy(new InputClearStrategy());
903
+ }
904
+ getValue() {
905
+ return this.getInputValue();
906
+ }
907
+ setValue(value) {
908
+ return this.setInputValue(value);
909
+ }
910
+ };
911
+ }
912
+ });
549
913
 
550
- // src/pageObjects/AbstractFormElement.ts
551
- var AbstractFormElement = class extends AbstractElementWithParent {
552
- constructor(parentCssSelector, elementCssSelector, driver) {
553
- super(parentCssSelector, elementCssSelector, driver);
914
+ // src/pageObjects/elements/Editors/NumberEditor.ts
915
+ var NumberEditor;
916
+ var init_NumberEditor = __esm({
917
+ "src/pageObjects/elements/Editors/NumberEditor.ts"() {
918
+ "use strict";
919
+ init_AbstractEditor();
920
+ init_InputClearStrategy();
921
+ NumberEditor = class extends AbstractDXEditorWithInput {
922
+ constructor(parentCssSelector, elementCssSelector, driver) {
923
+ super(parentCssSelector, elementCssSelector, driver);
924
+ this.setClearStrategy(new InputClearStrategy());
925
+ }
926
+ async getValue() {
927
+ const value = await super.getInputValue();
928
+ return value == "" ? null : Number.parseFloat(value);
929
+ }
930
+ setValue(value) {
931
+ return this.setInputValue(value);
932
+ }
933
+ };
554
934
  }
555
- };
935
+ });
556
936
 
557
- // src/pageObjects/elements/Editors/CheckBox.ts
558
- var CheckBox = class extends AbstractElementWithParent {
559
- async getValue() {
560
- const result = await this.getAttribute("aria-checked");
561
- if (result === "true")
562
- return 1;
563
- if (result === "false")
564
- return 0;
565
- return null;
566
- }
567
- async setValue(value) {
568
- const inputEl = await this.getElement();
569
- const currentValue = await this.getValue();
570
- if (currentValue !== value) {
571
- await click(inputEl, this.driver);
572
- }
937
+ // src/pageObjects/elements/Editors/types.ts
938
+ var ControlClass;
939
+ var init_types3 = __esm({
940
+ "src/pageObjects/elements/Editors/types.ts"() {
941
+ "use strict";
942
+ ControlClass = /* @__PURE__ */ ((ControlClass2) => {
943
+ ControlClass2["Text"] = "text-control";
944
+ ControlClass2["TextArea"] = "text-area-control";
945
+ ControlClass2["Number"] = "number-control";
946
+ ControlClass2["CheckBox"] = "check-box";
947
+ ControlClass2["Multiselect"] = "multi-select-control";
948
+ ControlClass2["Select"] = "select-control";
949
+ ControlClass2["Switch"] = "switch-control";
950
+ ControlClass2["Date"] = "date-control";
951
+ ControlClass2["SingleDateRange"] = "single-date-range-control";
952
+ ControlClass2["BooleanSelector"] = "buttons-group";
953
+ ControlClass2["ButtonGroup"] = "button-group-field";
954
+ return ControlClass2;
955
+ })(ControlClass || {});
573
956
  }
574
- };
957
+ });
575
958
 
576
- // src/pageObjects/elements/Editors/SelectBoxEditor.ts
577
- var import_selenium_webdriver11 = require("selenium-webdriver");
959
+ // src/pageObjects/elements/Editors/CheckBox.ts
960
+ var CheckBox;
961
+ var init_CheckBox = __esm({
962
+ "src/pageObjects/elements/Editors/CheckBox.ts"() {
963
+ "use strict";
964
+ init_actions();
965
+ init_AbstractElementWithParent();
966
+ CheckBox = class extends AbstractElementWithParent {
967
+ async getValue() {
968
+ const result = await this.getAttribute("aria-checked");
969
+ if (result === "true")
970
+ return 1;
971
+ if (result === "false")
972
+ return 0;
973
+ return null;
974
+ }
975
+ async setValue(value) {
976
+ const inputEl = await this.getElement();
977
+ const currentValue = await this.getValue();
978
+ if (currentValue !== value) {
979
+ await click(inputEl, this.driver);
980
+ }
981
+ }
982
+ };
983
+ }
984
+ });
578
985
 
579
986
  // src/utils/xpathHelper.ts
580
- var XPathHelper = class {
581
- static getClassAndValueXpath(cssClass, value) {
582
- return `div[contains(@class, '${cssClass}') and contains(.,'${value}')]`;
987
+ var XPathHelper;
988
+ var init_xpathHelper = __esm({
989
+ "src/utils/xpathHelper.ts"() {
990
+ "use strict";
991
+ XPathHelper = class {
992
+ static getClassAndValueXpath(cssClass, value) {
993
+ return `div[contains(@class, '${cssClass}') and contains(.,'${value}')]`;
994
+ }
995
+ };
583
996
  }
584
- };
997
+ });
585
998
 
586
999
  // src/pageObjects/elements/Editors/ClearStrategy/ClearButtonStrategy.ts
587
- var import_selenium_webdriver10 = require("selenium-webdriver");
588
- var DX_TEXTEDITOR_EMPTY = "dx-texteditor-empty";
589
- var DX_CLEAR_BUTTON_AREA = "dx-clear-button-area";
590
- var ClearButtonStrategy = class {
591
- editorContainerClass;
592
- _driver;
593
- constructor(editorContainerClass, driver) {
594
- this.editorContainerClass = editorContainerClass;
595
- this._driver = driver;
596
- }
597
- async isEmptyEditorField() {
598
- const editorContainer = await this._driver.findElement(import_selenium_webdriver10.By.css(this.editorContainerClass));
599
- const classAttribute = await editorContainer.getAttribute("class");
600
- return classAttribute.includes(DX_TEXTEDITOR_EMPTY);
601
- }
602
- async clear() {
603
- if (await this.isEmptyEditorField()) {
604
- throw new Error("This field is already empty");
605
- }
606
- const clearBtnSelector = `${this.editorContainerClass} .${DX_CLEAR_BUTTON_AREA}`;
607
- const clearBtn = await this._driver.findElement(import_selenium_webdriver10.By.css(clearBtnSelector));
608
- await click(clearBtn, this._driver);
1000
+ var import_selenium_webdriver14, DX_TEXTEDITOR_EMPTY, DX_CLEAR_BUTTON_AREA, ClearButtonStrategy;
1001
+ var init_ClearButtonStrategy = __esm({
1002
+ "src/pageObjects/elements/Editors/ClearStrategy/ClearButtonStrategy.ts"() {
1003
+ "use strict";
1004
+ import_selenium_webdriver14 = require("selenium-webdriver");
1005
+ init_actions();
1006
+ DX_TEXTEDITOR_EMPTY = "dx-texteditor-empty";
1007
+ DX_CLEAR_BUTTON_AREA = "dx-clear-button-area";
1008
+ ClearButtonStrategy = class {
1009
+ editorContainerClass;
1010
+ _driver;
1011
+ constructor(editorContainerClass, driver) {
1012
+ this.editorContainerClass = editorContainerClass;
1013
+ this._driver = driver;
1014
+ }
1015
+ async isEmptyEditorField() {
1016
+ const editorContainer = await this._driver.findElement(import_selenium_webdriver14.By.css(this.editorContainerClass));
1017
+ const classAttribute = await editorContainer.getAttribute("class");
1018
+ return classAttribute.includes(DX_TEXTEDITOR_EMPTY);
1019
+ }
1020
+ async clear() {
1021
+ if (await this.isEmptyEditorField()) {
1022
+ throw new Error("This field is already empty");
1023
+ }
1024
+ const clearBtnSelector = `${this.editorContainerClass} .${DX_CLEAR_BUTTON_AREA}`;
1025
+ const clearBtn = await this._driver.findElement(import_selenium_webdriver14.By.css(clearBtnSelector));
1026
+ await click(clearBtn, this._driver);
1027
+ }
1028
+ };
609
1029
  }
610
- };
1030
+ });
611
1031
 
612
1032
  // src/pageObjects/elements/Editors/SelectBoxEditor.ts
613
- var SELECT_BOX_OPTION_TEXT_CONTAINER_CLASS = "d5-multi-select-item";
614
- var combinedValueXpath = (value) => `//body/div[@id="root"]/div[contains(@class, "dx-overlay-wrapper")]//${XPathHelper.getClassAndValueXpath(SELECT_BOX_OPTION_TEXT_CONTAINER_CLASS, value)}`;
615
- var dropDownOptionClick = async (optionValue, driver, delay = true) => {
616
- const { implicit } = await driver.manage().getTimeouts();
617
- let optElement = null;
618
- const timeout = delay ? implicit : 200;
619
- let err = null;
620
- try {
621
- await driver.manage().setTimeouts({ implicit: timeout });
622
- optElement = await driver.findElement(import_selenium_webdriver11.By.xpath(combinedValueXpath(optionValue)));
623
- await click(optElement, driver);
624
- } catch (e) {
625
- err = new Error(`Item not found: "${optionValue}"`);
626
- } finally {
627
- await driver.manage().setTimeouts({ implicit });
628
- }
629
- if (err)
630
- throw err;
631
- };
632
- var SelectBoxEditor = class extends AbstractDXEditorWithInput {
633
- constructor(parentCssSelector, elementCssSelector, driver) {
634
- super(parentCssSelector, elementCssSelector, driver);
635
- this.setClearStrategy(new ClearButtonStrategy(this.getFullCssSelector(), this.driver));
636
- }
637
- async setSelectInputValue(value) {
638
- const inputEl = await this.getInputElement();
639
- await click(inputEl, this.driver);
640
- try {
641
- await dropDownOptionClick(value, this.driver, false);
642
- } catch {
643
- await inputEl.sendKeys(value, import_selenium_webdriver11.Key.ENTER);
644
- await dropDownOptionClick(value, this.driver);
645
- }
646
- }
647
- async getValue() {
648
- const value = await super.getInputValue();
649
- return value == "" ? null : value;
650
- }
651
- setValue(value) {
652
- return this.setSelectInputValue(value);
1033
+ var import_selenium_webdriver15, SELECT_BOX_OPTION_TEXT_CONTAINER_CLASS, combinedValueXpath, dropDownOptionClick, SelectBoxEditor;
1034
+ var init_SelectBoxEditor = __esm({
1035
+ "src/pageObjects/elements/Editors/SelectBoxEditor.ts"() {
1036
+ "use strict";
1037
+ init_AbstractEditor();
1038
+ import_selenium_webdriver15 = require("selenium-webdriver");
1039
+ init_xpathHelper();
1040
+ init_actions();
1041
+ init_ClearButtonStrategy();
1042
+ SELECT_BOX_OPTION_TEXT_CONTAINER_CLASS = "d5-multi-select-item";
1043
+ combinedValueXpath = (value) => `//body/div[@id="root"]/div[contains(@class, "dx-overlay-wrapper")]//${XPathHelper.getClassAndValueXpath(SELECT_BOX_OPTION_TEXT_CONTAINER_CLASS, value)}`;
1044
+ dropDownOptionClick = async (optionValue, driver, delay = true) => {
1045
+ const { implicit } = await driver.manage().getTimeouts();
1046
+ let optElement = null;
1047
+ const timeout = delay ? implicit : 200;
1048
+ let err = null;
1049
+ try {
1050
+ await driver.manage().setTimeouts({ implicit: timeout });
1051
+ optElement = await driver.findElement(import_selenium_webdriver15.By.xpath(combinedValueXpath(optionValue)));
1052
+ await click(optElement, driver);
1053
+ } catch (e) {
1054
+ err = new Error(`Item not found: "${optionValue}"`);
1055
+ } finally {
1056
+ await driver.manage().setTimeouts({ implicit });
1057
+ }
1058
+ if (err)
1059
+ throw err;
1060
+ };
1061
+ SelectBoxEditor = class extends AbstractDXEditorWithInput {
1062
+ constructor(parentCssSelector, elementCssSelector, driver) {
1063
+ super(parentCssSelector, elementCssSelector, driver);
1064
+ this.setClearStrategy(new ClearButtonStrategy(this.getFullCssSelector(), this.driver));
1065
+ }
1066
+ async setSelectInputValue(value) {
1067
+ const inputEl = await this.getInputElement();
1068
+ await click(inputEl, this.driver);
1069
+ try {
1070
+ await dropDownOptionClick(value, this.driver, false);
1071
+ } catch {
1072
+ await inputEl.sendKeys(value, import_selenium_webdriver15.Key.ENTER);
1073
+ await dropDownOptionClick(value, this.driver);
1074
+ }
1075
+ }
1076
+ async getValue() {
1077
+ const value = await super.getInputValue();
1078
+ return value == "" ? null : value;
1079
+ }
1080
+ setValue(value) {
1081
+ return this.setSelectInputValue(value);
1082
+ }
1083
+ };
653
1084
  }
654
- };
1085
+ });
655
1086
 
656
1087
  // src/pageObjects/elements/Editors/SwitchEditor.ts
657
- var SwitchEditor = class extends AbstractElementWithParent {
658
- async getValue() {
659
- const result = await this.getAttribute("aria-label");
660
- if (result === "ON")
661
- return 1;
662
- if (result === "OFF")
663
- return 0;
664
- return null;
665
- }
666
- async setValue(value) {
667
- if (value !== 0 && value !== 1) {
668
- value = value ? 1 : 0;
669
- }
670
- const inputEl = await this.getElement();
671
- const currentValue = await this.getValue();
672
- if (currentValue === value) {
673
- return;
674
- }
675
- await click(inputEl, this.driver);
676
- await wait(async () => {
677
- const updatedValue = await this.getValue();
678
- return updatedValue !== currentValue;
679
- }, this.driver);
1088
+ var SwitchEditor;
1089
+ var init_SwitchEditor = __esm({
1090
+ "src/pageObjects/elements/Editors/SwitchEditor.ts"() {
1091
+ "use strict";
1092
+ init_actions();
1093
+ init_AbstractElementWithParent();
1094
+ init_wait();
1095
+ SwitchEditor = class extends AbstractElementWithParent {
1096
+ async getValue() {
1097
+ const result = await this.getAttribute("aria-label");
1098
+ if (result === "ON")
1099
+ return 1;
1100
+ if (result === "OFF")
1101
+ return 0;
1102
+ return null;
1103
+ }
1104
+ async setValue(value) {
1105
+ if (value !== 0 && value !== 1) {
1106
+ value = value ? 1 : 0;
1107
+ }
1108
+ const inputEl = await this.getElement();
1109
+ const currentValue = await this.getValue();
1110
+ if (currentValue === value) {
1111
+ return;
1112
+ }
1113
+ await click(inputEl, this.driver);
1114
+ await wait(async () => {
1115
+ const updatedValue = await this.getValue();
1116
+ return updatedValue !== currentValue;
1117
+ }, this.driver);
1118
+ }
1119
+ };
680
1120
  }
681
- };
1121
+ });
682
1122
 
683
1123
  // src/pageObjects/elements/Editors/TagBox.ts
684
- var import_selenium_webdriver12 = require("selenium-webdriver");
685
- var TAGS_SELECTOR = ".dx-tag .tag-text";
686
- var DX_TAG_CONTAINER = "dx-tag-container";
687
- var DX_TEXTEDITOR_EMPTY2 = "dx-texteditor-empty";
688
- var BTN_OK_SELECTOR = ".dx-tagbox-popup-wrapper .dx-popup-bottom .dx-button.dx-popup-done";
689
- var TAG_BOX_LIST_ITEM_SELECTOR = '.dx-tagbox-popup-wrapper .dx-list-item[aria-selected="true"]';
690
- var TagBox = class extends AbstractDXEditorWithInput {
691
- constructor(parentCssSelector, elementCssSelector, driver) {
692
- super(parentCssSelector, elementCssSelector, driver);
693
- this.setClearStrategy(new ClearButtonStrategy(this.getFullCssSelector(), this.driver));
694
- }
695
- async setTagBoxInputValue(values) {
696
- const lastElement = values[values.length - 1];
697
- const inputEl = await this.getInputElement();
698
- await inputEl.click();
699
- for (const value of values) {
700
- await this.selectOption(inputEl, value, lastElement);
701
- }
702
- await this.confirmSelection();
703
- }
704
- async waitOptionSelection() {
705
- const option = await this.driver.findElement(import_selenium_webdriver12.By.css(TAG_BOX_LIST_ITEM_SELECTOR));
706
- await wait(() => option.isDisplayed(), this.driver);
707
- }
708
- async selectOption(inputEl, value, lastElement) {
709
- try {
710
- await dropDownOptionClick(value, this.driver, false);
711
- } catch {
712
- await inputEl.sendKeys(value);
713
- await dropDownOptionClick(value, this.driver);
714
- }
715
- await this.waitOptionSelection();
716
- if (value !== lastElement) {
717
- await inputEl.clear();
718
- }
719
- }
720
- async confirmSelection() {
721
- const btnOk = await this.driver.findElement(import_selenium_webdriver12.By.css(BTN_OK_SELECTOR));
722
- await click(btnOk, this.driver);
723
- }
724
- async getTagBoxInputValue() {
725
- if (await this.isTagBoxEmpty()) {
726
- return [];
727
- }
728
- const tags = await this.driver.findElements(
729
- import_selenium_webdriver12.By.css(`${this.getFullCssSelector()} .${DX_TAG_CONTAINER} ${TAGS_SELECTOR}`)
730
- );
731
- const values = [];
732
- for (const tag of tags) {
733
- values.push(await tag.getAttribute("textContent"));
734
- }
735
- return values;
736
- }
737
- async isTagBoxEmpty() {
738
- const classAttribute = await this.getClasses();
739
- return classAttribute.includes(DX_TEXTEDITOR_EMPTY2);
740
- }
741
- async getValue() {
742
- const value = await this.getTagBoxInputValue();
743
- return value.length ? value : null;
744
- }
745
- async setValue(values) {
746
- if (!Array.isArray(values)) {
747
- throw new Error("The provided value is not an array");
748
- }
749
- await this.setTagBoxInputValue(values);
750
- }
751
- async remove(itemText) {
752
- const tagValues = await this.getValue();
753
- const tagExists = tagValues.includes(itemText);
754
- if (!tagExists) {
755
- throw new Error(`The tag with the text: ${itemText} was not found`);
756
- }
757
- const clearBtnTestId = byTestIdCssSelector(`clear-button-${itemText}`);
758
- const clearBtn = await this.driver.findElement(
759
- import_selenium_webdriver12.By.css(`${this.getFullCssSelector()} .${DX_TAG_CONTAINER} ${clearBtnTestId}`)
760
- );
761
- await click(clearBtn, this.driver);
1124
+ var import_selenium_webdriver16, TAGS_SELECTOR, DX_TAG_CONTAINER, DX_TEXTEDITOR_EMPTY2, BTN_OK_SELECTOR, TAG_BOX_LIST_ITEM_SELECTOR, TagBox;
1125
+ var init_TagBox = __esm({
1126
+ "src/pageObjects/elements/Editors/TagBox.ts"() {
1127
+ "use strict";
1128
+ init_AbstractEditor();
1129
+ import_selenium_webdriver16 = require("selenium-webdriver");
1130
+ init_actions();
1131
+ init_locators();
1132
+ init_SelectBoxEditor();
1133
+ init_ClearButtonStrategy();
1134
+ init_wait();
1135
+ TAGS_SELECTOR = ".dx-tag .tag-text";
1136
+ DX_TAG_CONTAINER = "dx-tag-container";
1137
+ DX_TEXTEDITOR_EMPTY2 = "dx-texteditor-empty";
1138
+ BTN_OK_SELECTOR = ".dx-tagbox-popup-wrapper .dx-popup-bottom .dx-button.dx-popup-done";
1139
+ TAG_BOX_LIST_ITEM_SELECTOR = '.dx-tagbox-popup-wrapper .dx-list-item[aria-selected="true"]';
1140
+ TagBox = class extends AbstractDXEditorWithInput {
1141
+ constructor(parentCssSelector, elementCssSelector, driver) {
1142
+ super(parentCssSelector, elementCssSelector, driver);
1143
+ this.setClearStrategy(new ClearButtonStrategy(this.getFullCssSelector(), this.driver));
1144
+ }
1145
+ async setTagBoxInputValue(values) {
1146
+ const lastElement = values[values.length - 1];
1147
+ const inputEl = await this.getInputElement();
1148
+ await inputEl.click();
1149
+ for (const value of values) {
1150
+ await this.selectOption(inputEl, value, lastElement);
1151
+ }
1152
+ await this.confirmSelection();
1153
+ }
1154
+ async waitOptionSelection() {
1155
+ const option = await this.driver.findElement(import_selenium_webdriver16.By.css(TAG_BOX_LIST_ITEM_SELECTOR));
1156
+ await wait(() => option.isDisplayed(), this.driver);
1157
+ }
1158
+ async selectOption(inputEl, value, lastElement) {
1159
+ try {
1160
+ await dropDownOptionClick(value, this.driver, false);
1161
+ } catch {
1162
+ await inputEl.sendKeys(value);
1163
+ await dropDownOptionClick(value, this.driver);
1164
+ }
1165
+ await this.waitOptionSelection();
1166
+ if (value !== lastElement) {
1167
+ await inputEl.clear();
1168
+ }
1169
+ }
1170
+ async confirmSelection() {
1171
+ const btnOk = await this.driver.findElement(import_selenium_webdriver16.By.css(BTN_OK_SELECTOR));
1172
+ await click(btnOk, this.driver);
1173
+ }
1174
+ async getTagBoxInputValue() {
1175
+ if (await this.isTagBoxEmpty()) {
1176
+ return [];
1177
+ }
1178
+ const tags = await this.driver.findElements(
1179
+ import_selenium_webdriver16.By.css(`${this.getFullCssSelector()} .${DX_TAG_CONTAINER} ${TAGS_SELECTOR}`)
1180
+ );
1181
+ const values = [];
1182
+ for (const tag of tags) {
1183
+ values.push(await tag.getAttribute("textContent"));
1184
+ }
1185
+ return values;
1186
+ }
1187
+ async isTagBoxEmpty() {
1188
+ const classAttribute = await this.getClasses();
1189
+ return classAttribute.includes(DX_TEXTEDITOR_EMPTY2);
1190
+ }
1191
+ async getValue() {
1192
+ const value = await this.getTagBoxInputValue();
1193
+ return value.length ? value : null;
1194
+ }
1195
+ async setValue(values) {
1196
+ if (!Array.isArray(values)) {
1197
+ throw new Error("The provided value is not an array");
1198
+ }
1199
+ await this.setTagBoxInputValue(values);
1200
+ }
1201
+ async remove(itemText) {
1202
+ const tagValues = await this.getValue();
1203
+ const tagExists = tagValues.includes(itemText);
1204
+ if (!tagExists) {
1205
+ throw new Error(`The tag with the text: ${itemText} was not found`);
1206
+ }
1207
+ const clearBtnTestId = byTestIdCssSelector(`clear-button-${itemText}`);
1208
+ const clearBtn = await this.driver.findElement(
1209
+ import_selenium_webdriver16.By.css(`${this.getFullCssSelector()} .${DX_TAG_CONTAINER} ${clearBtnTestId}`)
1210
+ );
1211
+ await click(clearBtn, this.driver);
1212
+ }
1213
+ };
762
1214
  }
763
- };
1215
+ });
764
1216
 
765
1217
  // src/pageObjects/elements/Editors/ButtonGroup.ts
766
- var import_selenium_webdriver13 = require("selenium-webdriver");
767
- var ITEM_CLASS = "dx-buttongroup-item";
768
- var SELECTED_CLASS = "dx-state-selected";
769
- var ButtonGroup = class extends AbstractElementWithParent {
770
- getItems() {
771
- return this.driver.findElements(import_selenium_webdriver13.By.css(`${this.getFullCssSelector()} .${ITEM_CLASS}`));
772
- }
773
- getDataValue(el) {
774
- return el.getAttribute("data-value");
775
- }
776
- async getValue() {
777
- const selectedEl = await this.driver.findElement(import_selenium_webdriver13.By.css(`${this.getFullCssSelector()} .${ITEM_CLASS}.${SELECTED_CLASS}`));
778
- return this.getDataValue(selectedEl);
779
- }
780
- async setValue(value) {
781
- const items = await this.getItems();
782
- let buttonEl = void 0;
783
- for (const item of items) {
784
- const text = await this.getDataValue(item);
785
- if (text == value) {
786
- buttonEl = item;
787
- break;
1218
+ var import_selenium_webdriver17, ITEM_CLASS, SELECTED_CLASS, ButtonGroup;
1219
+ var init_ButtonGroup = __esm({
1220
+ "src/pageObjects/elements/Editors/ButtonGroup.ts"() {
1221
+ "use strict";
1222
+ init_actions();
1223
+ import_selenium_webdriver17 = require("selenium-webdriver");
1224
+ init_AbstractElementWithParent();
1225
+ ITEM_CLASS = "dx-buttongroup-item";
1226
+ SELECTED_CLASS = "dx-state-selected";
1227
+ ButtonGroup = class extends AbstractElementWithParent {
1228
+ getItems() {
1229
+ return this.driver.findElements(import_selenium_webdriver17.By.css(`${this.getFullCssSelector()} .${ITEM_CLASS}`));
788
1230
  }
789
- }
790
- if (!buttonEl)
791
- throw new Error(`Cannot find item in button group with text: ${value}`);
792
- await click(buttonEl, this.driver);
1231
+ getDataValue(el) {
1232
+ return el.getAttribute("data-value");
1233
+ }
1234
+ async getValue() {
1235
+ const selectedEl = await this.driver.findElement(import_selenium_webdriver17.By.css(`${this.getFullCssSelector()} .${ITEM_CLASS}.${SELECTED_CLASS}`));
1236
+ return this.getDataValue(selectedEl);
1237
+ }
1238
+ async setValue(value) {
1239
+ const items = await this.getItems();
1240
+ let buttonEl = void 0;
1241
+ for (const item of items) {
1242
+ const text = await this.getDataValue(item);
1243
+ if (text == value) {
1244
+ buttonEl = item;
1245
+ break;
1246
+ }
1247
+ }
1248
+ if (!buttonEl)
1249
+ throw new Error(`Cannot find item in button group with text: ${value}`);
1250
+ await click(buttonEl, this.driver);
1251
+ }
1252
+ };
793
1253
  }
794
- };
1254
+ });
795
1255
 
796
1256
  // src/pageObjects/elements/Editors/BooleanSelector.ts
797
- var BooleanSelector = class extends ButtonGroup {
798
- // @ts-ignore
799
- async getValue() {
800
- const value = await super.getValue();
801
- return value === "null" ? null : value === "1" ? 1 : 0;
802
- }
803
- // @ts-ignore
804
- async setValue(value) {
805
- const val = value == null ? "null" : value ? "1" : "0";
806
- await super.setValue(val);
1257
+ var BooleanSelector;
1258
+ var init_BooleanSelector = __esm({
1259
+ "src/pageObjects/elements/Editors/BooleanSelector.ts"() {
1260
+ "use strict";
1261
+ init_ButtonGroup();
1262
+ BooleanSelector = class extends ButtonGroup {
1263
+ // @ts-ignore
1264
+ async getValue() {
1265
+ const value = await super.getValue();
1266
+ return value === "null" ? null : value === "1" ? 1 : 0;
1267
+ }
1268
+ // @ts-ignore
1269
+ async setValue(value) {
1270
+ const val = value == null ? "null" : value ? "1" : "0";
1271
+ await super.setValue(val);
1272
+ }
1273
+ };
807
1274
  }
808
- };
809
-
810
- // src/pageObjects/elements/Editors/Date/SingleDateEditor.ts
811
- var import_selenium_webdriver15 = require("selenium-webdriver");
812
-
813
- // src/pageObjects/elements/Editors/Date/BaseDateEditor.ts
814
- var import_selenium_webdriver14 = require("selenium-webdriver");
1275
+ });
815
1276
 
816
1277
  // src/pageObjects/elements/Editors/Date/utils.ts
817
- var formatDMYDate = (date) => {
818
- const [year, month, day] = date.toJSON().split("T")[0].split("-");
819
- return `${day}${month}${year}`;
820
- };
1278
+ var formatDMYDate;
1279
+ var init_utils2 = __esm({
1280
+ "src/pageObjects/elements/Editors/Date/utils.ts"() {
1281
+ "use strict";
1282
+ formatDMYDate = (date) => {
1283
+ const [year, month, day] = date.toJSON().split("T")[0].split("-");
1284
+ return `${day}${month}${year}`;
1285
+ };
1286
+ }
1287
+ });
821
1288
 
822
1289
  // src/pageObjects/elements/Editors/Date/BaseDateEditor.ts
823
- var BTN_CALENDAR_POPOVER_OPEN_SELECTOR = "calendar-popover-open-button";
824
- var BTN_CALENDAR_POPOVER_DATE_FROM_INPUT_SELECTOR = "DateRange__inputs-item--dateFrom";
825
- var BTN_CALENDAR_POPOVER_DATE_TO_INPUT_SELECTOR = "DateRange__inputs-item--dateTo";
826
- var BTN_SAVE_SELECTOR = "DateRange__button-save";
827
- var BaseDateEditor = class extends AbstractDXEditorWithInput {
828
- constructor(parentCssSelector, elementCssSelector, driver) {
829
- super(parentCssSelector, elementCssSelector, driver);
830
- this.setClearStrategy(new InputClearStrategy());
831
- }
832
- async setDateValue(value) {
833
- const actions = this.driver.actions({ async: true });
834
- const dateField = await this.driver.findElement(import_selenium_webdriver14.By.css(`${this.getFullCssSelector()}`));
835
- const dateFieldDataTestID = await this.getDataTestId();
836
- const calendarPopoverSelector = byTestIdCssSelector(`${dateFieldDataTestID}-calendar-popover`);
837
- const dateInputEl = await this.getInputElement();
838
- await dateInputEl.clear();
839
- if (Array.isArray(value)) {
840
- const formattedDates = value.map(formatDMYDate);
841
- const button = await dateField.findElement(import_selenium_webdriver14.By.css(`.${BTN_CALENDAR_POPOVER_OPEN_SELECTOR}`));
842
- await button.click();
843
- const calendarPopoverElement = await this.driver.findElement(import_selenium_webdriver14.By.css(calendarPopoverSelector));
844
- const dateFromInput = await calendarPopoverElement.findElement(import_selenium_webdriver14.By.css(`.${BTN_CALENDAR_POPOVER_DATE_FROM_INPUT_SELECTOR} .dx-texteditor-input`));
845
- const dateToInput = await calendarPopoverElement.findElement(import_selenium_webdriver14.By.css(`.${BTN_CALENDAR_POPOVER_DATE_TO_INPUT_SELECTOR} .dx-texteditor-input`));
846
- await dateFromInput.click();
847
- await dateFromInput.sendKeys(formattedDates[0]);
848
- await dateToInput.click();
849
- await actions.move({ origin: dateInputEl }).sendKeys(import_selenium_webdriver14.Key.HOME).perform();
850
- await dateToInput.sendKeys(formattedDates[1]);
851
- await actions.move({ origin: dateInputEl }).sendKeys(import_selenium_webdriver14.Key.ENTER).perform();
852
- const btnOk = await this.driver.findElement(import_selenium_webdriver14.By.css(`.${BTN_SAVE_SELECTOR}`));
853
- await btnOk.click();
854
- } else {
855
- const formattedDate = formatDMYDate(value);
856
- await click(dateInputEl, this.driver);
857
- await actions.move({ origin: dateInputEl }).sendKeys(import_selenium_webdriver14.Key.HOME).perform();
858
- await actions.move({ origin: dateInputEl }).sendKeys(formattedDate, import_selenium_webdriver14.Key.ENTER).perform();
859
- }
1290
+ var import_selenium_webdriver18, BTN_CALENDAR_POPOVER_OPEN_SELECTOR, BTN_CALENDAR_POPOVER_DATE_FROM_INPUT_SELECTOR, BTN_CALENDAR_POPOVER_DATE_TO_INPUT_SELECTOR, BTN_SAVE_SELECTOR, BaseDateEditor;
1291
+ var init_BaseDateEditor = __esm({
1292
+ "src/pageObjects/elements/Editors/Date/BaseDateEditor.ts"() {
1293
+ "use strict";
1294
+ init_AbstractEditor();
1295
+ init_InputClearStrategy();
1296
+ import_selenium_webdriver18 = require("selenium-webdriver");
1297
+ init_locators();
1298
+ init_actions();
1299
+ init_utils2();
1300
+ BTN_CALENDAR_POPOVER_OPEN_SELECTOR = "calendar-popover-open-button";
1301
+ BTN_CALENDAR_POPOVER_DATE_FROM_INPUT_SELECTOR = "DateRange__inputs-item--dateFrom";
1302
+ BTN_CALENDAR_POPOVER_DATE_TO_INPUT_SELECTOR = "DateRange__inputs-item--dateTo";
1303
+ BTN_SAVE_SELECTOR = "DateRange__button-save";
1304
+ BaseDateEditor = class extends AbstractDXEditorWithInput {
1305
+ constructor(parentCssSelector, elementCssSelector, driver) {
1306
+ super(parentCssSelector, elementCssSelector, driver);
1307
+ this.setClearStrategy(new InputClearStrategy());
1308
+ }
1309
+ async setDateValue(value) {
1310
+ const actions = this.driver.actions({ async: true });
1311
+ const dateField = await this.driver.findElement(import_selenium_webdriver18.By.css(`${this.getFullCssSelector()}`));
1312
+ const dateFieldDataTestID = await this.getDataTestId();
1313
+ const calendarPopoverSelector = byTestIdCssSelector(`${dateFieldDataTestID}-calendar-popover`);
1314
+ const dateInputEl = await this.getInputElement();
1315
+ await dateInputEl.clear();
1316
+ if (Array.isArray(value)) {
1317
+ const formattedDates = value.map(formatDMYDate);
1318
+ const button = await dateField.findElement(import_selenium_webdriver18.By.css(`.${BTN_CALENDAR_POPOVER_OPEN_SELECTOR}`));
1319
+ await button.click();
1320
+ const calendarPopoverElement = await this.driver.findElement(import_selenium_webdriver18.By.css(calendarPopoverSelector));
1321
+ const dateFromInput = await calendarPopoverElement.findElement(import_selenium_webdriver18.By.css(`.${BTN_CALENDAR_POPOVER_DATE_FROM_INPUT_SELECTOR} .dx-texteditor-input`));
1322
+ const dateToInput = await calendarPopoverElement.findElement(import_selenium_webdriver18.By.css(`.${BTN_CALENDAR_POPOVER_DATE_TO_INPUT_SELECTOR} .dx-texteditor-input`));
1323
+ await dateFromInput.click();
1324
+ await dateFromInput.sendKeys(formattedDates[0]);
1325
+ await dateToInput.click();
1326
+ await actions.move({ origin: dateInputEl }).sendKeys(import_selenium_webdriver18.Key.HOME).perform();
1327
+ await dateToInput.sendKeys(formattedDates[1]);
1328
+ await actions.move({ origin: dateInputEl }).sendKeys(import_selenium_webdriver18.Key.ENTER).perform();
1329
+ const btnOk = await this.driver.findElement(import_selenium_webdriver18.By.css(`.${BTN_SAVE_SELECTOR}`));
1330
+ await btnOk.click();
1331
+ } else {
1332
+ const formattedDate = formatDMYDate(value);
1333
+ await click(dateInputEl, this.driver);
1334
+ await actions.move({ origin: dateInputEl }).sendKeys(import_selenium_webdriver18.Key.HOME).perform();
1335
+ await actions.move({ origin: dateInputEl }).sendKeys(formattedDate, import_selenium_webdriver18.Key.ENTER).perform();
1336
+ }
1337
+ }
1338
+ };
860
1339
  }
861
- };
1340
+ });
862
1341
 
863
1342
  // src/pageObjects/elements/Editors/Date/SingleDateEditor.ts
864
- var SingleDateEditor = class extends BaseDateEditor {
865
- constructor(parentCssSelector, elementCssSelector, driver) {
866
- super(parentCssSelector, elementCssSelector, driver);
867
- this.setClearStrategy(new InputClearStrategy());
868
- }
869
- async getDateElement() {
870
- return this.driver.findElement(import_selenium_webdriver15.By.css(this.getFullCssSelector() + " .dx-dropdowneditor-input-wrapper input[type=hidden]"));
871
- }
872
- async getDateValue() {
873
- const inputEl = await this.getDateElement();
874
- return inputEl.getAttribute("value");
875
- }
876
- async getValue() {
877
- const value = await this.getDateValue();
878
- return value == "" ? null : new Date(value);
879
- }
880
- setValue(value) {
881
- if (typeof value === "object") {
882
- return this.setDateValue(value);
883
- }
884
- throw new Error(`Value is incorrect. It should be Object`);
1343
+ var import_selenium_webdriver19, SingleDateEditor;
1344
+ var init_SingleDateEditor = __esm({
1345
+ "src/pageObjects/elements/Editors/Date/SingleDateEditor.ts"() {
1346
+ "use strict";
1347
+ import_selenium_webdriver19 = require("selenium-webdriver");
1348
+ init_InputClearStrategy();
1349
+ init_BaseDateEditor();
1350
+ SingleDateEditor = class extends BaseDateEditor {
1351
+ constructor(parentCssSelector, elementCssSelector, driver) {
1352
+ super(parentCssSelector, elementCssSelector, driver);
1353
+ this.setClearStrategy(new InputClearStrategy());
1354
+ }
1355
+ async getDateElement() {
1356
+ return this.driver.findElement(import_selenium_webdriver19.By.css(this.getFullCssSelector() + " .dx-dropdowneditor-input-wrapper input[type=hidden]"));
1357
+ }
1358
+ async getDateValue() {
1359
+ const inputEl = await this.getDateElement();
1360
+ return inputEl.getAttribute("value");
1361
+ }
1362
+ async getValue() {
1363
+ const value = await this.getDateValue();
1364
+ return value == "" ? null : new Date(value);
1365
+ }
1366
+ setValue(value) {
1367
+ if (typeof value === "object") {
1368
+ return this.setDateValue(value);
1369
+ }
1370
+ throw new Error(`Value is incorrect. It should be Object`);
1371
+ }
1372
+ };
885
1373
  }
886
- };
1374
+ });
887
1375
 
888
1376
  // src/pageObjects/elements/Editors/Date/DateRangeEditor.ts
889
- var import_selenium_webdriver16 = require("selenium-webdriver");
890
- var DateRangeEditor = class extends BaseDateEditor {
891
- constructor(parentCssSelector, elementCssSelector, driver) {
892
- super(parentCssSelector, elementCssSelector, driver);
893
- this.setClearStrategy(new InputClearStrategy());
894
- }
895
- async getDateElement() {
896
- return this.driver.findElement(import_selenium_webdriver16.By.css(this.getFullCssSelector() + " .dx-texteditor-input"));
897
- }
898
- async getDateValue() {
899
- const inputEl = await this.getDateElement();
900
- const dateFromStr = await inputEl.getAttribute("datefrom");
901
- const dateToStr = await inputEl.getAttribute("dateto");
902
- const dateFrom = new Date(dateFromStr);
903
- const dateTo = new Date(dateToStr);
904
- return [dateFrom, dateTo];
905
- }
906
- async getValue() {
907
- const values = await this.getDateValue();
908
- return !values.length ? null : values;
909
- }
910
- setValue(value) {
911
- if (typeof value === "object") {
912
- return this.setDateValue(value);
913
- }
914
- throw new Error(`Value is incorrect. It should be Object`);
1377
+ var import_selenium_webdriver20, DateRangeEditor;
1378
+ var init_DateRangeEditor = __esm({
1379
+ "src/pageObjects/elements/Editors/Date/DateRangeEditor.ts"() {
1380
+ "use strict";
1381
+ import_selenium_webdriver20 = require("selenium-webdriver");
1382
+ init_InputClearStrategy();
1383
+ init_BaseDateEditor();
1384
+ DateRangeEditor = class extends BaseDateEditor {
1385
+ constructor(parentCssSelector, elementCssSelector, driver) {
1386
+ super(parentCssSelector, elementCssSelector, driver);
1387
+ this.setClearStrategy(new InputClearStrategy());
1388
+ }
1389
+ async getDateElement() {
1390
+ return this.driver.findElement(import_selenium_webdriver20.By.css(this.getFullCssSelector() + " .dx-texteditor-input"));
1391
+ }
1392
+ async getDateValue() {
1393
+ const inputEl = await this.getDateElement();
1394
+ const dateFromStr = await inputEl.getAttribute("datefrom");
1395
+ const dateToStr = await inputEl.getAttribute("dateto");
1396
+ const dateFrom = new Date(dateFromStr);
1397
+ const dateTo = new Date(dateToStr);
1398
+ return [dateFrom, dateTo];
1399
+ }
1400
+ async getValue() {
1401
+ const values = await this.getDateValue();
1402
+ return !values.length ? null : values;
1403
+ }
1404
+ setValue(value) {
1405
+ if (typeof value === "object") {
1406
+ return this.setDateValue(value);
1407
+ }
1408
+ throw new Error(`Value is incorrect. It should be Object`);
1409
+ }
1410
+ };
915
1411
  }
916
- };
1412
+ });
917
1413
 
918
1414
  // src/pageObjects/elements/Editors/Date/DateEditor.ts
919
- var DateEditor = class extends AbstractDXEditorWithInput {
920
- editorInstance = null;
921
- initPromise;
922
- constructor(parentCssSelector, elementCssSelector, driver) {
923
- super(parentCssSelector, elementCssSelector, driver);
924
- this.initPromise = this.init(parentCssSelector, elementCssSelector, driver);
925
- }
926
- async init(parentCssSelector, elementCssSelector, driver) {
927
- await this.updateEditorInstance(parentCssSelector, elementCssSelector, driver);
928
- }
929
- async updateEditorInstance(parentCssSelector, elementCssSelector, driver) {
930
- const elementInstance = new AbstractFormElement(parentCssSelector, elementCssSelector, driver);
931
- const classString = await elementInstance.getClasses();
932
- switch (true) {
933
- case classString.includes("date-control" /* Date */):
934
- this.editorInstance = new SingleDateEditor(parentCssSelector, elementCssSelector, driver);
935
- break;
936
- case classString.includes("single-date-range-control" /* SingleDateRange */):
937
- this.editorInstance = new DateRangeEditor(parentCssSelector, elementCssSelector, driver);
938
- break;
939
- default:
940
- this.editorInstance = new SingleDateEditor(parentCssSelector, elementCssSelector, driver);
941
- }
942
- }
943
- async ensureInitialized() {
944
- if (!this.editorInstance) {
945
- await this.initPromise;
946
- }
947
- }
948
- async setValue(value) {
949
- await this.ensureInitialized();
950
- if (this.editorInstance) {
951
- await this.editorInstance.setValue(value);
952
- return await this.updateEditorInstance(this.parentCssSelector, this.elementCssSelector, this.driver);
953
- }
954
- throw new Error("Editor instance is not initialized.");
955
- }
956
- async getValue() {
957
- await this.ensureInitialized();
958
- if (this.editorInstance) {
959
- return this.editorInstance.getValue();
960
- }
961
- throw new Error("Editor instance is not initialized.");
1415
+ var DateEditor;
1416
+ var init_DateEditor = __esm({
1417
+ "src/pageObjects/elements/Editors/Date/DateEditor.ts"() {
1418
+ "use strict";
1419
+ init_SingleDateEditor();
1420
+ init_DateRangeEditor();
1421
+ init_AbstractFormElement();
1422
+ init_AbstractEditor();
1423
+ init_types3();
1424
+ DateEditor = class extends AbstractDXEditorWithInput {
1425
+ editorInstance = null;
1426
+ initPromise;
1427
+ constructor(parentCssSelector, elementCssSelector, driver) {
1428
+ super(parentCssSelector, elementCssSelector, driver);
1429
+ this.initPromise = this.init(parentCssSelector, elementCssSelector, driver);
1430
+ }
1431
+ async init(parentCssSelector, elementCssSelector, driver) {
1432
+ await this.updateEditorInstance(parentCssSelector, elementCssSelector, driver);
1433
+ }
1434
+ async updateEditorInstance(parentCssSelector, elementCssSelector, driver) {
1435
+ const elementInstance = new AbstractFormElement(parentCssSelector, elementCssSelector, driver);
1436
+ const classString = await elementInstance.getClasses();
1437
+ switch (true) {
1438
+ case classString.includes("date-control" /* Date */):
1439
+ this.editorInstance = new SingleDateEditor(parentCssSelector, elementCssSelector, driver);
1440
+ break;
1441
+ case classString.includes("single-date-range-control" /* SingleDateRange */):
1442
+ this.editorInstance = new DateRangeEditor(parentCssSelector, elementCssSelector, driver);
1443
+ break;
1444
+ default:
1445
+ this.editorInstance = new SingleDateEditor(parentCssSelector, elementCssSelector, driver);
1446
+ }
1447
+ }
1448
+ async ensureInitialized() {
1449
+ if (!this.editorInstance) {
1450
+ await this.initPromise;
1451
+ }
1452
+ }
1453
+ async setValue(value) {
1454
+ await this.ensureInitialized();
1455
+ if (this.editorInstance) {
1456
+ await this.editorInstance.setValue(value);
1457
+ return await this.updateEditorInstance(this.parentCssSelector, this.elementCssSelector, this.driver);
1458
+ }
1459
+ throw new Error("Editor instance is not initialized.");
1460
+ }
1461
+ async getValue() {
1462
+ await this.ensureInitialized();
1463
+ if (this.editorInstance) {
1464
+ return this.editorInstance.getValue();
1465
+ }
1466
+ throw new Error("Editor instance is not initialized.");
1467
+ }
1468
+ };
962
1469
  }
963
- };
1470
+ });
964
1471
 
965
1472
  // src/pageObjects/elements/Editors/editorFactory.ts
966
- var editorFactory = async (parentCssSelector, elementCssSelector, driver) => {
967
- const elementInstance = new AbstractFormElement(parentCssSelector, elementCssSelector, driver);
968
- const classSting = await elementInstance.getClasses();
969
- if ((classSting.includes("text-control" /* Text */) || classSting.includes("text-area-control" /* TextArea */)) && !classSting.includes("single-date-range-control" /* SingleDateRange */))
970
- return new TextEditor(parentCssSelector, elementCssSelector, driver);
971
- if (classSting.includes("number-control" /* Number */))
972
- return new NumberEditor(parentCssSelector, elementCssSelector, driver);
973
- if (classSting.includes("check-box" /* CheckBox */))
974
- return new CheckBox(parentCssSelector, elementCssSelector, driver);
975
- if (classSting.includes("multi-select-control" /* Multiselect */))
976
- return new TagBox(parentCssSelector, elementCssSelector, driver);
977
- if (classSting.includes("select-control" /* Select */))
978
- return new SelectBoxEditor(parentCssSelector, elementCssSelector, driver);
979
- if (classSting.includes("switch-control" /* Switch */))
980
- return new SwitchEditor(parentCssSelector, elementCssSelector, driver);
981
- if (classSting.includes("date-control" /* Date */) || classSting.includes("single-date-range-control" /* SingleDateRange */)) {
982
- return new DateEditor(parentCssSelector, elementCssSelector, driver);
983
- }
984
- if (classSting.includes("buttons-group" /* BooleanSelector */))
985
- return new BooleanSelector(parentCssSelector, elementCssSelector, driver);
986
- if (classSting.includes("button-group-field" /* ButtonGroup */))
987
- return new ButtonGroup(parentCssSelector, elementCssSelector, driver);
988
- throw new Error("Unknown type of editor. Please write ticket to the support");
989
- };
1473
+ var editorFactory;
1474
+ var init_editorFactory = __esm({
1475
+ "src/pageObjects/elements/Editors/editorFactory.ts"() {
1476
+ "use strict";
1477
+ init_types3();
1478
+ init_AbstractFormElement();
1479
+ init_TextEditor();
1480
+ init_NumberEditor();
1481
+ init_CheckBox();
1482
+ init_SelectBoxEditor();
1483
+ init_SwitchEditor();
1484
+ init_TagBox();
1485
+ init_BooleanSelector();
1486
+ init_ButtonGroup();
1487
+ init_DateEditor();
1488
+ editorFactory = async (parentCssSelector, elementCssSelector, driver) => {
1489
+ const elementInstance = new AbstractFormElement(parentCssSelector, elementCssSelector, driver);
1490
+ const classSting = await elementInstance.getClasses();
1491
+ if ((classSting.includes("text-control" /* Text */) || classSting.includes("text-area-control" /* TextArea */)) && !classSting.includes("single-date-range-control" /* SingleDateRange */))
1492
+ return new TextEditor(parentCssSelector, elementCssSelector, driver);
1493
+ if (classSting.includes("number-control" /* Number */))
1494
+ return new NumberEditor(parentCssSelector, elementCssSelector, driver);
1495
+ if (classSting.includes("check-box" /* CheckBox */))
1496
+ return new CheckBox(parentCssSelector, elementCssSelector, driver);
1497
+ if (classSting.includes("multi-select-control" /* Multiselect */))
1498
+ return new TagBox(parentCssSelector, elementCssSelector, driver);
1499
+ if (classSting.includes("select-control" /* Select */))
1500
+ return new SelectBoxEditor(parentCssSelector, elementCssSelector, driver);
1501
+ if (classSting.includes("switch-control" /* Switch */))
1502
+ return new SwitchEditor(parentCssSelector, elementCssSelector, driver);
1503
+ if (classSting.includes("date-control" /* Date */) || classSting.includes("single-date-range-control" /* SingleDateRange */)) {
1504
+ return new DateEditor(parentCssSelector, elementCssSelector, driver);
1505
+ }
1506
+ if (classSting.includes("buttons-group" /* BooleanSelector */))
1507
+ return new BooleanSelector(parentCssSelector, elementCssSelector, driver);
1508
+ if (classSting.includes("button-group-field" /* ButtonGroup */))
1509
+ return new ButtonGroup(parentCssSelector, elementCssSelector, driver);
1510
+ throw new Error("Unknown type of editor. Please write ticket to the support");
1511
+ };
1512
+ }
1513
+ });
990
1514
 
991
- // src/pageObjects/elements/AbstractEditor.ts
992
- var AbstractEditor = class extends AbstractElementWithParent {
993
- editor;
994
- constructor(parentCssSelector, elementCssSelector, driver) {
995
- super(parentCssSelector, elementCssSelector, driver);
996
- }
997
- async initEditor() {
998
- if (!this.editor) {
999
- this.editor = await editorFactory(this.parentCssSelector, this.elementCssSelector, this.driver);
1000
- }
1515
+ // src/pageObjects/elements/Editors/index.ts
1516
+ var init_Editors = __esm({
1517
+ "src/pageObjects/elements/Editors/index.ts"() {
1518
+ "use strict";
1519
+ init_TextEditor();
1520
+ init_NumberEditor();
1521
+ init_editorFactory();
1522
+ init_types3();
1001
1523
  }
1002
- /**
1003
- * Возвращает значение в поле
1004
- * @example
1005
- * expect(await formEdit.field('NumberFld').getValue()).toBe(10);
1006
- * expect(await formEdit.field('TextFld').getValue()).toBe('TestValue');
1007
- */
1008
- async getValue() {
1009
- await this.initEditor();
1010
- return this.editor.getValue();
1011
- }
1012
- /**
1013
- * Устанавливает значение в поле
1014
- * @example
1015
- * await formEdit.field('NumberFld').setValue(123);
1016
- * await formEdit.field('TextFld').setValue('TestValue');
1017
- */
1018
- async setValue(value) {
1019
- await this.initEditor();
1020
- return this.editor.setValue(value);
1021
- }
1022
- /**
1023
- * Очищает значение в поле
1024
- * @example
1025
- * await formEdit.field('NumberFld').clear();
1026
- */
1027
- async clear() {
1028
- await this.initEditor();
1029
- if (!this.editor.clear) {
1030
- throw new Error("The clear method is not available for this field type.");
1031
- }
1032
- return this.editor.clear();
1033
- }
1034
- /**
1035
- * Удаляет тег по переданному тексту
1036
- * @example
1037
- * await formEdit.field('TagBox').remove('test');
1038
- */
1039
- async remove(itemText) {
1040
- await this.initEditor();
1041
- if (!this.editor.remove) {
1042
- throw new Error("This method is only available for the TagBox field.");
1043
- }
1044
- return this.editor.remove(itemText);
1045
- }
1046
- /**
1047
- * Возвращает значение true|false в зависимости readOnly поле или нет
1048
- * @example
1049
- * expect(await formEdit.field('NumberFld').isReadonly()).toBe(true);
1050
- * expect(await formEdit.field('TextFld').isReadonly()).toBe(false);
1051
- */
1052
- async isReadonly() {
1053
- await this.initEditor();
1054
- return this.editor.isReadonly();
1524
+ });
1525
+
1526
+ // src/pageObjects/elements/AbstractEditor.ts
1527
+ var AbstractEditor;
1528
+ var init_AbstractEditor2 = __esm({
1529
+ "src/pageObjects/elements/AbstractEditor.ts"() {
1530
+ "use strict";
1531
+ init_AbstractElementWithParent();
1532
+ init_Editors();
1533
+ AbstractEditor = class extends AbstractElementWithParent {
1534
+ editor;
1535
+ constructor(parentCssSelector, elementCssSelector, driver) {
1536
+ super(parentCssSelector, elementCssSelector, driver);
1537
+ }
1538
+ async initEditor() {
1539
+ if (!this.editor) {
1540
+ this.editor = await editorFactory(this.parentCssSelector, this.elementCssSelector, this.driver);
1541
+ }
1542
+ }
1543
+ /**
1544
+ * Возвращает значение в поле
1545
+ * @example
1546
+ * expect(await formEdit.field('NumberFld').getValue()).toBe(10);
1547
+ * expect(await formEdit.field('TextFld').getValue()).toBe('TestValue');
1548
+ */
1549
+ async getValue() {
1550
+ await this.initEditor();
1551
+ return this.editor.getValue();
1552
+ }
1553
+ /**
1554
+ * Устанавливает значение в поле
1555
+ * @example
1556
+ * await formEdit.field('NumberFld').setValue(123);
1557
+ * await formEdit.field('TextFld').setValue('TestValue');
1558
+ */
1559
+ async setValue(value) {
1560
+ await this.initEditor();
1561
+ return this.editor.setValue(value);
1562
+ }
1563
+ /**
1564
+ * Очищает значение в поле
1565
+ * @example
1566
+ * await formEdit.field('NumberFld').clear();
1567
+ */
1568
+ async clear() {
1569
+ await this.initEditor();
1570
+ if (!this.editor.clear) {
1571
+ throw new Error("The clear method is not available for this field type.");
1572
+ }
1573
+ return this.editor.clear();
1574
+ }
1575
+ /**
1576
+ * Удаляет тег по переданному тексту
1577
+ * @example
1578
+ * await formEdit.field('TagBox').remove('test');
1579
+ */
1580
+ async remove(itemText) {
1581
+ await this.initEditor();
1582
+ if (!this.editor.remove) {
1583
+ throw new Error("This method is only available for the TagBox field.");
1584
+ }
1585
+ return this.editor.remove(itemText);
1586
+ }
1587
+ /**
1588
+ * Возвращает значение true|false в зависимости readOnly поле или нет
1589
+ * @example
1590
+ * expect(await formEdit.field('NumberFld').isReadonly()).toBe(true);
1591
+ * expect(await formEdit.field('TextFld').isReadonly()).toBe(false);
1592
+ */
1593
+ async isReadonly() {
1594
+ await this.initEditor();
1595
+ return this.editor.isReadonly();
1596
+ }
1597
+ };
1055
1598
  }
1056
- };
1599
+ });
1057
1600
 
1058
1601
  // src/pageObjects/elements/FormField.ts
1059
- var FormField = class extends AbstractEditor {
1060
- constructor(parentCssSelector, formName, name, driver) {
1061
- super(parentCssSelector, byTestIdCssSelector(createFieldTestId(formName, name)), driver);
1602
+ var FormField;
1603
+ var init_FormField = __esm({
1604
+ "src/pageObjects/elements/FormField.ts"() {
1605
+ "use strict";
1606
+ init_locators();
1607
+ init_createDataTestId();
1608
+ init_AbstractEditor2();
1609
+ FormField = class extends AbstractEditor {
1610
+ constructor(parentCssSelector, formName, name, driver) {
1611
+ super(parentCssSelector, byTestIdCssSelector(createFieldTestId(formName, name)), driver);
1612
+ }
1613
+ };
1062
1614
  }
1063
- };
1615
+ });
1064
1616
 
1065
- // src/pageObjects/elements/Groups/AbstractGroup.ts
1066
- var AbstractGroup = class extends AbstractElementWithParent {
1067
- async isDisplayed() {
1068
- const groupElement = await this.getElement();
1069
- return await groupElement.isDisplayed();
1617
+ // src/pageObjects/elements/Table/Table.ts
1618
+ var import_selenium_webdriver21, Table;
1619
+ var init_Table = __esm({
1620
+ "src/pageObjects/elements/Table/Table.ts"() {
1621
+ "use strict";
1622
+ import_selenium_webdriver21 = require("selenium-webdriver");
1623
+ init_createDataTestId();
1624
+ init_AbstractElementWithParent();
1625
+ init_Row();
1626
+ init_Column();
1627
+ init_FormField();
1628
+ Table = class extends AbstractElementWithParent {
1629
+ formName;
1630
+ headerCssSelector;
1631
+ constructor(parentCssSelector, headerCssSelector, formName, driver) {
1632
+ super(parentCssSelector, `#${createTableId(formName)}`, driver);
1633
+ this.formName = formName;
1634
+ this.headerCssSelector = headerCssSelector;
1635
+ }
1636
+ getColumnBy = (args) => {
1637
+ if (args.title) {
1638
+ return this.getColumnByTitle(args.title);
1639
+ }
1640
+ return this.getColumnByName(args.name);
1641
+ };
1642
+ getRowByIndex(index) {
1643
+ return new Row(this.getFullCssSelector(), index, this.driver, this.getColumnBy);
1644
+ }
1645
+ getColumnByIndex(index) {
1646
+ return new Column({
1647
+ parentCssSelector: this.getFullCssSelector(),
1648
+ driver: this.driver,
1649
+ index
1650
+ });
1651
+ }
1652
+ getColumnByTitle = (title) => {
1653
+ return new Column({
1654
+ parentCssSelector: this.getFullCssSelector(),
1655
+ headerCssSelector: this.headerCssSelector,
1656
+ caption: title,
1657
+ driver: this.driver
1658
+ });
1659
+ };
1660
+ getColumnByName = (name) => {
1661
+ return new Column({
1662
+ parentCssSelector: this.getFullCssSelector(),
1663
+ headerCssSelector: this.headerCssSelector,
1664
+ name,
1665
+ driver: this.driver
1666
+ });
1667
+ };
1668
+ selectRowByIndex(index) {
1669
+ return this.getRowByIndex(index).select();
1670
+ }
1671
+ async getRows() {
1672
+ const rows = await this.driver.findElements(import_selenium_webdriver21.By.css(`${this.getFullCssSelector()} .dx-row.dx-data-row`));
1673
+ const result = [];
1674
+ rows.forEach((_, index) => {
1675
+ const newRow = new Row(this.getFullCssSelector(), index, this.driver, this.getColumnBy);
1676
+ result.push(newRow);
1677
+ });
1678
+ return result;
1679
+ }
1680
+ async getColumns() {
1681
+ const columns = await this.driver.findElements(
1682
+ import_selenium_webdriver21.By.css(`${this.getFullCssSelector()} ${this.headerCssSelector} td[role="columnheader"]`)
1683
+ );
1684
+ const result = [];
1685
+ columns.forEach((_, index) => {
1686
+ const newCol = new Column({
1687
+ parentCssSelector: this.getFullCssSelector(),
1688
+ index,
1689
+ driver: this.driver
1690
+ });
1691
+ result.push(newCol);
1692
+ });
1693
+ return result;
1694
+ }
1695
+ element() {
1696
+ return this.getElement();
1697
+ }
1698
+ /**
1699
+ * Находит поле когда форма находится в состоянии редактирования
1700
+ * @example
1701
+ * const form = new MyForm();
1702
+ * //...
1703
+ * expect(await form.field('Name').getValue()).toBe('test value');
1704
+ */
1705
+ field(name) {
1706
+ return new FormField(this.getFullCssSelector(), this.formName, name, this.driver);
1707
+ }
1708
+ };
1070
1709
  }
1071
- };
1072
-
1073
- // src/pageObjects/elements/Groups/Panel.ts
1074
- var Panel = class extends AbstractGroup {
1075
- };
1076
-
1077
- // src/pageObjects/elements/Groups/groupFactory.ts
1078
- var groupFactory = async (parentCssSelector, elementCssSelector, driver) => {
1079
- const elementInstance = new AbstractFormElement(parentCssSelector, elementCssSelector, driver);
1080
- const classSting = await elementInstance.getClasses();
1081
- if (classSting.includes("panel-group"))
1082
- return new Panel(parentCssSelector, elementCssSelector, driver);
1083
- throw new Error("Unknown type of group. Please write ticket to the support");
1084
- };
1710
+ });
1085
1711
 
1086
- // src/pageObjects/elements/FormGroup.ts
1087
- var FormGroup = class extends AbstractElementWithParent {
1088
- editor;
1089
- constructor(parentCssSelector, formName, name, driver) {
1090
- super(parentCssSelector, byTestIdCssSelector(createGroupTestId(formName, name)), driver);
1091
- }
1092
- async initEditor() {
1093
- if (!this.editor) {
1094
- this.editor = await groupFactory(this.parentCssSelector, this.elementCssSelector, this.driver);
1095
- }
1096
- }
1097
- /**
1098
- * Возвращает булевое значение доступна ли группа
1099
- * @example
1100
- * expect(await tableList.group('MainSuperPanel').isDisplayed();
1101
- */
1102
- async isDisplayed() {
1103
- try {
1104
- await this.initEditor();
1105
- return this.editor.isDisplayed();
1106
- } catch {
1107
- return false;
1108
- }
1712
+ // src/pageObjects/elements/TableToolbar/ToolbarGroupButton.ts
1713
+ var ToolbarGroupButton;
1714
+ var init_ToolbarGroupButton = __esm({
1715
+ "src/pageObjects/elements/TableToolbar/ToolbarGroupButton.ts"() {
1716
+ "use strict";
1717
+ init_AbstractButton();
1718
+ ToolbarGroupButton = class extends AbstractButton {
1719
+ name;
1720
+ constructor(parentCssSelector, name, driver) {
1721
+ super(parentCssSelector, ``, driver);
1722
+ this.name = name;
1723
+ }
1724
+ buttonNotDisplayedError() {
1725
+ return `Button ${this.name} cannot be clicked. It is not displayed or it is disabled`;
1726
+ }
1727
+ };
1109
1728
  }
1110
- };
1729
+ });
1111
1730
 
1112
- // src/pageObjects/elements/Forms/FormEdit.ts
1113
- var FormEdit = class extends AbstractForm {
1114
- saveButtonBy = import_selenium_webdriver17.By.id("button-save");
1115
- closeButtonBy = import_selenium_webdriver17.By.id("button-cancel");
1116
- constructor(driver) {
1117
- super(driver);
1118
- this.popupContainerCssSelector = `.popup .form-edit-${this.formName}`;
1119
- }
1120
- /**
1121
- * Находит поле формы редактирования по имени
1122
- * @example
1123
- * const formEdit = new MyForm();
1124
- * //...
1125
- * expect(await formEdit.field('Name').getValue()).toBe('test value');
1126
- */
1127
- field(name) {
1128
- return new FormField(this.containerCssSelector, this.formName, name, this.driver);
1129
- }
1130
- /**
1131
- * Проверяет не отключена ли кнопка Сохранить
1132
- * @example
1133
- * const formEdit = new MyForm();
1134
- * //...
1135
- * await formEdit.isSaveButtonDisabled();
1136
- */
1137
- async isSaveButtonDisabled() {
1138
- const saveButton = await this.driver.findElement(this.saveButtonBy);
1139
- const result = await saveButton.getAttribute("aria-disabled");
1140
- return result === "true";
1141
- }
1142
- /**
1143
- * Находит группу формы редактирования по имени
1144
- * @example
1145
- * const formEdit = new MyForm();
1146
- * //...
1147
- * expect(await formEdit.group('Name');
1148
- */
1149
- group(name) {
1150
- return new FormGroup(this.containerCssSelector, this.formName, name, this.driver);
1151
- }
1152
- /**
1153
- * Нажатие на кнопку Сохранить
1154
- * @example
1155
- * const formEdit = new MyForm();
1156
- * //...
1157
- * await formEdit.saveButtonClick();
1158
- */
1159
- async saveButtonClick() {
1160
- const saveButton = await this.driver.findElement(this.saveButtonBy);
1161
- await wait(async () => !await this.isSaveButtonDisabled(), this.driver, "Button is disabled");
1162
- await click(saveButton, this.driver);
1163
- }
1164
- /**
1165
- * Нажатие на кнопку Закрить
1166
- * @example
1167
- * const formEdit = new MyForm();
1168
- * //...
1169
- * await formEdit.closeButtonClick();
1170
- */
1171
- async closeButtonClick() {
1172
- const closeButton = await this.driver.findElement(this.closeButtonBy);
1173
- await click(closeButton, this.driver);
1731
+ // src/pageObjects/elements/TableToolbar/ToolbarButton.ts
1732
+ var TOOLBAR_BUTTON_CLASS, ToolbarButton;
1733
+ var init_ToolbarButton = __esm({
1734
+ "src/pageObjects/elements/TableToolbar/ToolbarButton.ts"() {
1735
+ "use strict";
1736
+ init_AbstractButton();
1737
+ TOOLBAR_BUTTON_CLASS = "toolbar-button";
1738
+ ToolbarButton = class extends AbstractButton {
1739
+ name;
1740
+ constructor(parentCssSelector, name, driver) {
1741
+ super(parentCssSelector, `#${TOOLBAR_BUTTON_CLASS}-${name}`, driver);
1742
+ this.name = name;
1743
+ }
1744
+ buttonNotDisplayedError() {
1745
+ return `Button ${this.name} cannot be clicked. It is not displayed or it is disabled`;
1746
+ }
1747
+ };
1174
1748
  }
1175
- };
1176
-
1177
- // src/pageObjects/elements/Table/Table.ts
1178
- var import_selenium_webdriver22 = require("selenium-webdriver");
1179
-
1180
- // src/pageObjects/elements/Table/elements/Row.ts
1181
- var import_selenium_webdriver20 = require("selenium-webdriver");
1182
-
1183
- // src/pageObjects/elements/Table/elements/Cell.ts
1184
- var import_selenium_webdriver19 = require("selenium-webdriver");
1185
-
1186
- // src/pageObjects/elements/Table/utils.ts
1187
- var import_selenium_webdriver18 = require("selenium-webdriver");
1188
- function getCssRowByIndexSelector(index) {
1189
- return `tr[aria-rowindex="${transformInputIndex(index)}"]`;
1190
- }
1191
- var getColumnByIndexCssSelector = (columnIndex) => `td[aria-colindex="${transformInputIndex(columnIndex)}"]`;
1192
- var getColumnByCaptionCssSelector = (caption) => `td[role="columnheader"][aria-label="Column ${caption}"]`;
1193
- var getColumnByNameCssSelector = (name) => `td[role="columnheader"][data-fieldname="${name}"]`;
1194
- function getCssCellByIndexSelector(index) {
1195
- return `td[role="gridcell"][aria-colindex="${transformInputIndex(index)}"]`;
1196
- }
1197
- var transformInputIndex = (index) => index + 1;
1198
- var transformOutputIndex = (index) => +index - 1;
1749
+ });
1199
1750
 
1200
- // src/pageObjects/elements/Table/elements/Cell.ts
1201
- var Cell = class extends AbstractElementWithParent {
1202
- _index;
1203
- getCellIndex;
1204
- constructor(parentCssSelector, getCellIndex, index, driver) {
1205
- super(parentCssSelector, getCssCellByIndexSelector(index), driver);
1206
- this.getCellIndex = getCellIndex;
1207
- this._index = index;
1208
- }
1209
- set index(index) {
1210
- this._index = index;
1211
- this.elementCssSelector = getCssCellByIndexSelector(index);
1212
- }
1213
- async getBooleanValue(cellEl) {
1214
- const booleanEl = await cellEl.findElement(import_selenium_webdriver19.By.className("boolean-widget"));
1215
- return await booleanEl.getAttribute("aria-checked") === "true" ? 1 : 0;
1216
- }
1217
- async getTagsValue(cellEl) {
1218
- const tagsCssSelector = ".multiselect-container .multiselect-cell";
1219
- const tags = await cellEl.findElements(import_selenium_webdriver19.By.css(tagsCssSelector));
1220
- const values = [];
1221
- for (const tag of tags) {
1222
- values.push(await tag.getAttribute("textContent"));
1223
- }
1224
- return values;
1225
- }
1226
- async getElement() {
1227
- if (this._index == null) {
1228
- this.index = await this.getCellIndex();
1229
- }
1230
- return super.getElement();
1231
- }
1232
- async getValue() {
1233
- const cellEl = await this.getElement();
1234
- const cellElClass = await cellEl.getAttribute("class");
1235
- if (cellElClass.includes("boolean-column" /* Boolean */))
1236
- return this.getBooleanValue(cellEl);
1237
- if (cellElClass.includes("tags-column" /* Tags */))
1238
- return this.getTagsValue(cellEl);
1239
- return cellEl.getText();
1240
- }
1241
- getIndex() {
1242
- return this._index;
1751
+ // src/utils/typesUtil.ts
1752
+ var types, type, isArray, isString;
1753
+ var init_typesUtil = __esm({
1754
+ "src/utils/typesUtil.ts"() {
1755
+ "use strict";
1756
+ types = {
1757
+ "[object Array]": "array",
1758
+ "[object Date]": "date",
1759
+ "[object Object]": "object",
1760
+ "[object String]": "string",
1761
+ "[object Null]": "null"
1762
+ };
1763
+ type = function(object) {
1764
+ const typeOfObject = Object.prototype.toString.call(object);
1765
+ return typeof object === "object" ? types[typeOfObject] || "object" : typeof object;
1766
+ };
1767
+ isArray = function(value) {
1768
+ return type(value) === "array";
1769
+ };
1770
+ isString = function(object) {
1771
+ return typeof object === "string";
1772
+ };
1243
1773
  }
1244
- };
1774
+ });
1245
1775
 
1246
- // src/pageObjects/elements/Table/elements/Row.ts
1247
- var DX_SELECTION_CLASS = "dx-selection";
1248
- var DX_ROW_EDIT_CLASS = "dx-edit-row";
1249
- var DX_DATA_ROW_CLASS = "dx-data-row";
1250
- var Row = class extends AbstractElementWithParent {
1251
- index;
1252
- getColumnBy;
1253
- constructor(parentCssSelector, index, driver, getColumnBy) {
1254
- super(parentCssSelector, getCssRowByIndexSelector(index), driver);
1255
- this.index = index;
1256
- this.getColumnBy = getColumnBy;
1257
- }
1258
- _getCell({ index, name, title }) {
1259
- return new Cell(
1260
- this.getFullCssSelector(),
1261
- () => {
1262
- return this.getColumnBy({ title, name }).getIndex();
1263
- },
1264
- index,
1265
- this.driver
1266
- );
1267
- }
1268
- getCellByIndex(index) {
1269
- return this._getCell({ index });
1270
- }
1271
- getCell(name) {
1272
- return this._getCell({ name });
1273
- }
1274
- getCellByTitle(title) {
1275
- return this._getCell({ title });
1276
- }
1277
- async select() {
1278
- const rowEl = await this.getElement();
1279
- await click(rowEl, this.driver);
1280
- await wait(
1281
- async () => {
1282
- const classes = await this.getClasses();
1283
- return classes.includes(DX_SELECTION_CLASS);
1284
- },
1285
- this.driver,
1286
- "Cannot select row"
1287
- );
1288
- }
1289
- async isSelected() {
1290
- const result = await this.getAttribute("aria-selected");
1291
- return result === "true";
1292
- }
1293
- getIndex() {
1294
- return this.index;
1295
- }
1296
- async getCells() {
1297
- const cells = await this.driver.findElements(import_selenium_webdriver20.By.css(`${this.getFullCssSelector()} td[role="gridcell"]`));
1298
- const result = [];
1299
- cells.forEach((_, index) => {
1300
- const newCell = this.getCellByIndex(index);
1301
- result.push(newCell);
1302
- });
1303
- return result;
1304
- }
1305
- async clickInlineButton(buttonClass) {
1306
- const FIXED_TABLE_CSS_SELECTOR = ".dx-fixed-columns .dx-datagrid-content.dx-datagrid-content-fixed";
1307
- const buttonCssSelector = `.${DX_DATA_ROW_CLASS}[aria-rowindex="${transformInputIndex(
1308
- this.index
1309
- )}"] .${buttonClass}`;
1310
- const button = await this.driver.findElement(
1311
- import_selenium_webdriver20.By.css(`${this.parentCssSelector} ${FIXED_TABLE_CSS_SELECTOR} ${buttonCssSelector}`)
1312
- );
1313
- return click(button, this.driver);
1314
- }
1315
- async checkEditingMode(isEditing, msg) {
1316
- await wait(
1317
- async () => {
1318
- return (await this.getClasses()).includes(DX_ROW_EDIT_CLASS) === isEditing;
1319
- },
1320
- this.driver,
1321
- msg
1322
- );
1323
- }
1324
- async edit() {
1325
- await this.clickInlineButton("edit");
1326
- await this.checkEditingMode(true, "Row did not switch to edit mode");
1327
- }
1328
- async save() {
1329
- await this.clickInlineButton("save");
1330
- await this.checkEditingMode(false, "Row did not saved");
1331
- }
1332
- async cancel() {
1333
- await this.clickInlineButton("cancel");
1334
- await this.checkEditingMode(false, "Row did not switch to normal mode");
1776
+ // src/pageObjects/elements/TableToolbar/ToolbarMenu.ts
1777
+ var import_selenium_webdriver22, SPINDOWN_CLASS, buttonGroupItemSelector, getFullCssSelector, buttonByTextXpath, ToolbarMenu;
1778
+ var init_ToolbarMenu = __esm({
1779
+ "src/pageObjects/elements/TableToolbar/ToolbarMenu.ts"() {
1780
+ "use strict";
1781
+ import_selenium_webdriver22 = require("selenium-webdriver");
1782
+ init_typesUtil();
1783
+ init_AbstractElementWithParent();
1784
+ init_locators();
1785
+ init_actions();
1786
+ init_waitElementIsClickable();
1787
+ init_fixElementStaleError();
1788
+ SPINDOWN_CLASS = ".dx-icon-spindown";
1789
+ buttonGroupItemSelector = (formName, name) => byTestIdCssSelector(`ftb-${formName}-${name}`);
1790
+ getFullCssSelector = (formName, name) => `${buttonGroupItemSelector(formName, name)} ${SPINDOWN_CLASS}`;
1791
+ buttonByTextXpath = (text) => `.//span[contains(@class, "dx-menu-item-text") and contains(text(), "${text}")]`;
1792
+ ToolbarMenu = class extends AbstractElementWithParent {
1793
+ _formName;
1794
+ constructor(parentCssSelector, formName, name, driver) {
1795
+ super(parentCssSelector, getFullCssSelector(formName, name), driver);
1796
+ this._formName = formName;
1797
+ }
1798
+ async openDropdownMenu() {
1799
+ const dropdown = await this.getElement();
1800
+ await click(dropdown, this.driver);
1801
+ }
1802
+ getCssSelectorToButton(name) {
1803
+ return byTestId(`ftb-${this._formName}-${name}`);
1804
+ }
1805
+ buttonNotDisplayedError(name) {
1806
+ return `Toolbar menu button ${name} cannot be clicked. It is not displayed or it is disabled`;
1807
+ }
1808
+ async goToButton(name, by) {
1809
+ const toolbarMenuItem = await fixElementStaleError(by, this.driver);
1810
+ await waitElementIsClickable({
1811
+ element: toolbarMenuItem,
1812
+ errorMessage: this.buttonNotDisplayedError(name),
1813
+ driver: this.driver
1814
+ });
1815
+ await click(toolbarMenuItem, this.driver);
1816
+ }
1817
+ async clickButton(name) {
1818
+ await this.openDropdownMenu();
1819
+ if (!isString(name) && !isArray(name))
1820
+ throw new Error(`"name" must be a string or array of string`);
1821
+ let lName = isString(name) ? [name] : name;
1822
+ for (let n of lName) {
1823
+ await this.goToButton(n, this.getCssSelectorToButton(n));
1824
+ }
1825
+ }
1826
+ async clickButtonByTitle(title) {
1827
+ await this.openDropdownMenu();
1828
+ if (!isString(title) && !isArray(title))
1829
+ throw new Error(`"title" must be a string or array of string`);
1830
+ let lTitle = isString(title) ? [title] : title;
1831
+ for (let t of lTitle) {
1832
+ await this.goToButton(t, import_selenium_webdriver22.By.xpath(buttonByTextXpath(t)));
1833
+ }
1834
+ }
1835
+ };
1335
1836
  }
1336
- };
1837
+ });
1337
1838
 
1338
- // src/pageObjects/elements/Table/elements/Column.ts
1339
- var import_selenium_webdriver21 = require("selenium-webdriver");
1340
- var Column = class extends AbstractElementWithParent {
1341
- _index;
1342
- _caption;
1343
- _name;
1344
- headerCssSelector;
1345
- constructor({ parentCssSelector, headerCssSelector, name, caption, index, driver }) {
1346
- super(parentCssSelector, "", driver);
1347
- this._name = name;
1348
- this.index = index;
1349
- this._caption = caption;
1350
- this.headerCssSelector = headerCssSelector;
1351
- }
1352
- set index(index) {
1353
- this._index = index;
1354
- this.elementCssSelector = getColumnByIndexCssSelector(index);
1355
- }
1356
- get index() {
1357
- return this._index;
1358
- }
1359
- async getElement() {
1360
- await this.getIndex();
1361
- return super.getElement();
1362
- }
1363
- async getColumnHeaderIndexBy(cssSelector) {
1364
- const column = await this.driver.findElement(
1365
- import_selenium_webdriver21.By.css(`${this.parentCssSelector} ${this.headerCssSelector} ${cssSelector}`)
1366
- );
1367
- return transformOutputIndex(await column.getAttribute("aria-colindex"));
1368
- }
1369
- async getIndexByCaption() {
1370
- return this.getColumnHeaderIndexBy(getColumnByCaptionCssSelector(this._caption));
1371
- }
1372
- async getIndexByName() {
1373
- return this.getColumnHeaderIndexBy(getColumnByNameCssSelector(this._name));
1374
- }
1375
- async caption() {
1376
- const el = await this.getElement();
1377
- return el.getText();
1378
- }
1379
- async getIndex() {
1380
- if (this.index != null) {
1381
- return this.index;
1382
- }
1383
- if (this._caption != null) {
1384
- this.index = await this.getIndexByCaption();
1385
- return this.index;
1386
- }
1387
- if (this._name != null) {
1388
- this.index = await this.getIndexByName();
1389
- return this.index;
1390
- }
1391
- throw new Error("Cant get the index in the column");
1839
+ // src/pageObjects/elements/TableToolbar/ToolbarItem.ts
1840
+ var GROUP_BUTTON_CLASS, toolbarItemSelector, ToolbarItem;
1841
+ var init_ToolbarItem = __esm({
1842
+ "src/pageObjects/elements/TableToolbar/ToolbarItem.ts"() {
1843
+ "use strict";
1844
+ init_AbstractElementWithParent();
1845
+ init_ToolbarGroupButton();
1846
+ init_ToolbarButton();
1847
+ init_locators();
1848
+ init_ToolbarMenu();
1849
+ GROUP_BUTTON_CLASS = "toolbar-group-button";
1850
+ toolbarItemSelector = (form, name) => byTestIdCssSelector(`ftb-${form}-${name}`);
1851
+ ToolbarItem = class extends AbstractElementWithParent {
1852
+ _button;
1853
+ _formName;
1854
+ _itemName;
1855
+ constructor(parentCssSelector, formName, itemName, driver) {
1856
+ super(parentCssSelector, toolbarItemSelector(formName, itemName), driver);
1857
+ this._itemName = itemName;
1858
+ this._formName = formName;
1859
+ }
1860
+ async init() {
1861
+ if (this._button)
1862
+ return this._button;
1863
+ const classNames = await this.getClasses();
1864
+ if (classNames.includes(GROUP_BUTTON_CLASS)) {
1865
+ this._button = new ToolbarGroupButton(this.getFullCssSelector(), this._itemName, this.driver);
1866
+ return;
1867
+ }
1868
+ this._button = new ToolbarButton(this.parentCssSelector, this._itemName, this.driver);
1869
+ }
1870
+ async click() {
1871
+ await this.init();
1872
+ await this._button.click();
1873
+ }
1874
+ async isDisabled() {
1875
+ await this.init();
1876
+ return await this._button.isDisabled();
1877
+ }
1878
+ get menu() {
1879
+ return new ToolbarMenu(this.parentCssSelector, this._formName, this._itemName, this.driver);
1880
+ }
1881
+ };
1392
1882
  }
1393
- };
1883
+ });
1394
1884
 
1395
- // src/pageObjects/elements/Table/Table.ts
1396
- var Table = class extends AbstractElementWithParent {
1397
- formName;
1398
- headerCssSelector;
1399
- constructor(parentCssSelector, headerCssSelector, formName, driver) {
1400
- super(parentCssSelector, `#${createTableId(formName)}`, driver);
1401
- this.formName = formName;
1402
- this.headerCssSelector = headerCssSelector;
1403
- }
1404
- getColumnBy = (args) => {
1405
- if (args.title) {
1406
- return this.getColumnByTitle(args.title);
1407
- }
1408
- return this.getColumnByName(args.name);
1409
- };
1410
- getRowByIndex(index) {
1411
- return new Row(this.getFullCssSelector(), index, this.driver, this.getColumnBy);
1412
- }
1413
- getColumnByIndex(index) {
1414
- return new Column({
1415
- parentCssSelector: this.getFullCssSelector(),
1416
- driver: this.driver,
1417
- index
1418
- });
1885
+ // src/pageObjects/elements/TableToolbar/FormToolbar.ts
1886
+ var TABLE_TOOLBAR_CLASS, FormToolbar;
1887
+ var init_FormToolbar = __esm({
1888
+ "src/pageObjects/elements/TableToolbar/FormToolbar.ts"() {
1889
+ "use strict";
1890
+ init_AbstractElementWithParent();
1891
+ init_ToolbarItem();
1892
+ TABLE_TOOLBAR_CLASS = "d5-table-toolbar";
1893
+ FormToolbar = class extends AbstractElementWithParent {
1894
+ formName;
1895
+ constructor(parentCssSelector, formName, driver) {
1896
+ super(parentCssSelector, `#${TABLE_TOOLBAR_CLASS}-${formName}`, driver);
1897
+ this.formName = formName;
1898
+ }
1899
+ button(name) {
1900
+ return new ToolbarItem(this.getFullCssSelector(), this.formName, name, this.driver);
1901
+ }
1902
+ };
1419
1903
  }
1420
- getColumnByTitle = (title) => {
1421
- return new Column({
1422
- parentCssSelector: this.getFullCssSelector(),
1423
- headerCssSelector: this.headerCssSelector,
1424
- caption: title,
1425
- driver: this.driver
1426
- });
1427
- };
1428
- getColumnByName = (name) => {
1429
- return new Column({
1430
- parentCssSelector: this.getFullCssSelector(),
1431
- headerCssSelector: this.headerCssSelector,
1432
- name,
1433
- driver: this.driver
1434
- });
1435
- };
1436
- selectRowByIndex(index) {
1437
- return this.getRowByIndex(index).select();
1438
- }
1439
- async getRows() {
1440
- const rows = await this.driver.findElements(import_selenium_webdriver22.By.css(`${this.getFullCssSelector()} .dx-row.dx-data-row`));
1441
- const result = [];
1442
- rows.forEach((_, index) => {
1443
- const newRow = new Row(this.getFullCssSelector(), index, this.driver, this.getColumnBy);
1444
- result.push(newRow);
1445
- });
1446
- return result;
1447
- }
1448
- async getColumns() {
1449
- const columns = await this.driver.findElements(
1450
- import_selenium_webdriver22.By.css(`${this.getFullCssSelector()} ${this.headerCssSelector} td[role="columnheader"]`)
1451
- );
1452
- const result = [];
1453
- columns.forEach((_, index) => {
1454
- const newCol = new Column({
1455
- parentCssSelector: this.getFullCssSelector(),
1456
- index,
1457
- driver: this.driver
1458
- });
1459
- result.push(newCol);
1460
- });
1461
- return result;
1904
+ });
1905
+
1906
+ // src/pageObjects/elements/Filters/FormFilterField.ts
1907
+ var FormFilterField;
1908
+ var init_FormFilterField = __esm({
1909
+ "src/pageObjects/elements/Filters/FormFilterField.ts"() {
1910
+ "use strict";
1911
+ init_locators();
1912
+ init_createDataTestId();
1913
+ init_AbstractEditor2();
1914
+ FormFilterField = class extends AbstractEditor {
1915
+ constructor(parentCssSelector, formName, name, driver) {
1916
+ super(parentCssSelector, byTestIdCssSelector(createLayoutFilterTestId(formName, name)), driver);
1917
+ }
1918
+ /**
1919
+ * Возвращает значение в поле
1920
+ * @example
1921
+ * expect(await form.formFilter('NumberFld').getValue()).toBe(10);
1922
+ * expect(await form.formFilter('TextFld').getValue()).toBe('TestValue');
1923
+ */
1924
+ async getValue() {
1925
+ return super.getValue();
1926
+ }
1927
+ /**
1928
+ * Устанавливает значение в поле
1929
+ * @example
1930
+ * await form.formFilter('NumberFld').setValue(123);
1931
+ * await form.formFilter('TextFld').setValue('TestValue');
1932
+ */
1933
+ async setValue(value) {
1934
+ return super.setValue(value);
1935
+ }
1936
+ /**
1937
+ * Очищает значение в поле
1938
+ * @example
1939
+ * await form.formFilter('NumberFld').clear();
1940
+ */
1941
+ async clear() {
1942
+ return super.clear();
1943
+ }
1944
+ /**
1945
+ * Удаляет тег по переданному тексту
1946
+ * @example
1947
+ * await form.formFilter('TagBox').remove('test');
1948
+ */
1949
+ async remove(itemText) {
1950
+ return super.remove(itemText);
1951
+ }
1952
+ };
1462
1953
  }
1463
- element() {
1464
- return this.getElement();
1954
+ });
1955
+
1956
+ // src/pageObjects/elements/Filters/PanelFilterField.ts
1957
+ var PanelFilterField;
1958
+ var init_PanelFilterField = __esm({
1959
+ "src/pageObjects/elements/Filters/PanelFilterField.ts"() {
1960
+ "use strict";
1961
+ init_locators();
1962
+ init_createDataTestId();
1963
+ init_AbstractEditor2();
1964
+ PanelFilterField = class extends AbstractEditor {
1965
+ constructor(parentCssSelector, formName, name, driver) {
1966
+ super(parentCssSelector, byTestIdCssSelector(createDocFilterTestId(formName, name)), driver);
1967
+ }
1968
+ /**
1969
+ * Возвращает значение в поле
1970
+ * @example
1971
+ * expect(await form.filterPanel.filterField('NumberFld').getValue()).toBe(10);
1972
+ * expect(await form.filterPanel.filterField('TextFld').getValue()).toBe('TestValue');
1973
+ */
1974
+ async getValue() {
1975
+ return super.getValue();
1976
+ }
1977
+ /**
1978
+ * Устанавливает значение в поле
1979
+ * @example
1980
+ * await form.filterPanel.filterField('NumberFld').setValue(123);
1981
+ * await form.filterPanel.filterField('TextFld').setValue('TestValue');
1982
+ */
1983
+ async setValue(value) {
1984
+ return super.setValue(value);
1985
+ }
1986
+ /**
1987
+ * Очищает значение в поле
1988
+ * @example
1989
+ * await form.filterPanel.filterField('NumberFld').clear();
1990
+ */
1991
+ async clear() {
1992
+ return super.clear();
1993
+ }
1994
+ /**
1995
+ * Удаляет тег по переданному тексту
1996
+ * @example
1997
+ * await form.filterPanel.filterField('TagBox').remove('test');
1998
+ */
1999
+ async remove(itemText) {
2000
+ return super.remove(itemText);
2001
+ }
2002
+ };
1465
2003
  }
1466
- /**
1467
- * Находит поле когда форма находится в состоянии редактирования
1468
- * @example
1469
- * const form = new MyForm();
1470
- * //...
1471
- * expect(await form.field('Name').getValue()).toBe('test value');
1472
- */
1473
- field(name) {
1474
- return new FormField(this.getFullCssSelector(), this.formName, name, this.driver);
2004
+ });
2005
+
2006
+ // src/pageObjects/elements/Filters/FilterPanel.ts
2007
+ var import_selenium_webdriver23, drawerSelector, FILTER_PANEL_SELECTOR, CLOSE_SELECTOR, FilterPanel;
2008
+ var init_FilterPanel = __esm({
2009
+ "src/pageObjects/elements/Filters/FilterPanel.ts"() {
2010
+ "use strict";
2011
+ import_selenium_webdriver23 = require("selenium-webdriver");
2012
+ init_AbstractElement();
2013
+ init_PanelFilterField();
2014
+ init_actions();
2015
+ drawerSelector = (formName) => `.secondary-drawer-side-panel.form-${formName}`;
2016
+ FILTER_PANEL_SELECTOR = ".filter-panel";
2017
+ CLOSE_SELECTOR = ".button-close";
2018
+ FilterPanel = class extends AbstractElement {
2019
+ _formName;
2020
+ get filterPanelSelector() {
2021
+ return `${this.elementCssSelector} ${FILTER_PANEL_SELECTOR}`;
2022
+ }
2023
+ async filterPanelButtons() {
2024
+ const selector = `${this.elementCssSelector} ${FILTER_PANEL_SELECTOR} .filter-panel__buttons-panel .dx-button-text`;
2025
+ const el = await this.getElement();
2026
+ return el.findElements(import_selenium_webdriver23.By.css(selector));
2027
+ }
2028
+ constructor(formName, driver) {
2029
+ super(driver, drawerSelector(formName));
2030
+ this._formName = formName;
2031
+ }
2032
+ /**
2033
+ * Возвращает фильтр на панели фильтрации
2034
+ * @returns {PanelFilterField}
2035
+ * @example
2036
+ * await form.filterPanel.filterField('NumberFld');
2037
+ */
2038
+ filterField(name) {
2039
+ return new PanelFilterField(this.filterPanelSelector, this._formName, name, this.driver);
2040
+ }
2041
+ async apply() {
2042
+ const btn = await this.findButtonByTitle("\u0417\u0430\u0441\u0442\u043E\u0441\u0443\u0432\u0430\u0442\u0438");
2043
+ await click(btn, this.driver);
2044
+ }
2045
+ async findButtonByTitle(title) {
2046
+ const buttons = await this.filterPanelButtons();
2047
+ for (const btn of buttons) {
2048
+ if (await btn.getText() === title) {
2049
+ return btn;
2050
+ }
2051
+ }
2052
+ }
2053
+ async clearAll() {
2054
+ const btn = await this.findButtonByTitle("\u041E\u0447\u0438\u0441\u0442\u0438\u0442\u0438");
2055
+ await click(btn, this.driver);
2056
+ await this.driver.sleep(300);
2057
+ }
2058
+ async close() {
2059
+ const btn = await this.driver.findElement(import_selenium_webdriver23.By.css(`${this.elementCssSelector} ${CLOSE_SELECTOR}`));
2060
+ await click(btn, this.driver);
2061
+ }
2062
+ };
1475
2063
  }
1476
- };
2064
+ });
1477
2065
 
1478
- // src/pageObjects/elements/TableToolbar/ToolbarGroupButton.ts
1479
- var ToolbarGroupButton = class extends AbstractButton {
1480
- name;
1481
- constructor(parentCssSelector, name, driver) {
1482
- super(parentCssSelector, ``, driver);
1483
- this.name = name;
2066
+ // src/pageObjects/elements/Forms/ListForm.ts
2067
+ var ListForm_exports = {};
2068
+ __export(ListForm_exports, {
2069
+ default: () => ListForm
2070
+ });
2071
+ var DATAGRID_HEADER_CSS_SELECTOR, ListForm;
2072
+ var init_ListForm = __esm({
2073
+ "src/pageObjects/elements/Forms/ListForm.ts"() {
2074
+ "use strict";
2075
+ init_Form();
2076
+ init_Table();
2077
+ init_FormToolbar();
2078
+ init_FormFilterField();
2079
+ init_FilterPanel();
2080
+ DATAGRID_HEADER_CSS_SELECTOR = ".dx-datagrid-headers .dx-datagrid-content:not(.dx-datagrid-content-fixed)";
2081
+ ListForm = class extends Form {
2082
+ headerCssSelector;
2083
+ constructor(driver) {
2084
+ super(driver);
2085
+ this.popupContainerCssSelector = `.popup .form-inline-${this.formName}`;
2086
+ this.headerCssSelector = DATAGRID_HEADER_CSS_SELECTOR;
2087
+ }
2088
+ /**
2089
+ * Находит таблицу
2090
+ * @example
2091
+ * const listForm = new MyForm();
2092
+ * //...
2093
+ * expect(listForm.table());
2094
+ */
2095
+ table() {
2096
+ return new Table(this.containerCssSelector, this.headerCssSelector, this.formName, this.driver);
2097
+ }
2098
+ /**
2099
+ * Находит таблицу
2100
+ * @example
2101
+ * const listForm = new MyForm();
2102
+ * //...
2103
+ * expect(listForm.toolbarButton());
2104
+ */
2105
+ toolbarButton(name) {
2106
+ const toolbar = new FormToolbar(this.containerCssSelector, this.formName, this.driver);
2107
+ return toolbar.button(name);
2108
+ }
2109
+ /**
2110
+ * Фильтр который расположен на форме
2111
+ * @example
2112
+ * const listForm = new MyForm();
2113
+ * //...
2114
+ * expect(listForm.formFilter());
2115
+ */
2116
+ formFilter(name) {
2117
+ return new FormFilterField(this.containerCssSelector, this.formName, name, this.driver);
2118
+ }
2119
+ /**
2120
+ * Модель панели фильтрации
2121
+ * @returns {FilterPanel}
2122
+ * @example
2123
+ * const listForm = new MyForm();
2124
+ * //...
2125
+ * expect(listForm.filterPanel());
2126
+ */
2127
+ get filterPanel() {
2128
+ return new FilterPanel(this.formName, this.driver);
2129
+ }
2130
+ };
1484
2131
  }
1485
- buttonNotDisplayedError() {
1486
- return `Button ${this.name} cannot be clicked. It is not displayed or it is disabled`;
2132
+ });
2133
+
2134
+ // src/pageObjects/elements/Forms/TreeView.ts
2135
+ var TreeView_exports = {};
2136
+ __export(TreeView_exports, {
2137
+ default: () => TreeView
2138
+ });
2139
+ var TREELIST_HEADER_CSS_SELECTOR, TreeView;
2140
+ var init_TreeView = __esm({
2141
+ "src/pageObjects/elements/Forms/TreeView.ts"() {
2142
+ "use strict";
2143
+ init_ListForm();
2144
+ TREELIST_HEADER_CSS_SELECTOR = ".dx-treelist-headers .dx-treelist-content:not(.dx-datagrid-content-fixed)";
2145
+ TreeView = class extends ListForm {
2146
+ constructor(driver) {
2147
+ super(driver);
2148
+ this.popupContainerCssSelector = `.popup .wrapper-tree-view-${this.formName}`;
2149
+ this.headerCssSelector = TREELIST_HEADER_CSS_SELECTOR;
2150
+ }
2151
+ };
1487
2152
  }
1488
- };
2153
+ });
1489
2154
 
1490
- // src/pageObjects/elements/TableToolbar/ToolbarButton.ts
1491
- var TOOLBAR_BUTTON_CLASS = "toolbar-button";
1492
- var ToolbarButton = class extends AbstractButton {
1493
- name;
1494
- constructor(parentCssSelector, name, driver) {
1495
- super(parentCssSelector, `#${TOOLBAR_BUTTON_CLASS}-${name}`, driver);
1496
- this.name = name;
2155
+ // src/pageObjects/elements/Forms/createSubFormInstance.ts
2156
+ function subformCssSelector(parentCssSelector, testId) {
2157
+ return `${parentCssSelector} ${byTestIdCssSelector(testId)}`;
2158
+ }
2159
+ async function classDependencyInjector(formType) {
2160
+ let SubFormFactoryClass;
2161
+ switch (formType) {
2162
+ case "1" /* LIST */:
2163
+ SubFormFactoryClass = (await Promise.resolve().then(() => (init_ListForm(), ListForm_exports))).default;
2164
+ break;
2165
+ case "3" /* TREE */:
2166
+ SubFormFactoryClass = (await Promise.resolve().then(() => (init_TreeView(), TreeView_exports))).default;
2167
+ break;
2168
+ case "2" /* EDIT */:
2169
+ case "99" /* FREE_FORM */:
2170
+ case "4" /* REPORT */:
2171
+ SubFormFactoryClass = (await Promise.resolve().then(() => (init_FormEdit(), FormEdit_exports))).default;
2172
+ break;
2173
+ default:
2174
+ throw new Error(`Unsupported form type ${formType}`);
2175
+ }
2176
+ return SubFormFactoryClass;
2177
+ }
2178
+ var subFormTestId;
2179
+ var init_createSubFormInstance = __esm({
2180
+ "src/pageObjects/elements/Forms/createSubFormInstance.ts"() {
2181
+ "use strict";
2182
+ init_locators();
2183
+ init_types();
2184
+ subFormTestId = (name) => `subform-${name}`;
1497
2185
  }
1498
- buttonNotDisplayedError() {
1499
- return `Button ${this.name} cannot be clicked. It is not displayed or it is disabled`;
2186
+ });
2187
+
2188
+ // src/pageObjects/elements/Forms/Form.ts
2189
+ var import_selenium_webdriver24, formTestId, Form;
2190
+ var init_Form = __esm({
2191
+ "src/pageObjects/elements/Forms/Form.ts"() {
2192
+ "use strict";
2193
+ init_locators();
2194
+ import_selenium_webdriver24 = require("selenium-webdriver");
2195
+ init_AbstractForm();
2196
+ init_waitElementIsVisible();
2197
+ init_createSubFormInstance();
2198
+ formTestId = (formName) => `form-content-wrapper-${formName}`;
2199
+ Form = class extends AbstractForm {
2200
+ popupContainerCssSelector;
2201
+ constructor(driver) {
2202
+ super(driver);
2203
+ this.setSubFormMode();
2204
+ }
2205
+ async isModal() {
2206
+ const el = await this.getContainerElement();
2207
+ const value = await el.getAttribute("data-ismodal");
2208
+ return value === "true";
2209
+ }
2210
+ /**
2211
+ * Получение заголовка на формы
2212
+ * @example
2213
+ * const listForm = new MyForm();
2214
+ * //...
2215
+ * expect(await listForm.getTitleText()).toBe('MyFormTitle');
2216
+ */
2217
+ async getTitleText() {
2218
+ if (await this.isModal()) {
2219
+ const titleEl2 = await this.driver.findElement(import_selenium_webdriver24.By.css(`${this.popupContainerCssSelector} .popup-title`));
2220
+ return titleEl2.getText();
2221
+ }
2222
+ let titleEl = await this.driver.findElement(import_selenium_webdriver24.By.className("main-toolbar-form-title"));
2223
+ return titleEl.getText();
2224
+ }
2225
+ setSubFormMode() {
2226
+ const testId = formTestId(this.formName);
2227
+ this.containerBy = byTestId(testId);
2228
+ this.containerCssSelector = byTestIdCssSelector(testId);
2229
+ }
2230
+ /**
2231
+ * Возвращает сабформу
2232
+ * @returns {Promise<ListForm | TreeView | FormEdit>}
2233
+ * @example
2234
+ * const form = new MyForm();
2235
+ * //...
2236
+ * expect(await form.subForm(name));
2237
+ */
2238
+ async subForm(name) {
2239
+ const cssSelector = subformCssSelector(this.containerCssSelector, subFormTestId(name));
2240
+ const byCssSelector = import_selenium_webdriver24.By.css(cssSelector);
2241
+ const subFormEl = await this.driver.findElement(byCssSelector);
2242
+ await waitElementIsVisible({
2243
+ element: subFormEl,
2244
+ driver: this.driver,
2245
+ errorMessage: `Subform "${name}" is not visible`
2246
+ });
2247
+ const formType = await subFormEl.getAttribute("data-formtype");
2248
+ const formName = await subFormEl.getAttribute("data-formname");
2249
+ let SubFormFactoryClass = await classDependencyInjector(formType);
2250
+ const SubForm = class extends SubFormFactoryClass {
2251
+ setSubFormMode() {
2252
+ this.containerCssSelector = cssSelector;
2253
+ this.containerBy = byCssSelector;
2254
+ }
2255
+ get formName() {
2256
+ return formName;
2257
+ }
2258
+ };
2259
+ return new SubForm(this.driver);
2260
+ }
2261
+ };
1500
2262
  }
1501
- };
2263
+ });
1502
2264
 
1503
- // src/pageObjects/elements/TableToolbar/ToolbarMenu.ts
1504
- var import_selenium_webdriver23 = require("selenium-webdriver");
2265
+ // src/pageObjects/elements/Forms/FormEdit.ts
2266
+ var FormEdit_exports = {};
2267
+ __export(FormEdit_exports, {
2268
+ default: () => FormEdit
2269
+ });
2270
+ var import_selenium_webdriver25, FormEdit;
2271
+ var init_FormEdit = __esm({
2272
+ "src/pageObjects/elements/Forms/FormEdit.ts"() {
2273
+ "use strict";
2274
+ init_Form();
2275
+ import_selenium_webdriver25 = require("selenium-webdriver");
2276
+ init_FormField();
2277
+ init_actions();
2278
+ init_wait();
2279
+ FormEdit = class extends Form {
2280
+ saveButtonBy = import_selenium_webdriver25.By.id("button-save");
2281
+ closeButtonBy = import_selenium_webdriver25.By.id("button-cancel");
2282
+ constructor(driver) {
2283
+ super(driver);
2284
+ this.popupContainerCssSelector = `.popup .form-edit-${this.formName}`;
2285
+ }
2286
+ /**
2287
+ * Находит поле формы редактирования по имени
2288
+ * @example
2289
+ * const formEdit = new MyForm();
2290
+ * //...
2291
+ * expect(await formEdit.field('Name').getValue()).toBe('test value');
2292
+ */
2293
+ field(name) {
2294
+ return new FormField(this.containerCssSelector, this.formName, name, this.driver);
2295
+ }
2296
+ /**
2297
+ * Проверяет не отключена ли кнопка Сохранить
2298
+ * @example
2299
+ * const formEdit = new MyForm();
2300
+ * //...
2301
+ * await formEdit.isSaveButtonDisabled();
2302
+ */
2303
+ async isSaveButtonDisabled() {
2304
+ const saveButton = await this.driver.findElement(this.saveButtonBy);
2305
+ const result = await saveButton.getAttribute("aria-disabled");
2306
+ return result === "true";
2307
+ }
2308
+ /**
2309
+ * Нажатие на кнопку Сохранить
2310
+ * @example
2311
+ * const formEdit = new MyForm();
2312
+ * //...
2313
+ * await formEdit.saveButtonClick();
2314
+ */
2315
+ async saveButtonClick() {
2316
+ const saveButton = await this.driver.findElement(this.saveButtonBy);
2317
+ await wait(async () => !await this.isSaveButtonDisabled(), this.driver, "Button is disabled");
2318
+ await click(saveButton, this.driver);
2319
+ }
2320
+ /**
2321
+ * Нажатие на кнопку Закрить
2322
+ * @example
2323
+ * const formEdit = new MyForm();
2324
+ * //...
2325
+ * await formEdit.closeButtonClick();
2326
+ */
2327
+ async closeButtonClick() {
2328
+ const closeButton = await this.driver.findElement(this.closeButtonBy);
2329
+ await click(closeButton, this.driver);
2330
+ }
2331
+ };
2332
+ }
2333
+ });
1505
2334
 
1506
- // src/utils/typesUtil.ts
1507
- var types = {
1508
- "[object Array]": "array",
1509
- "[object Date]": "date",
1510
- "[object Object]": "object",
1511
- "[object String]": "string",
1512
- "[object Null]": "null"
1513
- };
1514
- var type = function(object) {
1515
- const typeOfObject = Object.prototype.toString.call(object);
1516
- return typeof object === "object" ? types[typeOfObject] || "object" : typeof object;
1517
- };
1518
- var isArray = function(value) {
1519
- return type(value) === "array";
1520
- };
1521
- var isString = function(object) {
1522
- return typeof object === "string";
1523
- };
2335
+ // src/index.ts
2336
+ var src_exports = {};
2337
+ __export(src_exports, {
2338
+ AbstractPage: () => AbstractPage,
2339
+ ControlClass: () => ControlClass,
2340
+ Dialog: () => Dialog,
2341
+ FilterPanel: () => FilterPanel,
2342
+ FormEdit: () => FormEdit,
2343
+ FormField: () => FormField,
2344
+ FormFilterField: () => FormFilterField,
2345
+ ListForm: () => ListForm,
2346
+ LoginPage: () => LoginPage,
2347
+ NumberEditor: () => NumberEditor,
2348
+ PanelFilterField: () => PanelFilterField,
2349
+ SubsystemsPanel: () => SubsystemsPanel,
2350
+ TextEditor: () => TextEditor,
2351
+ TreeView: () => TreeView,
2352
+ byTestId: () => byTestId,
2353
+ byTestIdCssSelector: () => byTestIdCssSelector,
2354
+ click: () => click,
2355
+ config: () => config,
2356
+ createDriver: () => createDriver,
2357
+ editorFactory: () => editorFactory,
2358
+ elementIsNotPresent: () => elementIsNotPresent,
2359
+ readonlyLocator: () => readonlyLocator,
2360
+ signIn: () => signIn,
2361
+ wait: () => wait,
2362
+ waitElementIsVisible: () => waitElementIsVisible
2363
+ });
2364
+ module.exports = __toCommonJS(src_exports);
2365
+ init_config();
1524
2366
 
1525
- // src/pageObjects/elements/TableToolbar/ToolbarMenu.ts
1526
- var SPINDOWN_CLASS = ".dx-icon-spindown";
1527
- var buttonGroupItemSelector = (formName, name) => byTestIdCssSelector(`ftb-${formName}-${name}`);
1528
- var getFullCssSelector = (formName, name) => `${buttonGroupItemSelector(formName, name)} ${SPINDOWN_CLASS}`;
1529
- var buttonByTextXpath = (text) => `.//span[contains(@class, "dx-menu-item-text") and contains(text(), "${text}")]`;
1530
- var ToolbarMenu = class extends AbstractElementWithParent {
1531
- _formName;
1532
- constructor(parentCssSelector, formName, name, driver) {
1533
- super(parentCssSelector, getFullCssSelector(formName, name), driver);
1534
- this._formName = formName;
1535
- }
1536
- async toggle() {
1537
- const dropdown = await this.getElement();
1538
- await click(dropdown, this.driver);
1539
- }
1540
- getCssSelectorToButton(name) {
1541
- return byTestId(`ftb-${this._formName}-${name}`);
1542
- }
1543
- buttonNotDisplayedError(name) {
1544
- return `Toolbar menu button ${name} cannot be clicked. It is not displayed or it is disabled`;
1545
- }
1546
- async goToButton(name, selector) {
1547
- const toolbarMenuItem = this.driver.findElement(selector);
1548
- await waitElementIsClickable({
1549
- element: toolbarMenuItem,
1550
- errorMessage: this.buttonNotDisplayedError(name),
2367
+ // src/pageObjects/pages/LoginPage.ts
2368
+ init_AbstractPage();
2369
+ init_config();
2370
+ init_waitElementIsVisible();
2371
+ init_actions();
2372
+ init_locators();
2373
+ var LOGIN_PATH = "/login";
2374
+ var LoginPage = class extends AbstractPage {
2375
+ usernameField = byTestId("loginField", "input");
2376
+ passwordField = byTestId("passwordField", "input");
2377
+ loginButton = byTestId("loginButton");
2378
+ async locate() {
2379
+ await super.locate();
2380
+ const login = await this.driver.findElement(this.usernameField);
2381
+ await waitElementIsVisible({
2382
+ element: login,
1551
2383
  driver: this.driver
1552
2384
  });
1553
- await click(toolbarMenuItem, this.driver);
1554
2385
  }
1555
- async clickButton(name) {
1556
- await this.toggle();
1557
- if (isString(name)) {
1558
- const selector = this.getCssSelectorToButton(name);
1559
- await this.goToButton(name, selector);
1560
- }
1561
- if (isArray(name)) {
1562
- for (let n of name) {
1563
- const selector = this.getCssSelectorToButton(n);
1564
- await this.goToButton(n, selector);
1565
- }
1566
- }
2386
+ get path() {
2387
+ return LOGIN_PATH;
1567
2388
  }
1568
- async clickButtonByTitle(title) {
1569
- await this.toggle();
1570
- if (isString(title)) {
1571
- const selector = import_selenium_webdriver23.By.xpath(buttonByTextXpath(title));
1572
- await this.goToButton(title, selector);
1573
- }
1574
- if (isArray(title)) {
1575
- for (let t of title) {
1576
- const selector = import_selenium_webdriver23.By.xpath(buttonByTextXpath(t));
1577
- await this.goToButton(t, selector);
1578
- }
1579
- }
2389
+ async enterUsername(username) {
2390
+ await this.driver.findElement(this.usernameField).sendKeys(username);
1580
2391
  }
1581
- };
1582
-
1583
- // src/pageObjects/elements/TableToolbar/ToolbarItem.ts
1584
- var GROUP_BUTTON_CLASS = "toolbar-group-button";
1585
- var toolbarItemSelector = (form, name) => byTestIdCssSelector(`ftb-${form}-${name}`);
1586
- var ToolbarItem = class extends AbstractElementWithParent {
1587
- _button;
1588
- _formName;
1589
- _itemName;
1590
- constructor(parentCssSelector, formName, itemName, driver) {
1591
- super(parentCssSelector, toolbarItemSelector(formName, itemName), driver);
1592
- this._itemName = itemName;
1593
- this._formName = formName;
1594
- }
1595
- async init() {
1596
- if (this._button)
1597
- return this._button;
1598
- const classNames = await this.getClasses();
1599
- if (classNames.includes(GROUP_BUTTON_CLASS)) {
1600
- this._button = new ToolbarGroupButton(this.getFullCssSelector(), this._itemName, this.driver);
1601
- return;
1602
- }
1603
- this._button = new ToolbarButton(this.parentCssSelector, this._itemName, this.driver);
2392
+ async enterPassword(password) {
2393
+ await this.driver.findElement(this.passwordField).sendKeys(password);
1604
2394
  }
1605
- async click() {
1606
- await this.init();
1607
- await this._button.click();
2395
+ async clickLoginButton() {
2396
+ await click(await this.driver.findElement(this.loginButton), this.driver);
1608
2397
  }
1609
- async isDisabled() {
1610
- await this.init();
1611
- return await this._button.isDisabled();
2398
+ async loginWith(username, password) {
2399
+ await this.enterUsername(username);
2400
+ await this.enterPassword(password);
2401
+ await this.clickLoginButton();
1612
2402
  }
1613
- get menu() {
1614
- return new ToolbarMenu(this.parentCssSelector, this._formName, this._itemName, this.driver);
2403
+ async authorize() {
2404
+ await this.loginWith(config().auth.login, config().auth.password);
1615
2405
  }
1616
2406
  };
1617
2407
 
1618
- // src/pageObjects/elements/TableToolbar/FormToolbar.ts
1619
- var TABLE_TOOLBAR_CLASS = "d5-table-toolbar";
1620
- var FormToolbar = class extends AbstractElementWithParent {
1621
- formName;
1622
- constructor(parentCssSelector, formName, driver) {
1623
- super(parentCssSelector, `#${TABLE_TOOLBAR_CLASS}-${formName}`, driver);
1624
- this.formName = formName;
1625
- }
1626
- button(name) {
1627
- return new ToolbarItem(this.getFullCssSelector(), this.formName, name, this.driver);
1628
- }
2408
+ // src/index.ts
2409
+ init_locators();
2410
+
2411
+ // src/utils/createDriver.ts
2412
+ var import_selenium_webdriver4 = require("selenium-webdriver");
2413
+ init_config();
2414
+ var createDriver = async (browser) => {
2415
+ const driver = await new import_selenium_webdriver4.Builder().forBrowser(browser ?? config().browser).build();
2416
+ const manage = driver.manage();
2417
+ await manage.setTimeouts({ implicit: config().timeout });
2418
+ await manage.window().maximize();
2419
+ return driver;
1629
2420
  };
1630
2421
 
1631
- // src/pageObjects/elements/Filters/FormFilterField.ts
1632
- var FormFilterField = class extends AbstractEditor {
1633
- constructor(parentCssSelector, formName, name, driver) {
1634
- super(parentCssSelector, byTestIdCssSelector(createLayoutFilterTestId(formName, name)), driver);
1635
- }
1636
- /**
1637
- * Возвращает значение в поле
1638
- * @example
1639
- * expect(await form.formFilter('NumberFld').getValue()).toBe(10);
1640
- * expect(await form.formFilter('TextFld').getValue()).toBe('TestValue');
1641
- */
1642
- async getValue() {
1643
- return super.getValue();
1644
- }
1645
- /**
1646
- * Устанавливает значение в поле
1647
- * @example
1648
- * await form.formFilter('NumberFld').setValue(123);
1649
- * await form.formFilter('TextFld').setValue('TestValue');
1650
- */
1651
- async setValue(value) {
1652
- return super.setValue(value);
1653
- }
1654
- /**
1655
- * Очищает значение в поле
1656
- * @example
1657
- * await form.formFilter('NumberFld').clear();
1658
- */
1659
- async clear() {
1660
- return super.clear();
1661
- }
1662
- /**
1663
- * Удаляет тег по переданному тексту
1664
- * @example
1665
- * await form.formFilter('TagBox').remove('test');
1666
- */
1667
- async remove(itemText) {
1668
- return super.remove(itemText);
1669
- }
2422
+ // src/utils/elementIsNotPresent.ts
2423
+ var import_selenium_webdriver5 = require("selenium-webdriver");
2424
+ var elementIsNotPresent = function elementIsNotPresent2(locator) {
2425
+ return new import_selenium_webdriver5.Condition("for no element to be located " + locator, async function(driver) {
2426
+ const elements = await driver.findElements(locator);
2427
+ return elements.length == 0;
2428
+ });
1670
2429
  };
1671
2430
 
1672
- // src/pageObjects/elements/Filters/FilterPanel.ts
1673
- var import_selenium_webdriver24 = require("selenium-webdriver");
2431
+ // src/index.ts
2432
+ init_waitElementIsVisible();
2433
+ init_wait();
1674
2434
 
1675
- // src/pageObjects/elements/Filters/PanelFilterField.ts
1676
- var PanelFilterField = class extends AbstractEditor {
1677
- constructor(parentCssSelector, formName, name, driver) {
1678
- super(parentCssSelector, byTestIdCssSelector(createDocFilterTestId(formName, name)), driver);
1679
- }
1680
- /**
1681
- * Возвращает значение в поле
1682
- * @example
1683
- * expect(await form.filterPanel.filterField('NumberFld').getValue()).toBe(10);
1684
- * expect(await form.filterPanel.filterField('TextFld').getValue()).toBe('TestValue');
1685
- */
1686
- async getValue() {
1687
- return super.getValue();
1688
- }
1689
- /**
1690
- * Устанавливает значение в поле
1691
- * @example
1692
- * await form.filterPanel.filterField('NumberFld').setValue(123);
1693
- * await form.filterPanel.filterField('TextFld').setValue('TestValue');
1694
- */
1695
- async setValue(value) {
1696
- return super.setValue(value);
1697
- }
1698
- /**
1699
- * Очищает значение в поле
1700
- * @example
1701
- * await form.filterPanel.filterField('NumberFld').clear();
1702
- */
1703
- async clear() {
1704
- return super.clear();
1705
- }
1706
- /**
1707
- * Удаляет тег по переданному тексту
1708
- * @example
1709
- * await form.filterPanel.filterField('TagBox').remove('test');
1710
- */
1711
- async remove(itemText) {
1712
- return super.remove(itemText);
1713
- }
1714
- };
2435
+ // src/utils/signIn.ts
2436
+ init_config();
2437
+ async function signIn(driver) {
2438
+ const webDriver = driver ?? await createDriver();
2439
+ config().driver = webDriver;
2440
+ const loginPage = new LoginPage(webDriver);
2441
+ await loginPage.locate();
2442
+ await loginPage.authorize();
2443
+ return webDriver;
2444
+ }
1715
2445
 
1716
- // src/pageObjects/elements/Filters/FilterPanel.ts
1717
- var drawerSelector = (formName) => `.secondary-drawer-side-panel.form-${formName}`;
1718
- var FILTER_PANEL_SELECTOR = ".filter-panel";
1719
- var CLOSE_SELECTOR = ".button-close";
1720
- var FilterPanel = class extends AbstractElement {
1721
- _formName;
1722
- get filterPanelSelector() {
1723
- return `${this.elementCssSelector} ${FILTER_PANEL_SELECTOR}`;
1724
- }
1725
- async filterPanelButtons() {
1726
- const selector = `${this.elementCssSelector} ${FILTER_PANEL_SELECTOR} .filter-panel__buttons-panel .dx-button-text`;
1727
- const el = await this.getElement();
1728
- return el.findElements(import_selenium_webdriver24.By.css(selector));
1729
- }
1730
- constructor(formName, driver) {
1731
- super(driver, drawerSelector(formName));
1732
- this._formName = formName;
1733
- }
1734
- /**
1735
- * Возвращает фильтр на панели фильтрации
1736
- * @returns {PanelFilterField}
1737
- * @example
1738
- * await form.filterPanel.filterField('NumberFld');
1739
- */
1740
- filterField(name) {
1741
- return new PanelFilterField(this.filterPanelSelector, this._formName, name, this.driver);
1742
- }
1743
- async apply() {
1744
- const btn = await this.findButtonByTitle("\u0417\u0430\u0441\u0442\u043E\u0441\u0443\u0432\u0430\u0442\u0438");
1745
- await click(btn, this.driver);
1746
- }
1747
- async findButtonByTitle(title) {
1748
- const buttons = await this.filterPanelButtons();
1749
- for (const btn of buttons) {
1750
- if (await btn.getText() === title) {
1751
- return btn;
1752
- }
1753
- }
1754
- }
1755
- async clearAll() {
1756
- const btn = await this.findButtonByTitle("\u041E\u0447\u0438\u0441\u0442\u0438\u0442\u0438");
1757
- await click(btn, this.driver);
1758
- await this.driver.sleep(300);
1759
- }
1760
- async close() {
1761
- const btn = await this.driver.findElement(import_selenium_webdriver24.By.css(`${this.elementCssSelector} ${CLOSE_SELECTOR}`));
1762
- await click(btn, this.driver);
1763
- }
1764
- };
2446
+ // src/index.ts
2447
+ init_actions();
2448
+ init_AbstractPage();
1765
2449
 
1766
- // src/pageObjects/elements/Forms/ListForm.ts
1767
- var DATAGRID_HEADER_CSS_SELECTOR = ".dx-datagrid-headers .dx-datagrid-content:not(.dx-datagrid-content-fixed)";
1768
- var ListForm = class extends AbstractForm {
1769
- headerCssSelector;
1770
- constructor(driver) {
1771
- super(driver);
1772
- this.popupContainerCssSelector = `.popup .form-inline-${this.formName}`;
1773
- this.headerCssSelector = DATAGRID_HEADER_CSS_SELECTOR;
1774
- }
1775
- /**
1776
- * Находит таблицу
1777
- * @example
1778
- * const listForm = new MyForm();
1779
- * //...
1780
- * expect(listForm.table());
1781
- */
1782
- table() {
1783
- return new Table(this.containerCssSelector, this.headerCssSelector, this.formName, this.driver);
1784
- }
1785
- /**
1786
- * Находит группу на лист форме по имени
1787
- * @example
1788
- * const formEdit = new MyForm();
1789
- * //...
1790
- * expect(await formEdit.group('Name');
1791
- */
1792
- group(name) {
1793
- return new FormGroup(this.containerCssSelector, this.formName, name, this.driver);
1794
- }
1795
- /**
1796
- * Находит таблицу
1797
- * @example
1798
- * const listForm = new MyForm();
1799
- * //...
1800
- * expect(listForm.toolbarButton());
1801
- */
1802
- toolbarButton(name) {
1803
- const toolbar = new FormToolbar(this.containerCssSelector, this.formName, this.driver);
1804
- return toolbar.button(name);
1805
- }
1806
- /**
1807
- * Фильтр который расположен на форме
1808
- * @example
1809
- * const listForm = new MyForm();
1810
- * //...
1811
- * expect(listForm.formFilter());
1812
- */
1813
- formFilter(name) {
1814
- return new FormFilterField(this.containerCssSelector, this.formName, name, this.driver);
1815
- }
1816
- /**
1817
- * Модель панели фильтрации
1818
- * @returns {FilterPanel}
1819
- * @example
1820
- * const listForm = new MyForm();
1821
- * //...
1822
- * expect(listForm.filterPanel());
1823
- */
1824
- get filterPanel() {
1825
- return new FilterPanel(this.formName, this.driver);
2450
+ // src/pageObjects/elements/SubsystemsPanel/SubsystemsPanel.ts
2451
+ init_AbstractElement();
2452
+
2453
+ // src/pageObjects/elements/SubsystemsPanel/SubsystemsPanelHeader.ts
2454
+ init_AbstractElementWithParent();
2455
+ var import_selenium_webdriver6 = require("selenium-webdriver");
2456
+ var SubsystemsPanelHeader = class extends AbstractElementWithParent {
2457
+ async title() {
2458
+ return this.driver.findElement(import_selenium_webdriver6.By.css(this.getFullCssSelector()));
1826
2459
  }
1827
2460
  };
1828
2461
 
1829
- // src/pageObjects/elements/Forms/TreeView.ts
1830
- var TREELIST_HEADER_CSS_SELECTOR = ".dx-treelist-headers .dx-treelist-content:not(.dx-datagrid-content-fixed)";
1831
- var TreeView = class extends ListForm {
2462
+ // src/pageObjects/elements/SubsystemsPanel/SubsystemsPanel.ts
2463
+ init_wait();
2464
+ init_locators();
2465
+ var SubsystemsPanel = class extends AbstractElement {
2466
+ header;
1832
2467
  constructor(driver) {
1833
2468
  super(driver);
1834
- this.popupContainerCssSelector = `.popup .wrapper-tree-view-${this.formName}`;
1835
- this.headerCssSelector = TREELIST_HEADER_CSS_SELECTOR;
2469
+ this.header = new SubsystemsPanelHeader("#aside", byTestIdCssSelector("subsystems-panel-title", "span"), this.driver);
2470
+ }
2471
+ async headerTitle() {
2472
+ const title = await this.header.title();
2473
+ await wait(async () => await title.getText() != "", this.driver);
2474
+ return title.getText();
1836
2475
  }
1837
2476
  };
1838
2477
 
2478
+ // src/index.ts
2479
+ init_FormEdit();
2480
+ init_ListForm();
2481
+ init_TreeView();
2482
+ init_Editors();
2483
+ init_FormField();
2484
+ init_FormFilterField();
2485
+ init_PanelFilterField();
2486
+ init_FilterPanel();
2487
+
1839
2488
  // src/pageObjects/elements/Dialog.ts
1840
- var import_selenium_webdriver25 = require("selenium-webdriver");
2489
+ init_AbstractElement();
2490
+ var import_selenium_webdriver26 = require("selenium-webdriver");
2491
+ init_AbstractButton();
1841
2492
  var DIALOG_CLASS = ".d5-dialog";
1842
2493
  var DIALOG_TITLE_CLASS = ".dialog__title";
1843
2494
  var DIALOG_TEXT_CLASS = ".dialog__text";
@@ -1851,7 +2502,7 @@ var DialogButton = class extends AbstractButton {
1851
2502
  }
1852
2503
  async getElement() {
1853
2504
  const panel = await super.getElement();
1854
- return panel.findElement(import_selenium_webdriver25.By.xpath(buttonByTextXpath2(this.text)));
2505
+ return panel.findElement(import_selenium_webdriver26.By.xpath(buttonByTextXpath2(this.text)));
1855
2506
  }
1856
2507
  buttonNotDisplayedError() {
1857
2508
  return `Dialog button ${this.text} cannot be clicked. It is not displayed or it is disabled`;
@@ -1871,11 +2522,11 @@ var Dialog = class extends AbstractElement {
1871
2522
  return this.joinRelativeCssSelectors([DIALOG_CLASS, DIALOG_BUTTONS_PANEL_CLASS]);
1872
2523
  }
1873
2524
  async title() {
1874
- const el = await this.driver.findElement(import_selenium_webdriver25.By.css(this.titleSelector));
2525
+ const el = await this.driver.findElement(import_selenium_webdriver26.By.css(this.titleSelector));
1875
2526
  return await el.getText();
1876
2527
  }
1877
2528
  async text() {
1878
- const el = await this.driver.findElement(import_selenium_webdriver25.By.css(this.textSelector));
2529
+ const el = await this.driver.findElement(import_selenium_webdriver26.By.css(this.textSelector));
1879
2530
  return await el.getText();
1880
2531
  }
1881
2532
  button(text) {