d5-testing-library 1.6.0 → 1.7.0-alpha.1

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.
@@ -0,0 +1,7 @@
1
+ import {
2
+ FormEdit
3
+ } from "./chunk-CKCSBNKD.mjs";
4
+ import "./chunk-JITTN2NY.mjs";
5
+ export {
6
+ FormEdit as default
7
+ };
@@ -0,0 +1,7 @@
1
+ import {
2
+ ListForm
3
+ } from "./chunk-WUPIBFH7.mjs";
4
+ import "./chunk-JITTN2NY.mjs";
5
+ export {
6
+ ListForm as default
7
+ };
@@ -0,0 +1,8 @@
1
+ import {
2
+ TreeView
3
+ } from "./chunk-Q67RHZDP.mjs";
4
+ import "./chunk-WUPIBFH7.mjs";
5
+ import "./chunk-JITTN2NY.mjs";
6
+ export {
7
+ TreeView as default
8
+ };
@@ -3,7 +3,7 @@ import {
3
3
  FormField,
4
4
  click,
5
5
  wait
6
- } from "./chunk-4VLJL7OZ.mjs";
6
+ } from "./chunk-JITTN2NY.mjs";
7
7
 
8
8
  // src/pageObjects/elements/Forms/FormEdit.ts
9
9
  import { By } from "selenium-webdriver";
@@ -721,6 +721,9 @@ function createFilterTestId(formName, itemName, layout) {
721
721
  function createDocFilterTestId(formName, itemName) {
722
722
  return createFilterTestId(formName, itemName, "dock-panel-filter" /* DOCK_PANEL */);
723
723
  }
724
+ function createHeaderFilterTestId(formName, itemName) {
725
+ return createFilterTestId(formName, itemName, "header-filter" /* HEADER_FILTER */);
726
+ }
724
727
  function createLayoutFilterTestId(formName, itemName) {
725
728
  return createFilterTestId(formName, itemName, "layout-filter" /* LAYOUT */);
726
729
  }
@@ -730,6 +733,9 @@ function createTableId(formName) {
730
733
  function createFormButtonTestId(formName, itemName) {
731
734
  return createDataTestId(formName, "button" /* BUTTON */, itemName);
732
735
  }
736
+ function createSubSystemTestId(itemName) {
737
+ return `${"subsystem-item" /* SUBSYSTEM_ITEM */}-${itemName}`;
738
+ }
733
739
 
734
740
  // src/pageObjects/elements/AbstractEditor.ts
735
741
  var AbstractEditor = class extends AbstractElementWithParent {
@@ -806,7 +812,7 @@ var FormField = class extends AbstractEditor {
806
812
  };
807
813
 
808
814
  // src/pageObjects/elements/Forms/Form.ts
809
- import { By as By13 } from "selenium-webdriver";
815
+ import { By as By14 } from "selenium-webdriver";
810
816
 
811
817
  // src/utils/waitElementIsClickable.ts
812
818
  async function waitElementIsClickable({
@@ -881,6 +887,7 @@ var Panel = class extends AbstractGroup {
881
887
  };
882
888
 
883
889
  // src/pageObjects/elements/Groups/TabPanel.ts
890
+ import { By as By12 } from "selenium-webdriver";
884
891
  var TabPanelItem = class extends AbstractGroup {
885
892
  constructor(parentCssSelector, elementCssSelector, driver) {
886
893
  super(parentCssSelector, elementCssSelector, driver);
@@ -888,6 +895,11 @@ var TabPanelItem = class extends AbstractGroup {
888
895
  async click() {
889
896
  await click(await this.getElement(), this.driver);
890
897
  }
898
+ async isActive() {
899
+ const tabPanelItemElement = await this.getElement();
900
+ const grandparentTab = await tabPanelItemElement.findElement(By12.xpath('ancestor::div[@role="tab"][1]'));
901
+ return await grandparentTab.getAttribute("aria-selected") === "true";
902
+ }
891
903
  async getTitle() {
892
904
  return "";
893
905
  }
@@ -902,7 +914,7 @@ var TabPanel = class extends AbstractGroup {
902
914
  };
903
915
 
904
916
  // src/pageObjects/elements/Groups/Accordion/AccordionItem.ts
905
- import { By as By12 } from "selenium-webdriver";
917
+ import { By as By13 } from "selenium-webdriver";
906
918
  var ACCORDION_TITLE_CONTAINER = "accordion-title-container";
907
919
  var AccordionItem = class extends AbstractGroup {
908
920
  constructor(parentCssSelector, elementCssSelector, driver) {
@@ -914,7 +926,7 @@ var AccordionItem = class extends AbstractGroup {
914
926
  }
915
927
  async clickAccordionItemTitle() {
916
928
  const accordionElement = await this.getElement();
917
- const accordTitleElement = await accordionElement.findElement(By12.className(ACCORDION_TITLE_CONTAINER));
929
+ const accordTitleElement = await accordionElement.findElement(By13.className(ACCORDION_TITLE_CONTAINER));
918
930
  await accordTitleElement.click();
919
931
  }
920
932
  async click() {
@@ -1039,6 +1051,13 @@ var FormGroup = class extends AbstractElementWithParent {
1039
1051
  }
1040
1052
  return false;
1041
1053
  }
1054
+ async isActive() {
1055
+ await this.initInstance();
1056
+ if (this.groupInstance instanceof TabPanelItem) {
1057
+ return await this.groupInstance.isActive();
1058
+ }
1059
+ return false;
1060
+ }
1042
1061
  };
1043
1062
 
1044
1063
  // src/pageObjects/elements/Forms/AbstractForm.ts
@@ -1095,15 +1114,15 @@ async function classDependencyInjector(formType) {
1095
1114
  let SubFormFactoryClass;
1096
1115
  switch (formType) {
1097
1116
  case "1" /* LIST */:
1098
- SubFormFactoryClass = (await import("./ListForm-JAFTOUFG.mjs")).default;
1117
+ SubFormFactoryClass = (await import("./ListForm-R7WQIGBI.mjs")).default;
1099
1118
  break;
1100
1119
  case "3" /* TREE */:
1101
- SubFormFactoryClass = (await import("./TreeView-YUECOEFI.mjs")).default;
1120
+ SubFormFactoryClass = (await import("./TreeView-STUAAR65.mjs")).default;
1102
1121
  break;
1103
1122
  case "2" /* EDIT */:
1104
1123
  case "99" /* FREE_FORM */:
1105
1124
  case "4" /* REPORT */:
1106
- SubFormFactoryClass = (await import("./FormEdit-Z2QDWFFG.mjs")).default;
1125
+ SubFormFactoryClass = (await import("./FormEdit-XOCYARDX.mjs")).default;
1107
1126
  break;
1108
1127
  default:
1109
1128
  throw new Error(`Unsupported form type ${formType}`);
@@ -1133,10 +1152,10 @@ var Form = class extends AbstractForm {
1133
1152
  */
1134
1153
  async getTitleText() {
1135
1154
  if (await this.isModal()) {
1136
- const titleEl2 = await this.driver.findElement(By13.css(`${this.popupContainerCssSelector} .popup-title`));
1155
+ const titleEl2 = await this.driver.findElement(By14.css(`${this.popupContainerCssSelector} .popup-title`));
1137
1156
  return titleEl2.getText();
1138
1157
  }
1139
- let titleEl = await this.driver.findElement(By13.className("main-toolbar-form-title"));
1158
+ let titleEl = await this.driver.findElement(By14.className("main-toolbar-form-title"));
1140
1159
  return titleEl.getText();
1141
1160
  }
1142
1161
  setSubFormMode() {
@@ -1154,7 +1173,7 @@ var Form = class extends AbstractForm {
1154
1173
  */
1155
1174
  async subForm(name) {
1156
1175
  const cssSelector = subformCssSelector(this.containerCssSelector, subFormTestId(name));
1157
- const byCssSelector = By13.css(cssSelector);
1176
+ const byCssSelector = By14.css(cssSelector);
1158
1177
  const subFormEl = await this.driver.findElement(byCssSelector);
1159
1178
  await waitElementIsVisible({
1160
1179
  element: subFormEl,
@@ -1189,15 +1208,18 @@ export {
1189
1208
  byTestId,
1190
1209
  readonlyLocator,
1191
1210
  AbstractElementWithParent,
1211
+ TextEditor,
1212
+ NumberEditor,
1213
+ ControlClass,
1214
+ DX_CLEAR_BUTTON_AREA,
1215
+ editorFactory,
1192
1216
  createDocFilterTestId,
1217
+ createHeaderFilterTestId,
1193
1218
  createLayoutFilterTestId,
1194
1219
  createTableId,
1220
+ createSubSystemTestId,
1195
1221
  waitElementIsClickable,
1196
1222
  AbstractButton,
1197
- TextEditor,
1198
- NumberEditor,
1199
- ControlClass,
1200
- editorFactory,
1201
1223
  AbstractEditor,
1202
1224
  FormField,
1203
1225
  Form
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  ListForm
3
- } from "./chunk-3EQV252X.mjs";
3
+ } from "./chunk-WUPIBFH7.mjs";
4
4
 
5
5
  // src/pageObjects/elements/Forms/TreeView.ts
6
6
  var TREELIST_HEADER_CSS_SELECTOR = ".dx-treelist-headers .dx-treelist-content:not(.dx-datagrid-content-fixed)";
@@ -9,12 +9,14 @@ import {
9
9
  byTestIdCssSelector,
10
10
  click,
11
11
  createDocFilterTestId,
12
+ createHeaderFilterTestId,
12
13
  createLayoutFilterTestId,
13
14
  createTableId,
14
15
  fixElementStaleError,
15
16
  wait,
16
- waitElementIsClickable
17
- } from "./chunk-4VLJL7OZ.mjs";
17
+ waitElementIsClickable,
18
+ waitElementIsVisible
19
+ } from "./chunk-JITTN2NY.mjs";
18
20
 
19
21
  // src/pageObjects/elements/Table/Table.ts
20
22
  import { By as By5 } from "selenium-webdriver";
@@ -149,8 +151,9 @@ var Row = class extends AbstractElementWithParent {
149
151
  const buttonCssSelector = `.${DX_DATA_ROW_CLASS}[aria-rowindex="${transformInputIndex(
150
152
  this.index
151
153
  )}"] .${buttonClass}`;
152
- const button = await this.driver.findElement(
153
- By3.css(`${this.parentCssSelector} ${FIXED_TABLE_CSS_SELECTOR} ${buttonCssSelector}`)
154
+ const button = await fixElementStaleError(
155
+ By3.css(`${this.parentCssSelector} ${FIXED_TABLE_CSS_SELECTOR} ${buttonCssSelector}`),
156
+ this.driver
154
157
  );
155
158
  return click(button, this.driver);
156
159
  }
@@ -595,6 +598,122 @@ var FilterPanel = class extends AbstractElement {
595
598
  }
596
599
  };
597
600
 
601
+ // src/pageObjects/elements/Filters/ColumnFilter.ts
602
+ import { By as By8 } from "selenium-webdriver";
603
+
604
+ // src/pageObjects/elements/Filters/HeaderFilterField.ts
605
+ var HeaderFilterField = class extends AbstractEditor {
606
+ constructor(parentCssSelector, formName, name, driver) {
607
+ super(parentCssSelector, byTestIdCssSelector(createHeaderFilterTestId(formName, name)), driver);
608
+ }
609
+ async getValue() {
610
+ return super.getValue();
611
+ }
612
+ async setValue(value) {
613
+ return super.setValue(value);
614
+ }
615
+ async clear() {
616
+ return super.clear();
617
+ }
618
+ async remove(itemText) {
619
+ return super.remove(itemText);
620
+ }
621
+ };
622
+
623
+ // src/pageObjects/elements/Filters/ColumnFilter.ts
624
+ var APPLY_SELECTOR = ".apply-button";
625
+ var CANCEL_SELECTOR = ".cancel-button";
626
+ var HEADER_FILTER_ICON = ".dx-column-indicators .dx-header-filter";
627
+ var HEADER_FILTER_CONTAINER = ".header-filter";
628
+ var HEADER_FILTER_BUTTONS = ".header-filter-buttons";
629
+ var ColumnFilter = class extends AbstractElement {
630
+ _formName;
631
+ _name;
632
+ _column;
633
+ constructor(formName, name, column, driver) {
634
+ super(driver, HEADER_FILTER_CONTAINER);
635
+ this._formName = formName;
636
+ this._name = name;
637
+ this._column = column;
638
+ this.driver = driver;
639
+ }
640
+ async getApplyButton() {
641
+ const selector = `${HEADER_FILTER_CONTAINER} ${HEADER_FILTER_BUTTONS} ${APPLY_SELECTOR}`;
642
+ return this.driver.findElement(By8.css(selector));
643
+ }
644
+ async getCancelButton() {
645
+ const selector = `${HEADER_FILTER_CONTAINER} ${HEADER_FILTER_BUTTONS} ${CANCEL_SELECTOR}`;
646
+ return this.driver.findElement(By8.css(selector));
647
+ }
648
+ async apply() {
649
+ const btn = await this.getApplyButton();
650
+ await click(btn, this.driver);
651
+ }
652
+ async cancel() {
653
+ const btn = await this.getCancelButton();
654
+ await click(btn, this.driver);
655
+ }
656
+ async initFilter() {
657
+ const columnEl = await this._column.getElement();
658
+ const actions = this.driver.actions({ async: true });
659
+ 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
+ });
667
+ if (!headerFilterIcon)
668
+ throw new Error(`HeaderFilter "${this._name}" is not visible`);
669
+ await headerFilterIcon.click();
670
+ return new HeaderFilterField("", this._formName, this._name, this.driver);
671
+ }
672
+ /**
673
+ * Возвращает значение в поле
674
+ * @example
675
+ * expect(await form.columnFilter('NumberFld').getValue()).toBe(10);
676
+ * expect(await form.columnFilter('TextFld').getValue()).toBe('TestValue');
677
+ */
678
+ async getValue() {
679
+ const filter = await this.initFilter();
680
+ const result = await filter.getValue();
681
+ await this.cancel();
682
+ return result;
683
+ }
684
+ /**
685
+ * Устанавливает значение в поле
686
+ * @example
687
+ * await form.columnFilter('NumberFld').setValue(123);
688
+ * await form.columnFilter('TextFld').setValue('TestValue');
689
+ */
690
+ async setValue(value) {
691
+ const filter = await this.initFilter();
692
+ await filter.setValue(value);
693
+ return this.apply();
694
+ }
695
+ /**
696
+ * Очищает значение в поле
697
+ * @example
698
+ * await form.columnFilter('NumberFld').clear();
699
+ */
700
+ async clear() {
701
+ const filter = await this.initFilter();
702
+ await filter.clear();
703
+ return this.apply();
704
+ }
705
+ /**
706
+ * Удаляет тег по переданному тексту
707
+ * @example
708
+ * await form.columnFilter('TagBox').remove('test');
709
+ */
710
+ async remove(itemText) {
711
+ const filter = await this.initFilter();
712
+ await filter.remove(itemText);
713
+ return this.apply();
714
+ }
715
+ };
716
+
598
717
  // src/pageObjects/elements/Forms/ListForm.ts
599
718
  var DATAGRID_HEADER_CSS_SELECTOR = ".dx-datagrid-headers .dx-datagrid-content:not(.dx-datagrid-content-fixed)";
600
719
  var ListForm = class extends Form {
@@ -635,6 +754,10 @@ var ListForm = class extends Form {
635
754
  formFilter(name) {
636
755
  return new FormFilterField(this.containerCssSelector, this.formName, name, this.driver);
637
756
  }
757
+ columnFilter(name) {
758
+ const column = this.table().getColumnByName(name);
759
+ return new ColumnFilter(this.formName, name, column, this.driver);
760
+ }
638
761
  /**
639
762
  * Модель панели фильтрации
640
763
  * @returns {FilterPanel}