d5-testing-library 1.8.0-alpha.1 → 1.8.0-alpha.3

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.
@@ -1510,10 +1510,12 @@ var init_Row = __esm({
1510
1510
  Row = class extends AbstractElementWithParent {
1511
1511
  index;
1512
1512
  getColumnBy;
1513
- constructor(parentCssSelector, index, driver, getColumnBy) {
1513
+ fixedTableContentCssSelector;
1514
+ constructor(parentCssSelector, fixedTableContentCssSelector, index, driver, getColumnBy) {
1514
1515
  super(parentCssSelector, getCssRowByIndexSelector(index), driver);
1515
1516
  this.index = index;
1516
1517
  this.getColumnBy = getColumnBy;
1518
+ this.fixedTableContentCssSelector = fixedTableContentCssSelector;
1517
1519
  }
1518
1520
  _getCell({ index, name, title }) {
1519
1521
  return new Cell(
@@ -1563,12 +1565,11 @@ var init_Row = __esm({
1563
1565
  return result;
1564
1566
  }
1565
1567
  async clickInlineButton(buttonClass) {
1566
- const FIXED_TABLE_CSS_SELECTOR = ".dx-fixed-columns .dx-datagrid-content.dx-datagrid-content-fixed";
1567
1568
  const buttonCssSelector = `.${DX_DATA_ROW_CLASS}[aria-rowindex="${transformInputIndex(
1568
1569
  this.index
1569
1570
  )}"] .${buttonClass}`;
1570
1571
  const button = await fixElementStaleError(
1571
- import_selenium_webdriver21.By.css(`${this.parentCssSelector} ${FIXED_TABLE_CSS_SELECTOR} ${buttonCssSelector}`),
1572
+ import_selenium_webdriver21.By.css(`${this.parentCssSelector} ${this.fixedTableContentCssSelector} ${buttonCssSelector}`),
1572
1573
  this.driver
1573
1574
  );
1574
1575
  return click(button, this.driver);
@@ -1767,10 +1768,12 @@ var init_Table = __esm({
1767
1768
  Table = class extends AbstractElementWithParent {
1768
1769
  formName;
1769
1770
  headerCssSelector;
1770
- constructor(parentCssSelector, headerCssSelector, formName, driver) {
1771
+ fixedTableContentCssSelector;
1772
+ constructor(parentCssSelector, headerCssSelector, fixedTableContentCssSelector, formName, driver) {
1771
1773
  super(parentCssSelector, `#${createTableId(formName)}`, driver);
1772
1774
  this.formName = formName;
1773
1775
  this.headerCssSelector = headerCssSelector;
1776
+ this.fixedTableContentCssSelector = fixedTableContentCssSelector;
1774
1777
  }
1775
1778
  getColumnBy = (args) => {
1776
1779
  if (args.title) {
@@ -1779,7 +1782,7 @@ var init_Table = __esm({
1779
1782
  return this.getColumnByName(args.name);
1780
1783
  };
1781
1784
  getRowByIndex(index) {
1782
- return new Row(this.getFullCssSelector(), index, this.driver, this.getColumnBy);
1785
+ return new Row(this.getFullCssSelector(), this.fixedTableContentCssSelector, index, this.driver, this.getColumnBy);
1783
1786
  }
1784
1787
  getColumnByIndex(index) {
1785
1788
  return new Column({
@@ -1811,7 +1814,13 @@ var init_Table = __esm({
1811
1814
  const rows = await this.driver.findElements(import_selenium_webdriver23.By.css(`${this.getFullCssSelector()} .dx-row.dx-data-row`));
1812
1815
  const result = [];
1813
1816
  rows.forEach((_, index) => {
1814
- const newRow = new Row(this.getFullCssSelector(), index, this.driver, this.getColumnBy);
1817
+ const newRow = new Row(
1818
+ this.getFullCssSelector(),
1819
+ this.fixedTableContentCssSelector,
1820
+ index,
1821
+ this.driver,
1822
+ this.getColumnBy
1823
+ );
1815
1824
  result.push(newRow);
1816
1825
  });
1817
1826
  return result;
@@ -2042,6 +2051,110 @@ var init_FormToolbar = __esm({
2042
2051
  }
2043
2052
  });
2044
2053
 
2054
+ // src/pageObjects/elements/Filters/FilterOperation.ts
2055
+ var import_selenium_webdriver25, FILTER_OPERATIONS, BUTTON_OPERATION_WIDGET, OPERATIONS_WIDGET_POPUP, getWidgetInPopupSelector, FilterOperation;
2056
+ var init_FilterOperation = __esm({
2057
+ "src/pageObjects/elements/Filters/FilterOperation.ts"() {
2058
+ "use strict";
2059
+ import_selenium_webdriver25 = require("selenium-webdriver");
2060
+ init_fixElementStaleError();
2061
+ init_AbstractElementWithParent();
2062
+ init_locators();
2063
+ init_actions();
2064
+ init_wait();
2065
+ init_waitElementIsClickable();
2066
+ init_waitElementIsVisible();
2067
+ FILTER_OPERATIONS = [
2068
+ "=",
2069
+ "<>",
2070
+ "<",
2071
+ ">",
2072
+ "<=",
2073
+ ">=",
2074
+ "contains",
2075
+ "between",
2076
+ "isanyof",
2077
+ "isnotanyof",
2078
+ "isblank",
2079
+ "isnotblank",
2080
+ "startwith",
2081
+ "bywords"
2082
+ ];
2083
+ BUTTON_OPERATION_WIDGET = "operation-widget";
2084
+ OPERATIONS_WIDGET_POPUP = "operation-type-widget-popup";
2085
+ getWidgetInPopupSelector = (operationName) => `.dx-list-item [data-operation="${operationName}"]`;
2086
+ FilterOperation = class extends AbstractElementWithParent {
2087
+ _testId;
2088
+ constructor({ parentCssSelector, filterTestID, driver }) {
2089
+ super(parentCssSelector, `${byTestIdCssSelector(`${BUTTON_OPERATION_WIDGET}-${filterTestID}`)}`, driver);
2090
+ this._testId = filterTestID;
2091
+ }
2092
+ async initOperationWidget() {
2093
+ const widgetButtonEl = await this.getElement();
2094
+ await waitElementIsClickable({
2095
+ element: widgetButtonEl,
2096
+ errorMessage: "Widget operation is not clickable",
2097
+ driver: this.driver
2098
+ });
2099
+ const clickableElement = await widgetButtonEl.findElement(import_selenium_webdriver25.By.className("dx-icon"));
2100
+ await click(clickableElement, this.driver);
2101
+ try {
2102
+ const widgetPopupEl = await this.driver.findElement(import_selenium_webdriver25.By.css(`${byTestIdCssSelector(`${OPERATIONS_WIDGET_POPUP}-${this._testId}`)}`));
2103
+ await waitElementIsVisible({
2104
+ element: widgetPopupEl,
2105
+ errorMessage: `Operation widget popup is not visible`,
2106
+ driver: this.driver
2107
+ });
2108
+ } catch (_) {
2109
+ throw `Operation widget popup is not visible`;
2110
+ }
2111
+ }
2112
+ async setOperation(operationName) {
2113
+ if (!FILTER_OPERATIONS.includes(operationName)) {
2114
+ throw new Error(`Operation with name "${operationName}" is not correct.`);
2115
+ }
2116
+ await this.initOperationWidget();
2117
+ const operationEl = await fixElementStaleError(import_selenium_webdriver25.By.css(`${byTestIdCssSelector(`${OPERATIONS_WIDGET_POPUP}-${this._testId}`)} ${getWidgetInPopupSelector(operationName)}`), this.driver);
2118
+ await click(operationEl, this.driver);
2119
+ await wait(
2120
+ async () => {
2121
+ const currOperationName = await this.getAttribute("data-operation");
2122
+ if (operationName === "isblank")
2123
+ return true;
2124
+ return currOperationName === operationName;
2125
+ },
2126
+ this.driver,
2127
+ "Operation is not changed"
2128
+ );
2129
+ }
2130
+ async getOperation() {
2131
+ const result = await this.getAttribute("data-operation");
2132
+ if (!result)
2133
+ throw new Error("Operation not found");
2134
+ return result;
2135
+ }
2136
+ async setIsBlank(value) {
2137
+ const currValue = await this.getIsBlank();
2138
+ if (currValue !== value) {
2139
+ await this.setOperation("isblank");
2140
+ await wait(
2141
+ async () => {
2142
+ const currIsBlank = await this.getIsBlank();
2143
+ return currIsBlank === value;
2144
+ },
2145
+ this.driver,
2146
+ "Operation is not changed"
2147
+ );
2148
+ }
2149
+ }
2150
+ async getIsBlank() {
2151
+ const result = await this.getAttribute("data-hasblank");
2152
+ return result === "true";
2153
+ }
2154
+ };
2155
+ }
2156
+ });
2157
+
2045
2158
  // src/pageObjects/elements/Filters/FormFilterField.ts
2046
2159
  var FormFilterField;
2047
2160
  var init_FormFilterField = __esm({
@@ -2050,9 +2163,14 @@ var init_FormFilterField = __esm({
2050
2163
  init_locators();
2051
2164
  init_createDataTestId();
2052
2165
  init_AbstractEditor2();
2166
+ init_FilterOperation();
2053
2167
  FormFilterField = class extends AbstractEditor {
2168
+ formName;
2169
+ name;
2054
2170
  constructor(parentCssSelector, formName, name, driver) {
2055
2171
  super(parentCssSelector, byTestIdCssSelector(createLayoutFilterTestId(formName, name)), driver);
2172
+ this.formName = formName;
2173
+ this.name = name;
2056
2174
  }
2057
2175
  /**
2058
2176
  * Возвращает значение в поле
@@ -2088,6 +2206,51 @@ var init_FormFilterField = __esm({
2088
2206
  async remove(itemText) {
2089
2207
  return super.remove(itemText);
2090
2208
  }
2209
+ /**
2210
+ * Инициализация операции фильтра
2211
+ */
2212
+ async initOperation() {
2213
+ return new FilterOperation({
2214
+ parentCssSelector: this.parentCssSelector,
2215
+ filterTestID: createLayoutFilterTestId(this.formName, this.name)
2216
+ });
2217
+ }
2218
+ /**
2219
+ * Устанавливает операцию для фильтра
2220
+ * @example
2221
+ * await form.formFilter('TagBox').setOperation("=");
2222
+ */
2223
+ async setOperation(operationName) {
2224
+ const filterOperation = await this.initOperation();
2225
+ await filterOperation.setOperation(operationName);
2226
+ }
2227
+ /**
2228
+ * Возвращает операцию фильтра
2229
+ * @example
2230
+ * expect(await form.formFilter('NumberFld').getOperation()).toBe("=");
2231
+ */
2232
+ async getOperation() {
2233
+ const filterOperation = await this.initOperation();
2234
+ return await filterOperation.getOperation();
2235
+ }
2236
+ /**
2237
+ * Устанавливает операцию 'isblank' для фильтра
2238
+ * @example
2239
+ * await form.formFilter('TagBox').setIsBlank(true);
2240
+ */
2241
+ async setIsBlank(value) {
2242
+ const filterOperation = await this.initOperation();
2243
+ await filterOperation.setIsBlank(value);
2244
+ }
2245
+ /**
2246
+ * Возвращает true|false, если операция 'isblank' установлена для фильтра
2247
+ * @example
2248
+ * expect(await form.formFilter('NumberFld').getIsBlank()).toBe(false);
2249
+ */
2250
+ async getIsBlank() {
2251
+ const filterOperation = await this.initOperation();
2252
+ return await filterOperation.getIsBlank();
2253
+ }
2091
2254
  };
2092
2255
  }
2093
2256
  });
@@ -2100,9 +2263,14 @@ var init_PanelFilterField = __esm({
2100
2263
  init_locators();
2101
2264
  init_createDataTestId();
2102
2265
  init_AbstractEditor2();
2266
+ init_FilterOperation();
2103
2267
  PanelFilterField = class extends AbstractEditor {
2268
+ formName;
2269
+ name;
2104
2270
  constructor(parentCssSelector, formName, name, driver) {
2105
2271
  super(parentCssSelector, byTestIdCssSelector(createDocFilterTestId(formName, name)), driver);
2272
+ this.formName = formName;
2273
+ this.name = name;
2106
2274
  }
2107
2275
  /**
2108
2276
  * Возвращает значение в поле
@@ -2138,16 +2306,61 @@ var init_PanelFilterField = __esm({
2138
2306
  async remove(itemText) {
2139
2307
  return super.remove(itemText);
2140
2308
  }
2309
+ /**
2310
+ * Инициализация операции фильтра
2311
+ */
2312
+ async initOperation() {
2313
+ return new FilterOperation({
2314
+ parentCssSelector: this.parentCssSelector,
2315
+ filterTestID: createDocFilterTestId(this.formName, this.name)
2316
+ });
2317
+ }
2318
+ /**
2319
+ * Устанавливает операцию для фильтра
2320
+ * @example
2321
+ * await form.filterPanel.filterField('TagBox').setOperation("=");
2322
+ */
2323
+ async setOperation(operationName) {
2324
+ const filterOperation = await this.initOperation();
2325
+ await filterOperation.setOperation(operationName);
2326
+ }
2327
+ /**
2328
+ * Возвращает операцию фильтра
2329
+ * @example
2330
+ * expect(await form.filterPanel.filterField('NumberFld').getOperation()).toBe("=");
2331
+ */
2332
+ async getOperation() {
2333
+ const filterOperation = await this.initOperation();
2334
+ return await filterOperation.getOperation();
2335
+ }
2336
+ /**
2337
+ * Устанавливает операцию 'isblank' для фильтра
2338
+ * @example
2339
+ * await form.filterPanel.filterField('TagBox').setIsBlank(true);
2340
+ */
2341
+ async setIsBlank(value) {
2342
+ const filterOperation = await this.initOperation();
2343
+ await filterOperation.setIsBlank(value);
2344
+ }
2345
+ /**
2346
+ * Возвращает true|false, если операция 'isblank' установлена для фильтра
2347
+ * @example
2348
+ * expect(await form.filterPanel.filterField('NumberFld').getIsBlank()).toBe(false);
2349
+ */
2350
+ async getIsBlank() {
2351
+ const filterOperation = await this.initOperation();
2352
+ return await filterOperation.getIsBlank();
2353
+ }
2141
2354
  };
2142
2355
  }
2143
2356
  });
2144
2357
 
2145
2358
  // src/pageObjects/elements/Filters/FilterPanel.ts
2146
- var import_selenium_webdriver25, drawerSelector, FILTER_PANEL_SELECTOR, CLOSE_SELECTOR, FilterPanel;
2359
+ var import_selenium_webdriver26, drawerSelector, FILTER_PANEL_SELECTOR, CLOSE_SELECTOR, FilterPanel;
2147
2360
  var init_FilterPanel = __esm({
2148
2361
  "src/pageObjects/elements/Filters/FilterPanel.ts"() {
2149
2362
  "use strict";
2150
- import_selenium_webdriver25 = require("selenium-webdriver");
2363
+ import_selenium_webdriver26 = require("selenium-webdriver");
2151
2364
  init_AbstractElement();
2152
2365
  init_PanelFilterField();
2153
2366
  init_actions();
@@ -2162,7 +2375,7 @@ var init_FilterPanel = __esm({
2162
2375
  async filterPanelButtons() {
2163
2376
  const selector = `${this.elementCssSelector} ${FILTER_PANEL_SELECTOR} .filter-panel__buttons-panel .dx-button-text`;
2164
2377
  const el = await this.getElement();
2165
- return el.findElements(import_selenium_webdriver25.By.css(selector));
2378
+ return el.findElements(import_selenium_webdriver26.By.css(selector));
2166
2379
  }
2167
2380
  constructor(formName, driver) {
2168
2381
  super(driver, drawerSelector(formName));
@@ -2195,7 +2408,7 @@ var init_FilterPanel = __esm({
2195
2408
  await this.driver.sleep(300);
2196
2409
  }
2197
2410
  async close() {
2198
- const btn = await this.driver.findElement(import_selenium_webdriver25.By.css(`${this.elementCssSelector} ${CLOSE_SELECTOR}`));
2411
+ const btn = await this.driver.findElement(import_selenium_webdriver26.By.css(`${this.elementCssSelector} ${CLOSE_SELECTOR}`));
2199
2412
  await click(btn, this.driver);
2200
2413
  }
2201
2414
  };
@@ -2231,15 +2444,18 @@ var init_HeaderFilterField = __esm({
2231
2444
  });
2232
2445
 
2233
2446
  // src/pageObjects/elements/Filters/ColumnFilter.ts
2234
- var import_selenium_webdriver26, APPLY_SELECTOR, CANCEL_SELECTOR, HEADER_FILTER_ICON, HEADER_FILTER_CONTAINER, HEADER_FILTER_BUTTONS, ColumnFilter;
2447
+ var import_selenium_webdriver27, APPLY_SELECTOR, CANCEL_SELECTOR, HEADER_FILTER_ICON, HEADER_FILTER_CONTAINER, HEADER_FILTER_BUTTONS, ColumnFilter;
2235
2448
  var init_ColumnFilter = __esm({
2236
2449
  "src/pageObjects/elements/Filters/ColumnFilter.ts"() {
2237
2450
  "use strict";
2238
2451
  init_actions();
2239
- import_selenium_webdriver26 = require("selenium-webdriver");
2452
+ import_selenium_webdriver27 = require("selenium-webdriver");
2240
2453
  init_HeaderFilterField();
2241
2454
  init_waitElementIsVisible();
2242
2455
  init_AbstractElement();
2456
+ init_FilterOperation();
2457
+ init_createDataTestId();
2458
+ init_wait();
2243
2459
  APPLY_SELECTOR = ".apply-button";
2244
2460
  CANCEL_SELECTOR = ".cancel-button";
2245
2461
  HEADER_FILTER_ICON = ".dx-column-indicators .dx-header-filter";
@@ -2258,11 +2474,11 @@ var init_ColumnFilter = __esm({
2258
2474
  }
2259
2475
  async getApplyButton() {
2260
2476
  const selector = `${HEADER_FILTER_CONTAINER} ${HEADER_FILTER_BUTTONS} ${APPLY_SELECTOR}`;
2261
- return this.driver.findElement(import_selenium_webdriver26.By.css(selector));
2477
+ return this.driver.findElement(import_selenium_webdriver27.By.css(selector));
2262
2478
  }
2263
2479
  async getCancelButton() {
2264
2480
  const selector = `${HEADER_FILTER_CONTAINER} ${HEADER_FILTER_BUTTONS} ${CANCEL_SELECTOR}`;
2265
- return this.driver.findElement(import_selenium_webdriver26.By.css(selector));
2481
+ return this.driver.findElement(import_selenium_webdriver27.By.css(selector));
2266
2482
  }
2267
2483
  async apply() {
2268
2484
  const btn = await this.getApplyButton();
@@ -2276,17 +2492,34 @@ var init_ColumnFilter = __esm({
2276
2492
  const columnEl = await this._column.getElement();
2277
2493
  const actions = this.driver.actions({ async: true });
2278
2494
  await actions.move({ origin: columnEl }).perform();
2279
- const elements = await columnEl.findElements(import_selenium_webdriver26.By.css(HEADER_FILTER_ICON));
2280
- const headerFilterIcon = elements[1];
2281
- await waitElementIsVisible({
2282
- element: headerFilterIcon,
2283
- driver: this.driver,
2284
- errorMessage: `HeaderFilter "${this._name}" is not visible`
2285
- });
2495
+ const elements = await columnEl.findElements(import_selenium_webdriver27.By.css(HEADER_FILTER_ICON));
2496
+ let headerFilterIcon = null;
2497
+ await wait(
2498
+ async () => {
2499
+ let result = false;
2500
+ for (let element of elements) {
2501
+ if (await element.isDisplayed()) {
2502
+ headerFilterIcon = element;
2503
+ result = true;
2504
+ break;
2505
+ }
2506
+ }
2507
+ return result;
2508
+ },
2509
+ this.driver,
2510
+ `HeaderFilter "${this._name}" is not visible`
2511
+ );
2286
2512
  if (!headerFilterIcon)
2287
2513
  throw new Error(`HeaderFilter "${this._name}" is not visible`);
2288
2514
  await headerFilterIcon.click();
2289
- return new HeaderFilterField("", this._formName, this._name, this.driver);
2515
+ const filter = new HeaderFilterField("", this._formName, this._name, this.driver);
2516
+ const filterEl = await filter.getElement();
2517
+ await waitElementIsVisible({
2518
+ element: filterEl,
2519
+ driver: this.driver,
2520
+ errorMessage: `Header filter is not visible`
2521
+ });
2522
+ return filter;
2290
2523
  }
2291
2524
  /**
2292
2525
  * Возвращает значение в поле
@@ -2331,6 +2564,36 @@ var init_ColumnFilter = __esm({
2331
2564
  await filter.remove(itemText);
2332
2565
  return this.apply();
2333
2566
  }
2567
+ // ToDo: Треба доробити після того, як буде реалізована логіка з editor buttons
2568
+ async initOperation() {
2569
+ await this.initFilter();
2570
+ return new FilterOperation({
2571
+ parentCssSelector: HEADER_FILTER_CONTAINER,
2572
+ filterTestID: createHeaderFilterTestId(this._formName, this._name)
2573
+ });
2574
+ }
2575
+ // ToDo: Треба доробити після того, як буде реалізована логіка з editor buttons
2576
+ async setOperation(operationName) {
2577
+ const filterOperation = await this.initOperation();
2578
+ await filterOperation.setOperation(operationName);
2579
+ await this.apply();
2580
+ }
2581
+ // ToDo: Треба доробити після того, як буде реалізована логіка з editor buttons
2582
+ async getOperation() {
2583
+ const filterOperation = await this.initOperation();
2584
+ return await filterOperation.getOperation();
2585
+ }
2586
+ // ToDo: Треба доробити після того, як буде реалізована логіка з editor buttons
2587
+ async setIsBlank(value) {
2588
+ const filterOperation = await this.initOperation();
2589
+ await filterOperation.setIsBlank(value);
2590
+ await this.apply();
2591
+ }
2592
+ // ToDo: Треба доробити після того, як буде реалізована логіка з editor buttons
2593
+ async getIsBlank() {
2594
+ const filterOperation = await this.initOperation();
2595
+ return await filterOperation.getIsBlank();
2596
+ }
2334
2597
  };
2335
2598
  }
2336
2599
  });
@@ -2340,7 +2603,7 @@ var ListForm_exports = {};
2340
2603
  __export(ListForm_exports, {
2341
2604
  default: () => ListForm
2342
2605
  });
2343
- var DATAGRID_HEADER_CSS_SELECTOR, ListForm;
2606
+ var DATAGRID_HEADER_CSS_SELECTOR, FIXED_DATAGRID_CONTENT_CSS_SELECTOR, ListForm;
2344
2607
  var init_ListForm = __esm({
2345
2608
  "src/pageObjects/elements/Forms/ListForm.ts"() {
2346
2609
  "use strict";
@@ -2351,12 +2614,15 @@ var init_ListForm = __esm({
2351
2614
  init_FilterPanel();
2352
2615
  init_ColumnFilter();
2353
2616
  DATAGRID_HEADER_CSS_SELECTOR = ".dx-datagrid-headers .dx-datagrid-content:not(.dx-datagrid-content-fixed)";
2617
+ FIXED_DATAGRID_CONTENT_CSS_SELECTOR = ".dx-fixed-columns .dx-datagrid-content.dx-datagrid-content-fixed";
2354
2618
  ListForm = class extends Form {
2355
2619
  headerCssSelector;
2620
+ fixedTableContentCssSelector;
2356
2621
  constructor(driver) {
2357
2622
  super(driver);
2358
2623
  this.popupContainerCssSelector = `.popup .form-inline-${this.formName}`;
2359
2624
  this.headerCssSelector = DATAGRID_HEADER_CSS_SELECTOR;
2625
+ this.fixedTableContentCssSelector = FIXED_DATAGRID_CONTENT_CSS_SELECTOR;
2360
2626
  }
2361
2627
  /**
2362
2628
  * Находит таблицу
@@ -2366,7 +2632,13 @@ var init_ListForm = __esm({
2366
2632
  * expect(listForm.table());
2367
2633
  */
2368
2634
  table() {
2369
- return new Table(this.containerCssSelector, this.headerCssSelector, this.formName, this.driver);
2635
+ return new Table(
2636
+ this.containerCssSelector,
2637
+ this.headerCssSelector,
2638
+ this.fixedTableContentCssSelector,
2639
+ this.formName,
2640
+ this.driver
2641
+ );
2370
2642
  }
2371
2643
  /**
2372
2644
  * Находит таблицу
@@ -2413,17 +2685,19 @@ var TreeView_exports = {};
2413
2685
  __export(TreeView_exports, {
2414
2686
  default: () => TreeView
2415
2687
  });
2416
- var TREELIST_HEADER_CSS_SELECTOR, TreeView;
2688
+ var TREELIST_HEADER_CSS_SELECTOR, FIXED_TREELIST_CONTENT_CSS_SELECTOR, TreeView;
2417
2689
  var init_TreeView = __esm({
2418
2690
  "src/pageObjects/elements/Forms/TreeView.ts"() {
2419
2691
  "use strict";
2420
2692
  init_ListForm();
2421
2693
  TREELIST_HEADER_CSS_SELECTOR = ".dx-treelist-headers .dx-treelist-content:not(.dx-datagrid-content-fixed)";
2694
+ FIXED_TREELIST_CONTENT_CSS_SELECTOR = ".dx-fixed-columns .dx-treelist-content.dx-treelist-content-fixed";
2422
2695
  TreeView = class extends ListForm {
2423
2696
  constructor(driver) {
2424
2697
  super(driver);
2425
2698
  this.popupContainerCssSelector = `.popup .wrapper-tree-view-${this.formName}`;
2426
2699
  this.headerCssSelector = TREELIST_HEADER_CSS_SELECTOR;
2700
+ this.fixedTableContentCssSelector = FIXED_TREELIST_CONTENT_CSS_SELECTOR;
2427
2701
  }
2428
2702
  };
2429
2703
  }
@@ -2463,12 +2737,12 @@ var init_createSubFormInstance = __esm({
2463
2737
  });
2464
2738
 
2465
2739
  // src/pageObjects/elements/Forms/Form.ts
2466
- var import_selenium_webdriver27, formTestId, Form;
2740
+ var import_selenium_webdriver28, formTestId, Form;
2467
2741
  var init_Form = __esm({
2468
2742
  "src/pageObjects/elements/Forms/Form.ts"() {
2469
2743
  "use strict";
2470
2744
  init_locators();
2471
- import_selenium_webdriver27 = require("selenium-webdriver");
2745
+ import_selenium_webdriver28 = require("selenium-webdriver");
2472
2746
  init_AbstractForm();
2473
2747
  init_waitElementIsVisible();
2474
2748
  init_createSubFormInstance();
@@ -2493,10 +2767,10 @@ var init_Form = __esm({
2493
2767
  */
2494
2768
  async getTitleText() {
2495
2769
  if (await this.isModal()) {
2496
- const titleEl2 = await this.driver.findElement(import_selenium_webdriver27.By.css(`${this.popupContainerCssSelector} .popup-title`));
2770
+ const titleEl2 = await this.driver.findElement(import_selenium_webdriver28.By.css(`${this.popupContainerCssSelector} .popup-title`));
2497
2771
  return titleEl2.getText();
2498
2772
  }
2499
- let titleEl = await this.driver.findElement(import_selenium_webdriver27.By.className("main-toolbar-form-title"));
2773
+ let titleEl = await this.driver.findElement(import_selenium_webdriver28.By.className("main-toolbar-form-title"));
2500
2774
  return titleEl.getText();
2501
2775
  }
2502
2776
  setSubFormMode() {
@@ -2514,7 +2788,7 @@ var init_Form = __esm({
2514
2788
  */
2515
2789
  async subForm(name) {
2516
2790
  const cssSelector = subformCssSelector(this.containerCssSelector, subFormTestId(name));
2517
- const byCssSelector = import_selenium_webdriver27.By.css(cssSelector);
2791
+ const byCssSelector = import_selenium_webdriver28.By.css(cssSelector);
2518
2792
  const subFormEl = await this.driver.findElement(byCssSelector);
2519
2793
  await waitElementIsVisible({
2520
2794
  element: subFormEl,
@@ -2544,18 +2818,18 @@ var FormEdit_exports = {};
2544
2818
  __export(FormEdit_exports, {
2545
2819
  default: () => FormEdit
2546
2820
  });
2547
- var import_selenium_webdriver28, FormEdit;
2821
+ var import_selenium_webdriver29, FormEdit;
2548
2822
  var init_FormEdit = __esm({
2549
2823
  "src/pageObjects/elements/Forms/FormEdit.ts"() {
2550
2824
  "use strict";
2551
2825
  init_Form();
2552
- import_selenium_webdriver28 = require("selenium-webdriver");
2826
+ import_selenium_webdriver29 = require("selenium-webdriver");
2553
2827
  init_FormField();
2554
2828
  init_actions();
2555
2829
  init_wait();
2556
2830
  FormEdit = class extends Form {
2557
- saveButtonBy = import_selenium_webdriver28.By.id("button-save");
2558
- closeButtonBy = import_selenium_webdriver28.By.id("button-cancel");
2831
+ saveButtonBy = import_selenium_webdriver29.By.id("button-save");
2832
+ closeButtonBy = import_selenium_webdriver29.By.id("button-cancel");
2559
2833
  constructor(driver) {
2560
2834
  super(driver);
2561
2835
  this.popupContainerCssSelector = `.popup .form-edit-${this.formName}`;
@@ -2871,13 +3145,13 @@ init_ListForm();
2871
3145
  init_TreeView();
2872
3146
 
2873
3147
  // src/pageObjects/elements/Forms/ReportForm.ts
2874
- var import_selenium_webdriver29 = require("selenium-webdriver");
3148
+ var import_selenium_webdriver30 = require("selenium-webdriver");
2875
3149
  init_FormEdit();
2876
3150
  var ReportForm = class extends FormEdit {
2877
3151
  constructor(driver) {
2878
3152
  super(driver);
2879
3153
  this.popupContainerCssSelector = `.popup .form-report-${this.formName}`;
2880
- this.saveButtonBy = import_selenium_webdriver29.By.id("button-apply");
3154
+ this.saveButtonBy = import_selenium_webdriver30.By.id("button-apply");
2881
3155
  }
2882
3156
  /**
2883
3157
  * Знаходить поле/фільтр у формі репорту за ім'ям
@@ -2900,7 +3174,7 @@ init_FilterPanel();
2900
3174
 
2901
3175
  // src/pageObjects/elements/Dialog.ts
2902
3176
  init_AbstractElement();
2903
- var import_selenium_webdriver30 = require("selenium-webdriver");
3177
+ var import_selenium_webdriver31 = require("selenium-webdriver");
2904
3178
  init_AbstractButton();
2905
3179
  var DIALOG_CLASS = ".d5-dialog";
2906
3180
  var DIALOG_TITLE_CLASS = ".dialog__title";
@@ -2915,7 +3189,7 @@ var DialogButton = class extends AbstractButton {
2915
3189
  }
2916
3190
  async getElement() {
2917
3191
  const panel = await super.getElement();
2918
- return panel.findElement(import_selenium_webdriver30.By.xpath(buttonByTextXpath2(this.text)));
3192
+ return panel.findElement(import_selenium_webdriver31.By.xpath(buttonByTextXpath2(this.text)));
2919
3193
  }
2920
3194
  buttonNotDisplayedError() {
2921
3195
  return `Dialog button ${this.text} cannot be clicked. It is not displayed or it is disabled`;
@@ -2935,11 +3209,11 @@ var Dialog = class extends AbstractElement {
2935
3209
  return this.joinRelativeCssSelectors([DIALOG_CLASS, DIALOG_BUTTONS_PANEL_CLASS]);
2936
3210
  }
2937
3211
  async title() {
2938
- const el = await this.driver.findElement(import_selenium_webdriver30.By.css(this.titleSelector));
3212
+ const el = await this.driver.findElement(import_selenium_webdriver31.By.css(this.titleSelector));
2939
3213
  return await el.getText();
2940
3214
  }
2941
3215
  async text() {
2942
- const el = await this.driver.findElement(import_selenium_webdriver30.By.css(this.textSelector));
3216
+ const el = await this.driver.findElement(import_selenium_webdriver31.By.css(this.textSelector));
2943
3217
  return await el.getText();
2944
3218
  }
2945
3219
  button(text) {