d5-testing-library 1.8.0-alpha.0 → 1.8.0-alpha.10

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.
@@ -16,7 +16,7 @@ import {
16
16
  wait,
17
17
  waitElementIsClickable,
18
18
  waitElementIsVisible
19
- } from "./chunk-JITTN2NY.mjs";
19
+ } from "./chunk-NXQ4TYFN.mjs";
20
20
 
21
21
  // src/pageObjects/elements/Table/Table.ts
22
22
  import { By as By5 } from "selenium-webdriver";
@@ -94,10 +94,12 @@ var DX_DATA_ROW_CLASS = "dx-data-row";
94
94
  var Row = class extends AbstractElementWithParent {
95
95
  index;
96
96
  getColumnBy;
97
- constructor(parentCssSelector, index, driver, getColumnBy) {
97
+ fixedTableContentCssSelector;
98
+ constructor(parentCssSelector, fixedTableContentCssSelector, index, driver, getColumnBy) {
98
99
  super(parentCssSelector, getCssRowByIndexSelector(index), driver);
99
100
  this.index = index;
100
101
  this.getColumnBy = getColumnBy;
102
+ this.fixedTableContentCssSelector = fixedTableContentCssSelector;
101
103
  }
102
104
  _getCell({ index, name, title }) {
103
105
  return new Cell(
@@ -147,12 +149,11 @@ var Row = class extends AbstractElementWithParent {
147
149
  return result;
148
150
  }
149
151
  async clickInlineButton(buttonClass) {
150
- const FIXED_TABLE_CSS_SELECTOR = ".dx-fixed-columns .dx-datagrid-content.dx-datagrid-content-fixed";
151
152
  const buttonCssSelector = `.${DX_DATA_ROW_CLASS}[aria-rowindex="${transformInputIndex(
152
153
  this.index
153
154
  )}"] .${buttonClass}`;
154
155
  const button = await fixElementStaleError(
155
- By3.css(`${this.parentCssSelector} ${FIXED_TABLE_CSS_SELECTOR} ${buttonCssSelector}`),
156
+ By3.css(`${this.parentCssSelector} ${this.fixedTableContentCssSelector} ${buttonCssSelector}`),
156
157
  this.driver
157
158
  );
158
159
  return click(button, this.driver);
@@ -239,10 +240,14 @@ var Column = class extends AbstractElementWithParent {
239
240
  var Table = class extends AbstractElementWithParent {
240
241
  formName;
241
242
  headerCssSelector;
242
- constructor(parentCssSelector, headerCssSelector, formName, driver) {
243
+ fixedTableContentCssSelector;
244
+ tableContentCssSelector;
245
+ constructor(parentCssSelector, headerCssSelector, tableContentCssSelector, fixedTableContentCssSelector, formName, driver) {
243
246
  super(parentCssSelector, `#${createTableId(formName)}`, driver);
244
247
  this.formName = formName;
245
248
  this.headerCssSelector = headerCssSelector;
249
+ this.fixedTableContentCssSelector = fixedTableContentCssSelector;
250
+ this.tableContentCssSelector = tableContentCssSelector;
246
251
  }
247
252
  getColumnBy = (args) => {
248
253
  if (args.title) {
@@ -251,7 +256,7 @@ var Table = class extends AbstractElementWithParent {
251
256
  return this.getColumnByName(args.name);
252
257
  };
253
258
  getRowByIndex(index) {
254
- return new Row(this.getFullCssSelector(), index, this.driver, this.getColumnBy);
259
+ return new Row(this.getFullCssSelector(), this.fixedTableContentCssSelector, index, this.driver, this.getColumnBy);
255
260
  }
256
261
  getColumnByIndex(index) {
257
262
  return new Column({
@@ -280,10 +285,17 @@ var Table = class extends AbstractElementWithParent {
280
285
  return this.getRowByIndex(index).select();
281
286
  }
282
287
  async getRows() {
283
- const rows = await this.driver.findElements(By5.css(`${this.getFullCssSelector()} .dx-row.dx-data-row`));
288
+ const rowsFullCssSelector = `${this.getFullCssSelector()} ${this.tableContentCssSelector} .dx-row.dx-data-row`;
289
+ const rows = await this.driver.findElements(By5.css(rowsFullCssSelector));
284
290
  const result = [];
285
291
  rows.forEach((_, index) => {
286
- const newRow = new Row(this.getFullCssSelector(), index, this.driver, this.getColumnBy);
292
+ const newRow = new Row(
293
+ this.getFullCssSelector(),
294
+ this.fixedTableContentCssSelector,
295
+ index,
296
+ this.driver,
297
+ this.getColumnBy
298
+ );
287
299
  result.push(newRow);
288
300
  });
289
301
  return result;
@@ -367,9 +379,10 @@ var isString = function(object) {
367
379
 
368
380
  // src/pageObjects/elements/TableToolbar/ToolbarMenu.ts
369
381
  var SPINDOWN_CLASS = ".dx-icon-spindown";
382
+ var CONTEXT_MENU_CLASS = "dx-context-menu";
370
383
  var buttonGroupItemSelector = (formName, name) => byTestIdCssSelector(`ftb-${formName}-${name}`);
371
384
  var getFullCssSelector = (formName, name) => `${buttonGroupItemSelector(formName, name)} ${SPINDOWN_CLASS}`;
372
- var buttonByTextXpath = (text) => `.//span[contains(@class, "dx-menu-item-text") and contains(text(), "${text}")]`;
385
+ var buttonByTextXpath = (text) => `//div[contains(@class, '${CONTEXT_MENU_CLASS}')]//span[contains(@class, 'dx-menu-item-text') and text()='${text}']`;
373
386
  var ToolbarMenu = class extends AbstractElementWithParent {
374
387
  _formName;
375
388
  constructor(parentCssSelector, formName, name, driver) {
@@ -445,6 +458,14 @@ var ToolbarItem = class extends AbstractElementWithParent {
445
458
  await this.init();
446
459
  return await this._button.isDisabled();
447
460
  }
461
+ async isDisplayed() {
462
+ try {
463
+ await this.init();
464
+ return this._button.isDisplayed();
465
+ } catch (error) {
466
+ return false;
467
+ }
468
+ }
448
469
  get menu() {
449
470
  return new ToolbarMenu(this.parentCssSelector, this._formName, this._itemName, this.driver);
450
471
  }
@@ -463,10 +484,105 @@ var FormToolbar = class extends AbstractElementWithParent {
463
484
  }
464
485
  };
465
486
 
487
+ // src/pageObjects/elements/Filters/FilterOperation.ts
488
+ import { By as By7 } from "selenium-webdriver";
489
+ var FILTER_OPERATIONS = [
490
+ "=",
491
+ "<>",
492
+ "<",
493
+ ">",
494
+ "<=",
495
+ ">=",
496
+ "contains",
497
+ "between",
498
+ "isanyof",
499
+ "isnotanyof",
500
+ "isblank",
501
+ "isnotblank",
502
+ "startwith",
503
+ "bywords"
504
+ ];
505
+ var BUTTON_OPERATION_WIDGET = "operation-widget";
506
+ var OPERATIONS_WIDGET_POPUP = "operation-type-widget-popup";
507
+ var getWidgetInPopupSelector = (operationName) => `.dx-list-item [data-operation="${operationName}"]`;
508
+ var FilterOperation = class extends AbstractElementWithParent {
509
+ _testId;
510
+ constructor({ parentCssSelector, filterTestID, driver }) {
511
+ super(parentCssSelector, `${byTestIdCssSelector(`${BUTTON_OPERATION_WIDGET}-${filterTestID}`)}`, driver);
512
+ this._testId = filterTestID;
513
+ }
514
+ async initOperationWidget() {
515
+ const widgetButtonEl = await this.getElement();
516
+ await waitElementIsClickable({
517
+ element: widgetButtonEl,
518
+ errorMessage: "Widget operation is not clickable",
519
+ driver: this.driver
520
+ });
521
+ const clickableElement = await widgetButtonEl.findElement(By7.className("dx-icon"));
522
+ await click(clickableElement, this.driver);
523
+ try {
524
+ const widgetPopupEl = await this.driver.findElement(By7.css(`${byTestIdCssSelector(`${OPERATIONS_WIDGET_POPUP}-${this._testId}`)}`));
525
+ await waitElementIsVisible({
526
+ element: widgetPopupEl,
527
+ errorMessage: `Operation widget popup is not visible`,
528
+ driver: this.driver
529
+ });
530
+ } catch (_) {
531
+ throw `Operation widget popup is not visible`;
532
+ }
533
+ }
534
+ async setOperation(operationName) {
535
+ if (!FILTER_OPERATIONS.includes(operationName)) {
536
+ throw new Error(`Operation with name "${operationName}" is not correct.`);
537
+ }
538
+ await this.initOperationWidget();
539
+ const operationEl = await fixElementStaleError(By7.css(`${byTestIdCssSelector(`${OPERATIONS_WIDGET_POPUP}-${this._testId}`)} ${getWidgetInPopupSelector(operationName)}`), this.driver);
540
+ await click(operationEl, this.driver);
541
+ await wait(
542
+ async () => {
543
+ const currOperationName = await this.getAttribute("data-operation");
544
+ if (operationName === "isblank")
545
+ return true;
546
+ return currOperationName === operationName;
547
+ },
548
+ this.driver,
549
+ "Operation is not changed"
550
+ );
551
+ }
552
+ async getOperation() {
553
+ const result = await this.getAttribute("data-operation");
554
+ if (!result)
555
+ throw new Error("Operation not found");
556
+ return result;
557
+ }
558
+ async setIsBlank(value) {
559
+ const currValue = await this.getIsBlank();
560
+ if (currValue !== value) {
561
+ await this.setOperation("isblank");
562
+ await wait(
563
+ async () => {
564
+ const currIsBlank = await this.getIsBlank();
565
+ return currIsBlank === value;
566
+ },
567
+ this.driver,
568
+ "Operation is not changed"
569
+ );
570
+ }
571
+ }
572
+ async getIsBlank() {
573
+ const result = await this.getAttribute("data-hasblank");
574
+ return result === "true";
575
+ }
576
+ };
577
+
466
578
  // src/pageObjects/elements/Filters/FormFilterField.ts
467
579
  var FormFilterField = class extends AbstractEditor {
580
+ formName;
581
+ name;
468
582
  constructor(parentCssSelector, formName, name, driver) {
469
583
  super(parentCssSelector, byTestIdCssSelector(createLayoutFilterTestId(formName, name)), driver);
584
+ this.formName = formName;
585
+ this.name = name;
470
586
  }
471
587
  /**
472
588
  * Возвращает значение в поле
@@ -482,8 +598,15 @@ var FormFilterField = class extends AbstractEditor {
482
598
  * @example
483
599
  * await form.formFilter('NumberFld').setValue(123);
484
600
  * await form.formFilter('TextFld').setValue('TestValue');
601
+ * await form.formFilter('TextFld').setValue('TestValue', '=', true);
485
602
  */
486
- async setValue(value) {
603
+ async setValue(value, operation, isBlank) {
604
+ if (typeof operation === "string") {
605
+ await this.setOperation(operation);
606
+ }
607
+ if (typeof isBlank === "boolean") {
608
+ await this.setIsBlank(isBlank);
609
+ }
487
610
  return super.setValue(value);
488
611
  }
489
612
  /**
@@ -502,15 +625,64 @@ var FormFilterField = class extends AbstractEditor {
502
625
  async remove(itemText) {
503
626
  return super.remove(itemText);
504
627
  }
628
+ /**
629
+ * Инициализация операции фильтра
630
+ */
631
+ async initOperation() {
632
+ return new FilterOperation({
633
+ parentCssSelector: this.parentCssSelector,
634
+ filterTestID: createLayoutFilterTestId(this.formName, this.name)
635
+ });
636
+ }
637
+ /**
638
+ * Устанавливает операцию для фильтра
639
+ * @example
640
+ * await form.formFilter('TagBox').setOperation("=");
641
+ */
642
+ async setOperation(operationName) {
643
+ const filterOperation = await this.initOperation();
644
+ await filterOperation.setOperation(operationName);
645
+ }
646
+ /**
647
+ * Возвращает операцию фильтра
648
+ * @example
649
+ * expect(await form.formFilter('NumberFld').getOperation()).toBe("=");
650
+ */
651
+ async getOperation() {
652
+ const filterOperation = await this.initOperation();
653
+ return await filterOperation.getOperation();
654
+ }
655
+ /**
656
+ * Устанавливает операцию 'isblank' для фильтра
657
+ * @example
658
+ * await form.formFilter('TagBox').setIsBlank(true);
659
+ */
660
+ async setIsBlank(value) {
661
+ const filterOperation = await this.initOperation();
662
+ await filterOperation.setIsBlank(value);
663
+ }
664
+ /**
665
+ * Возвращает true|false, если операция 'isblank' установлена для фильтра
666
+ * @example
667
+ * expect(await form.formFilter('NumberFld').getIsBlank()).toBe(false);
668
+ */
669
+ async getIsBlank() {
670
+ const filterOperation = await this.initOperation();
671
+ return await filterOperation.getIsBlank();
672
+ }
505
673
  };
506
674
 
507
675
  // src/pageObjects/elements/Filters/FilterPanel.ts
508
- import { By as By7 } from "selenium-webdriver";
676
+ import { By as By8 } from "selenium-webdriver";
509
677
 
510
678
  // src/pageObjects/elements/Filters/PanelFilterField.ts
511
679
  var PanelFilterField = class extends AbstractEditor {
680
+ formName;
681
+ name;
512
682
  constructor(parentCssSelector, formName, name, driver) {
513
683
  super(parentCssSelector, byTestIdCssSelector(createDocFilterTestId(formName, name)), driver);
684
+ this.formName = formName;
685
+ this.name = name;
514
686
  }
515
687
  /**
516
688
  * Возвращает значение в поле
@@ -526,8 +698,15 @@ var PanelFilterField = class extends AbstractEditor {
526
698
  * @example
527
699
  * await form.filterPanel.filterField('NumberFld').setValue(123);
528
700
  * await form.filterPanel.filterField('TextFld').setValue('TestValue');
701
+ * await form.filterPanel.filterField('TextFld').setValue('TestValue', '=', true);
529
702
  */
530
- async setValue(value) {
703
+ async setValue(value, operation, isBlank) {
704
+ if (typeof operation === "string") {
705
+ await this.setOperation(operation);
706
+ }
707
+ if (typeof isBlank === "boolean") {
708
+ await this.setIsBlank(isBlank);
709
+ }
531
710
  return super.setValue(value);
532
711
  }
533
712
  /**
@@ -546,6 +725,51 @@ var PanelFilterField = class extends AbstractEditor {
546
725
  async remove(itemText) {
547
726
  return super.remove(itemText);
548
727
  }
728
+ /**
729
+ * Инициализация операции фильтра
730
+ */
731
+ async initOperation() {
732
+ return new FilterOperation({
733
+ parentCssSelector: this.parentCssSelector,
734
+ filterTestID: createDocFilterTestId(this.formName, this.name)
735
+ });
736
+ }
737
+ /**
738
+ * Устанавливает операцию для фильтра
739
+ * @example
740
+ * await form.filterPanel.filterField('TagBox').setOperation("=");
741
+ */
742
+ async setOperation(operationName) {
743
+ const filterOperation = await this.initOperation();
744
+ await filterOperation.setOperation(operationName);
745
+ }
746
+ /**
747
+ * Возвращает операцию фильтра
748
+ * @example
749
+ * expect(await form.filterPanel.filterField('NumberFld').getOperation()).toBe("=");
750
+ */
751
+ async getOperation() {
752
+ const filterOperation = await this.initOperation();
753
+ return await filterOperation.getOperation();
754
+ }
755
+ /**
756
+ * Устанавливает операцию 'isblank' для фильтра
757
+ * @example
758
+ * await form.filterPanel.filterField('TagBox').setIsBlank(true);
759
+ */
760
+ async setIsBlank(value) {
761
+ const filterOperation = await this.initOperation();
762
+ await filterOperation.setIsBlank(value);
763
+ }
764
+ /**
765
+ * Возвращает true|false, если операция 'isblank' установлена для фильтра
766
+ * @example
767
+ * expect(await form.filterPanel.filterField('NumberFld').getIsBlank()).toBe(false);
768
+ */
769
+ async getIsBlank() {
770
+ const filterOperation = await this.initOperation();
771
+ return await filterOperation.getIsBlank();
772
+ }
549
773
  };
550
774
 
551
775
  // src/pageObjects/elements/Filters/FilterPanel.ts
@@ -560,7 +784,7 @@ var FilterPanel = class extends AbstractElement {
560
784
  async filterPanelButtons() {
561
785
  const selector = `${this.elementCssSelector} ${FILTER_PANEL_SELECTOR} .filter-panel__buttons-panel .dx-button-text`;
562
786
  const el = await this.getElement();
563
- return el.findElements(By7.css(selector));
787
+ return el.findElements(By8.css(selector));
564
788
  }
565
789
  constructor(formName, driver) {
566
790
  super(driver, drawerSelector(formName));
@@ -593,13 +817,13 @@ var FilterPanel = class extends AbstractElement {
593
817
  await this.driver.sleep(300);
594
818
  }
595
819
  async close() {
596
- const btn = await this.driver.findElement(By7.css(`${this.elementCssSelector} ${CLOSE_SELECTOR}`));
820
+ const btn = await this.driver.findElement(By8.css(`${this.elementCssSelector} ${CLOSE_SELECTOR}`));
597
821
  await click(btn, this.driver);
598
822
  }
599
823
  };
600
824
 
601
825
  // src/pageObjects/elements/Filters/ColumnFilter.ts
602
- import { By as By8 } from "selenium-webdriver";
826
+ import { By as By9 } from "selenium-webdriver";
603
827
 
604
828
  // src/pageObjects/elements/Filters/HeaderFilterField.ts
605
829
  var HeaderFilterField = class extends AbstractEditor {
@@ -639,11 +863,11 @@ var ColumnFilter = class extends AbstractElement {
639
863
  }
640
864
  async getApplyButton() {
641
865
  const selector = `${HEADER_FILTER_CONTAINER} ${HEADER_FILTER_BUTTONS} ${APPLY_SELECTOR}`;
642
- return this.driver.findElement(By8.css(selector));
866
+ return this.driver.findElement(By9.css(selector));
643
867
  }
644
868
  async getCancelButton() {
645
869
  const selector = `${HEADER_FILTER_CONTAINER} ${HEADER_FILTER_BUTTONS} ${CANCEL_SELECTOR}`;
646
- return this.driver.findElement(By8.css(selector));
870
+ return this.driver.findElement(By9.css(selector));
647
871
  }
648
872
  async apply() {
649
873
  const btn = await this.getApplyButton();
@@ -657,17 +881,34 @@ var ColumnFilter = class extends AbstractElement {
657
881
  const columnEl = await this._column.getElement();
658
882
  const actions = this.driver.actions({ async: true });
659
883
  await actions.move({ origin: columnEl }).perform();
660
- const elements = await columnEl.findElements(By8.css(HEADER_FILTER_ICON));
661
- const headerFilterIcon = elements[1];
662
- await waitElementIsVisible({
663
- element: headerFilterIcon,
664
- driver: this.driver,
665
- errorMessage: `HeaderFilter "${this._name}" is not visible`
666
- });
884
+ const elements = await columnEl.findElements(By9.css(HEADER_FILTER_ICON));
885
+ let headerFilterIcon = null;
886
+ await wait(
887
+ async () => {
888
+ let result = false;
889
+ for (let element of elements) {
890
+ if (await element.isDisplayed()) {
891
+ headerFilterIcon = element;
892
+ result = true;
893
+ break;
894
+ }
895
+ }
896
+ return result;
897
+ },
898
+ this.driver,
899
+ `HeaderFilter "${this._name}" is not visible`
900
+ );
667
901
  if (!headerFilterIcon)
668
902
  throw new Error(`HeaderFilter "${this._name}" is not visible`);
669
903
  await headerFilterIcon.click();
670
- return new HeaderFilterField("", this._formName, this._name, this.driver);
904
+ const filter = new HeaderFilterField("", this._formName, this._name, this.driver);
905
+ const filterEl = await filter.getElement();
906
+ await waitElementIsVisible({
907
+ element: filterEl,
908
+ driver: this.driver,
909
+ errorMessage: `Header filter is not visible`
910
+ });
911
+ return filter;
671
912
  }
672
913
  /**
673
914
  * Возвращает значение в поле
@@ -686,9 +927,22 @@ var ColumnFilter = class extends AbstractElement {
686
927
  * @example
687
928
  * await form.columnFilter('NumberFld').setValue(123);
688
929
  * await form.columnFilter('TextFld').setValue('TestValue');
930
+ * await form.columnFilter('TextFld').setValue('TestValue', '=', true);
689
931
  */
690
- async setValue(value) {
932
+ async setValue(value, operation, isBlank) {
691
933
  const filter = await this.initFilter();
934
+ const inputEl = await filter.getElement();
935
+ await inputEl.click();
936
+ const filterOperation = new FilterOperation({
937
+ parentCssSelector: HEADER_FILTER_CONTAINER,
938
+ filterTestID: createHeaderFilterTestId(this._formName, this._name)
939
+ });
940
+ if (typeof operation === "string") {
941
+ await filterOperation.setOperation(operation);
942
+ }
943
+ if (typeof isBlank === "boolean") {
944
+ await filterOperation.setIsBlank(isBlank);
945
+ }
692
946
  await filter.setValue(value);
693
947
  return this.apply();
694
948
  }
@@ -712,16 +966,72 @@ var ColumnFilter = class extends AbstractElement {
712
966
  await filter.remove(itemText);
713
967
  return this.apply();
714
968
  }
969
+ /**
970
+ * Инициализация операции фильтра
971
+ */
972
+ async initOperation() {
973
+ const filter = await this.initFilter();
974
+ const inputEl = await filter.getElement();
975
+ await inputEl.click();
976
+ return new FilterOperation({
977
+ parentCssSelector: HEADER_FILTER_CONTAINER,
978
+ filterTestID: createHeaderFilterTestId(this._formName, this._name)
979
+ });
980
+ }
981
+ /**
982
+ * Устанавливает операцию для фильтра
983
+ * @example
984
+ * await form.columnFilter('TagBox').setOperation("=");
985
+ */
986
+ async setOperation(operationName) {
987
+ const filterOperation = await this.initOperation();
988
+ await filterOperation.setOperation(operationName);
989
+ await this.apply();
990
+ }
991
+ /**
992
+ * Возвращает операцию фильтра
993
+ * @example
994
+ * expect(await form.columnFilter('NumberFld').getOperation()).toBe("=");
995
+ */
996
+ async getOperation() {
997
+ const filterOperation = await this.initOperation();
998
+ return await filterOperation.getOperation();
999
+ }
1000
+ /**
1001
+ * Устанавливает операцию 'isblank' для фильтра
1002
+ * @example
1003
+ * await form.columnFilter('TagBox').setIsBlank(true);
1004
+ */
1005
+ async setIsBlank(value) {
1006
+ const filterOperation = await this.initOperation();
1007
+ await filterOperation.setIsBlank(value);
1008
+ await this.apply();
1009
+ }
1010
+ /**
1011
+ * Возвращает true|false, если операция 'isblank' установлена для фильтра
1012
+ * @example
1013
+ * expect(await form.columnFilter('NumberFld').getIsBlank()).toBe(false);
1014
+ */
1015
+ async getIsBlank() {
1016
+ const filterOperation = await this.initOperation();
1017
+ return await filterOperation.getIsBlank();
1018
+ }
715
1019
  };
716
1020
 
717
1021
  // src/pageObjects/elements/Forms/ListForm.ts
718
1022
  var DATAGRID_HEADER_CSS_SELECTOR = ".dx-datagrid-headers .dx-datagrid-content:not(.dx-datagrid-content-fixed)";
1023
+ var DATAGRID_CONTENT_CSS_SELECTOR = ".dx-datagrid-content:not(.dx-datagrid-content-fixed)";
1024
+ var FIXED_DATAGRID_CONTENT_CSS_SELECTOR = ".dx-fixed-columns .dx-datagrid-content.dx-datagrid-content-fixed";
719
1025
  var ListForm = class extends Form {
720
1026
  headerCssSelector;
1027
+ fixedTableContentCssSelector;
1028
+ tableContentCssSelector;
721
1029
  constructor(driver) {
722
1030
  super(driver);
723
- this.popupContainerCssSelector = `.popup .form-inline-${this.formName}`;
1031
+ this.popupContainerCssSelector = `.popup.form-inline-${this.formName}`;
724
1032
  this.headerCssSelector = DATAGRID_HEADER_CSS_SELECTOR;
1033
+ this.fixedTableContentCssSelector = FIXED_DATAGRID_CONTENT_CSS_SELECTOR;
1034
+ this.tableContentCssSelector = DATAGRID_CONTENT_CSS_SELECTOR;
725
1035
  }
726
1036
  /**
727
1037
  * Находит таблицу
@@ -731,7 +1041,14 @@ var ListForm = class extends Form {
731
1041
  * expect(listForm.table());
732
1042
  */
733
1043
  table() {
734
- return new Table(this.containerCssSelector, this.headerCssSelector, this.formName, this.driver);
1044
+ return new Table(
1045
+ this.containerCssSelector,
1046
+ this.headerCssSelector,
1047
+ this.tableContentCssSelector,
1048
+ this.fixedTableContentCssSelector,
1049
+ this.formName,
1050
+ this.driver
1051
+ );
735
1052
  }
736
1053
  /**
737
1054
  * Находит таблицу