d5-testing-library 1.5.0 → 1.6.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.
@@ -0,0 +1,7 @@
1
+ import {
2
+ FormEdit
3
+ } from "./chunk-PNSQQKEY.mjs";
4
+ import "./chunk-4VLJL7OZ.mjs";
5
+ export {
6
+ FormEdit as default
7
+ };
@@ -0,0 +1,7 @@
1
+ import {
2
+ ListForm
3
+ } from "./chunk-3EQV252X.mjs";
4
+ import "./chunk-4VLJL7OZ.mjs";
5
+ export {
6
+ ListForm as default
7
+ };
@@ -0,0 +1,8 @@
1
+ import {
2
+ TreeView
3
+ } from "./chunk-CFJ5JWM7.mjs";
4
+ import "./chunk-3EQV252X.mjs";
5
+ import "./chunk-4VLJL7OZ.mjs";
6
+ export {
7
+ TreeView as default
8
+ };
@@ -14,7 +14,7 @@ import {
14
14
  fixElementStaleError,
15
15
  wait,
16
16
  waitElementIsClickable
17
- } from "./chunk-VWNH6HVN.mjs";
17
+ } from "./chunk-4VLJL7OZ.mjs";
18
18
 
19
19
  // src/pageObjects/elements/Table/Table.ts
20
20
  import { By as By5 } from "selenium-webdriver";
@@ -420,8 +420,7 @@ var TagBox = class extends AbstractDXEditorWithInput {
420
420
  await this.confirmSelection();
421
421
  }
422
422
  async waitOptionSelection() {
423
- const option = await this.driver.findElement(By6.css(TAG_BOX_LIST_ITEM_SELECTOR));
424
- await wait(() => option.isDisplayed(), this.driver);
423
+ await fixElementStaleError(By6.css(TAG_BOX_LIST_ITEM_SELECTOR), this.driver);
425
424
  }
426
425
  async selectOption(inputEl, value, lastElement) {
427
426
  try {
@@ -436,7 +435,7 @@ var TagBox = class extends AbstractDXEditorWithInput {
436
435
  }
437
436
  }
438
437
  async confirmSelection() {
439
- const btnOk = await this.driver.findElement(By6.css(BTN_OK_SELECTOR));
438
+ const btnOk = await fixElementStaleError(By6.css(BTN_OK_SELECTOR), this.driver);
440
439
  await click(btnOk, this.driver);
441
440
  }
442
441
  async getTagBoxInputValue() {
@@ -881,19 +880,73 @@ var AbstractGroup = class extends AbstractElementWithParent {
881
880
  var Panel = class extends AbstractGroup {
882
881
  };
883
882
 
884
- // src/pageObjects/elements/Groups/TabPanel/TabPanel.ts
885
- import { By as By12 } from "selenium-webdriver";
886
- var getTabTestIdByName = (name) => `tab-caption-${name}`;
883
+ // src/pageObjects/elements/Groups/TabPanel.ts
884
+ var TabPanelItem = class extends AbstractGroup {
885
+ constructor(parentCssSelector, elementCssSelector, driver) {
886
+ super(parentCssSelector, elementCssSelector, driver);
887
+ }
888
+ async click() {
889
+ await click(await this.getElement(), this.driver);
890
+ }
891
+ async getTitle() {
892
+ return "";
893
+ }
894
+ };
887
895
  var TabPanel = class extends AbstractGroup {
896
+ item(name) {
897
+ return new TabPanelItem(this.getFullCssSelector(), `.tab-panel-item[data-groupname="${name}"]`, this.driver);
898
+ }
899
+ async getTitle() {
900
+ return "";
901
+ }
902
+ };
903
+
904
+ // src/pageObjects/elements/Groups/Accordion/AccordionItem.ts
905
+ import { By as By12 } from "selenium-webdriver";
906
+ var ACCORDION_TITLE_CONTAINER = "accordion-title-container";
907
+ var AccordionItem = class extends AbstractGroup {
888
908
  constructor(parentCssSelector, elementCssSelector, driver) {
889
909
  super(parentCssSelector, elementCssSelector, driver);
890
910
  }
891
- _getTab(name) {
892
- return this.driver.findElement(By12.css(`${this.getFullCssSelector()} ${byTestIdCssSelector(getTabTestIdByName(name))}`));
911
+ async getDataOpenedAccordItemAttr() {
912
+ const accordionElement = await this.getElement();
913
+ return await accordionElement.getAttribute("data-opened");
914
+ }
915
+ async clickAccordionItemTitle() {
916
+ const accordionElement = await this.getElement();
917
+ const accordTitleElement = await accordionElement.findElement(By12.className(ACCORDION_TITLE_CONTAINER));
918
+ await accordTitleElement.click();
919
+ }
920
+ async click() {
921
+ await click(await this.getElement(), this.driver);
922
+ }
923
+ async isExpanded() {
924
+ const dataOpened = await this.getDataOpenedAccordItemAttr();
925
+ return dataOpened === "true";
926
+ }
927
+ async isCollapsed() {
928
+ const dataOpened = await this.getDataOpenedAccordItemAttr();
929
+ return dataOpened === "false" || !dataOpened;
930
+ }
931
+ async expand() {
932
+ if (!await this.isExpanded()) {
933
+ await this.clickAccordionItemTitle();
934
+ }
935
+ }
936
+ async collapse() {
937
+ if (await this.isExpanded()) {
938
+ await this.clickAccordionItemTitle();
939
+ }
940
+ }
941
+ };
942
+
943
+ // src/pageObjects/elements/Groups/Accordion/Accordion.ts
944
+ var Accordion = class extends AbstractGroup {
945
+ constructor(parentCssSelector, elementCssSelector, driver) {
946
+ super(parentCssSelector, elementCssSelector, driver);
893
947
  }
894
- async tabClick(name) {
895
- const tabEl = this._getTab(name);
896
- await tabEl.click();
948
+ item(name) {
949
+ return new AccordionItem(this.getFullCssSelector(), `.d5-accordion-item[data-groupname="${name}"]`, this.driver);
897
950
  }
898
951
  };
899
952
 
@@ -903,20 +956,26 @@ var groupFactory = async (parentCssSelector, elementCssSelector, driver) => {
903
956
  const classSting = await elementInstance.getClasses();
904
957
  if (classSting.includes("tab-panel-group"))
905
958
  return new TabPanel(parentCssSelector, elementCssSelector, driver);
959
+ if (classSting.includes("tab-panel-item"))
960
+ return new TabPanelItem(parentCssSelector, elementCssSelector, driver);
906
961
  if (classSting.includes("panel-group"))
907
962
  return new Panel(parentCssSelector, elementCssSelector, driver);
963
+ if (classSting.includes("accordion-group"))
964
+ return new Accordion(parentCssSelector, elementCssSelector, driver);
965
+ if (classSting.includes("d5-accordion-item"))
966
+ return new AccordionItem(parentCssSelector, elementCssSelector, driver);
908
967
  throw new Error("Unknown type of group. Please write ticket to the support");
909
968
  };
910
969
 
911
970
  // src/pageObjects/elements/FormGroup.ts
912
971
  var FormGroup = class extends AbstractElementWithParent {
913
- editor;
972
+ groupInstance;
914
973
  constructor(parentCssSelector, formName, name, driver) {
915
974
  super(parentCssSelector, byTestIdCssSelector(createGroupTestId(formName, name)), driver);
916
975
  }
917
- async initEditor() {
918
- if (!this.editor) {
919
- this.editor = await groupFactory(this.parentCssSelector, this.elementCssSelector, this.driver);
976
+ async initInstance() {
977
+ if (!this.groupInstance) {
978
+ this.groupInstance = await groupFactory(this.parentCssSelector, this.elementCssSelector, this.driver);
920
979
  }
921
980
  }
922
981
  /**
@@ -926,20 +985,59 @@ var FormGroup = class extends AbstractElementWithParent {
926
985
  */
927
986
  async isDisplayed() {
928
987
  try {
929
- await this.initEditor();
930
- return this.editor.isDisplayed();
988
+ await this.initInstance();
989
+ return this.groupInstance.isDisplayed();
931
990
  } catch {
932
991
  return false;
933
992
  }
934
993
  }
935
994
  /**
936
- * Происходит клик по табе
995
+ * Клик по элементам группы.
996
+ * Метод работает если у группы есть дочерние элементы, например элементы аккордеона или вкладки таб панели.
937
997
  * @example
938
- * expect(await tableList.group('TabPanel').tabClick(tabName);
998
+ * expect(await tableList.group('TabPanel').itemClick('Tab');
999
+ * expect(await tableList.group('Accordion').itemClick('AccordionItem');
939
1000
  */
940
- async tabClick(name) {
941
- await this.initEditor();
942
- await this.editor.tabClick(name);
1001
+ async itemClick(name) {
1002
+ await this.initInstance();
1003
+ const item = this.groupInstance.item?.(name);
1004
+ await item?.click();
1005
+ }
1006
+ /**
1007
+ * Метод работает если группа - это элемент аккордеона или вкладка таб панели
1008
+ * @example
1009
+ * expect(await tableList.group('Tab').click();
1010
+ * expect(await tableList.group('AccordionItem').click();
1011
+ */
1012
+ async click() {
1013
+ await this.initInstance();
1014
+ await this.groupInstance.click?.();
1015
+ }
1016
+ async collapse() {
1017
+ await this.initInstance();
1018
+ if (this.groupInstance instanceof AccordionItem) {
1019
+ await this.groupInstance.collapse();
1020
+ }
1021
+ }
1022
+ async expand() {
1023
+ await this.initInstance();
1024
+ if (this.groupInstance instanceof AccordionItem) {
1025
+ await this.groupInstance.expand();
1026
+ }
1027
+ }
1028
+ async isExpanded() {
1029
+ await this.initInstance();
1030
+ if (this.groupInstance instanceof AccordionItem) {
1031
+ return await this.groupInstance.isExpanded();
1032
+ }
1033
+ return false;
1034
+ }
1035
+ async isCollapsed() {
1036
+ await this.initInstance();
1037
+ if (this.groupInstance instanceof AccordionItem) {
1038
+ return await this.groupInstance.isCollapsed();
1039
+ }
1040
+ return false;
943
1041
  }
944
1042
  };
945
1043
 
@@ -997,15 +1095,15 @@ async function classDependencyInjector(formType) {
997
1095
  let SubFormFactoryClass;
998
1096
  switch (formType) {
999
1097
  case "1" /* LIST */:
1000
- SubFormFactoryClass = (await import("./ListForm-HDVXB6CG.mjs")).default;
1098
+ SubFormFactoryClass = (await import("./ListForm-JAFTOUFG.mjs")).default;
1001
1099
  break;
1002
1100
  case "3" /* TREE */:
1003
- SubFormFactoryClass = (await import("./TreeView-DE5RBMDD.mjs")).default;
1101
+ SubFormFactoryClass = (await import("./TreeView-YUECOEFI.mjs")).default;
1004
1102
  break;
1005
1103
  case "2" /* EDIT */:
1006
1104
  case "99" /* FREE_FORM */:
1007
1105
  case "4" /* REPORT */:
1008
- SubFormFactoryClass = (await import("./FormEdit-MZJH5R5H.mjs")).default;
1106
+ SubFormFactoryClass = (await import("./FormEdit-Z2QDWFFG.mjs")).default;
1009
1107
  break;
1010
1108
  default:
1011
1109
  throw new Error(`Unsupported form type ${formType}`);
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  ListForm
3
- } from "./chunk-NWWYF43G.mjs";
3
+ } from "./chunk-3EQV252X.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)";
@@ -3,7 +3,7 @@ import {
3
3
  FormField,
4
4
  click,
5
5
  wait
6
- } from "./chunk-VWNH6HVN.mjs";
6
+ } from "./chunk-4VLJL7OZ.mjs";
7
7
 
8
8
  // src/pageObjects/elements/Forms/FormEdit.ts
9
9
  import { By } from "selenium-webdriver";
@@ -438,25 +438,95 @@ var init_Panel = __esm({
438
438
  }
439
439
  });
440
440
 
441
- // src/pageObjects/elements/Groups/TabPanel/TabPanel.ts
442
- var import_selenium_webdriver8, getTabTestIdByName, TabPanel;
441
+ // src/pageObjects/elements/Groups/TabPanel.ts
442
+ var TabPanelItem, TabPanel;
443
443
  var init_TabPanel = __esm({
444
- "src/pageObjects/elements/Groups/TabPanel/TabPanel.ts"() {
444
+ "src/pageObjects/elements/Groups/TabPanel.ts"() {
445
445
  "use strict";
446
446
  init_AbstractGroup();
447
- import_selenium_webdriver8 = require("selenium-webdriver");
448
- init_locators();
449
- getTabTestIdByName = (name) => `tab-caption-${name}`;
447
+ init_actions();
448
+ TabPanelItem = class extends AbstractGroup {
449
+ constructor(parentCssSelector, elementCssSelector, driver) {
450
+ super(parentCssSelector, elementCssSelector, driver);
451
+ }
452
+ async click() {
453
+ await click(await this.getElement(), this.driver);
454
+ }
455
+ async getTitle() {
456
+ return "";
457
+ }
458
+ };
450
459
  TabPanel = class extends AbstractGroup {
460
+ item(name) {
461
+ return new TabPanelItem(this.getFullCssSelector(), `.tab-panel-item[data-groupname="${name}"]`, this.driver);
462
+ }
463
+ async getTitle() {
464
+ return "";
465
+ }
466
+ };
467
+ }
468
+ });
469
+
470
+ // src/pageObjects/elements/Groups/Accordion/AccordionItem.ts
471
+ var import_selenium_webdriver8, ACCORDION_TITLE_CONTAINER, AccordionItem;
472
+ var init_AccordionItem = __esm({
473
+ "src/pageObjects/elements/Groups/Accordion/AccordionItem.ts"() {
474
+ "use strict";
475
+ init_AbstractGroup();
476
+ import_selenium_webdriver8 = require("selenium-webdriver");
477
+ init_actions();
478
+ ACCORDION_TITLE_CONTAINER = "accordion-title-container";
479
+ AccordionItem = class extends AbstractGroup {
451
480
  constructor(parentCssSelector, elementCssSelector, driver) {
452
481
  super(parentCssSelector, elementCssSelector, driver);
453
482
  }
454
- _getTab(name) {
455
- return this.driver.findElement(import_selenium_webdriver8.By.css(`${this.getFullCssSelector()} ${byTestIdCssSelector(getTabTestIdByName(name))}`));
483
+ async getDataOpenedAccordItemAttr() {
484
+ const accordionElement = await this.getElement();
485
+ return await accordionElement.getAttribute("data-opened");
456
486
  }
457
- async tabClick(name) {
458
- const tabEl = this._getTab(name);
459
- await tabEl.click();
487
+ async clickAccordionItemTitle() {
488
+ const accordionElement = await this.getElement();
489
+ const accordTitleElement = await accordionElement.findElement(import_selenium_webdriver8.By.className(ACCORDION_TITLE_CONTAINER));
490
+ await accordTitleElement.click();
491
+ }
492
+ async click() {
493
+ await click(await this.getElement(), this.driver);
494
+ }
495
+ async isExpanded() {
496
+ const dataOpened = await this.getDataOpenedAccordItemAttr();
497
+ return dataOpened === "true";
498
+ }
499
+ async isCollapsed() {
500
+ const dataOpened = await this.getDataOpenedAccordItemAttr();
501
+ return dataOpened === "false" || !dataOpened;
502
+ }
503
+ async expand() {
504
+ if (!await this.isExpanded()) {
505
+ await this.clickAccordionItemTitle();
506
+ }
507
+ }
508
+ async collapse() {
509
+ if (await this.isExpanded()) {
510
+ await this.clickAccordionItemTitle();
511
+ }
512
+ }
513
+ };
514
+ }
515
+ });
516
+
517
+ // src/pageObjects/elements/Groups/Accordion/Accordion.ts
518
+ var Accordion;
519
+ var init_Accordion = __esm({
520
+ "src/pageObjects/elements/Groups/Accordion/Accordion.ts"() {
521
+ "use strict";
522
+ init_AbstractGroup();
523
+ init_AccordionItem();
524
+ Accordion = class extends AbstractGroup {
525
+ constructor(parentCssSelector, elementCssSelector, driver) {
526
+ super(parentCssSelector, elementCssSelector, driver);
527
+ }
528
+ item(name) {
529
+ return new AccordionItem(this.getFullCssSelector(), `.d5-accordion-item[data-groupname="${name}"]`, this.driver);
460
530
  }
461
531
  };
462
532
  }
@@ -470,13 +540,21 @@ var init_groupFactory = __esm({
470
540
  init_AbstractFormElement();
471
541
  init_Panel();
472
542
  init_TabPanel();
543
+ init_Accordion();
544
+ init_AccordionItem();
473
545
  groupFactory = async (parentCssSelector, elementCssSelector, driver) => {
474
546
  const elementInstance = new AbstractFormElement(parentCssSelector, elementCssSelector, driver);
475
547
  const classSting = await elementInstance.getClasses();
476
548
  if (classSting.includes("tab-panel-group"))
477
549
  return new TabPanel(parentCssSelector, elementCssSelector, driver);
550
+ if (classSting.includes("tab-panel-item"))
551
+ return new TabPanelItem(parentCssSelector, elementCssSelector, driver);
478
552
  if (classSting.includes("panel-group"))
479
553
  return new Panel(parentCssSelector, elementCssSelector, driver);
554
+ if (classSting.includes("accordion-group"))
555
+ return new Accordion(parentCssSelector, elementCssSelector, driver);
556
+ if (classSting.includes("d5-accordion-item"))
557
+ return new AccordionItem(parentCssSelector, elementCssSelector, driver);
480
558
  throw new Error("Unknown type of group. Please write ticket to the support");
481
559
  };
482
560
  }
@@ -491,14 +569,15 @@ var init_FormGroup = __esm({
491
569
  init_locators();
492
570
  init_createDataTestId();
493
571
  init_groupFactory();
572
+ init_AccordionItem();
494
573
  FormGroup = class extends AbstractElementWithParent {
495
- editor;
574
+ groupInstance;
496
575
  constructor(parentCssSelector, formName, name, driver) {
497
576
  super(parentCssSelector, byTestIdCssSelector(createGroupTestId(formName, name)), driver);
498
577
  }
499
- async initEditor() {
500
- if (!this.editor) {
501
- this.editor = await groupFactory(this.parentCssSelector, this.elementCssSelector, this.driver);
578
+ async initInstance() {
579
+ if (!this.groupInstance) {
580
+ this.groupInstance = await groupFactory(this.parentCssSelector, this.elementCssSelector, this.driver);
502
581
  }
503
582
  }
504
583
  /**
@@ -508,20 +587,59 @@ var init_FormGroup = __esm({
508
587
  */
509
588
  async isDisplayed() {
510
589
  try {
511
- await this.initEditor();
512
- return this.editor.isDisplayed();
590
+ await this.initInstance();
591
+ return this.groupInstance.isDisplayed();
513
592
  } catch {
514
593
  return false;
515
594
  }
516
595
  }
517
596
  /**
518
- * Происходит клик по табе
597
+ * Клик по элементам группы.
598
+ * Метод работает если у группы есть дочерние элементы, например элементы аккордеона или вкладки таб панели.
519
599
  * @example
520
- * expect(await tableList.group('TabPanel').tabClick(tabName);
600
+ * expect(await tableList.group('TabPanel').itemClick('Tab');
601
+ * expect(await tableList.group('Accordion').itemClick('AccordionItem');
521
602
  */
522
- async tabClick(name) {
523
- await this.initEditor();
524
- await this.editor.tabClick(name);
603
+ async itemClick(name) {
604
+ await this.initInstance();
605
+ const item = this.groupInstance.item?.(name);
606
+ await item?.click();
607
+ }
608
+ /**
609
+ * Метод работает если группа - это элемент аккордеона или вкладка таб панели
610
+ * @example
611
+ * expect(await tableList.group('Tab').click();
612
+ * expect(await tableList.group('AccordionItem').click();
613
+ */
614
+ async click() {
615
+ await this.initInstance();
616
+ await this.groupInstance.click?.();
617
+ }
618
+ async collapse() {
619
+ await this.initInstance();
620
+ if (this.groupInstance instanceof AccordionItem) {
621
+ await this.groupInstance.collapse();
622
+ }
623
+ }
624
+ async expand() {
625
+ await this.initInstance();
626
+ if (this.groupInstance instanceof AccordionItem) {
627
+ await this.groupInstance.expand();
628
+ }
629
+ }
630
+ async isExpanded() {
631
+ await this.initInstance();
632
+ if (this.groupInstance instanceof AccordionItem) {
633
+ return await this.groupInstance.isExpanded();
634
+ }
635
+ return false;
636
+ }
637
+ async isCollapsed() {
638
+ await this.initInstance();
639
+ if (this.groupInstance instanceof AccordionItem) {
640
+ return await this.groupInstance.isCollapsed();
641
+ }
642
+ return false;
525
643
  }
526
644
  };
527
645
  }
@@ -1131,7 +1249,7 @@ var init_TagBox = __esm({
1131
1249
  init_locators();
1132
1250
  init_SelectBoxEditor();
1133
1251
  init_ClearButtonStrategy();
1134
- init_wait();
1252
+ init_fixElementStaleError();
1135
1253
  TAGS_SELECTOR = ".dx-tag .tag-text";
1136
1254
  DX_TAG_CONTAINER = "dx-tag-container";
1137
1255
  DX_TEXTEDITOR_EMPTY2 = "dx-texteditor-empty";
@@ -1152,8 +1270,7 @@ var init_TagBox = __esm({
1152
1270
  await this.confirmSelection();
1153
1271
  }
1154
1272
  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);
1273
+ await fixElementStaleError(import_selenium_webdriver16.By.css(TAG_BOX_LIST_ITEM_SELECTOR), this.driver);
1157
1274
  }
1158
1275
  async selectOption(inputEl, value, lastElement) {
1159
1276
  try {
@@ -1168,7 +1285,7 @@ var init_TagBox = __esm({
1168
1285
  }
1169
1286
  }
1170
1287
  async confirmSelection() {
1171
- const btnOk = await this.driver.findElement(import_selenium_webdriver16.By.css(BTN_OK_SELECTOR));
1288
+ const btnOk = await fixElementStaleError(import_selenium_webdriver16.By.css(BTN_OK_SELECTOR), this.driver);
1172
1289
  await click(btnOk, this.driver);
1173
1290
  }
1174
1291
  async getTagBoxInputValue() {
@@ -2346,6 +2463,7 @@ __export(src_exports, {
2346
2463
  LoginPage: () => LoginPage,
2347
2464
  NumberEditor: () => NumberEditor,
2348
2465
  PanelFilterField: () => PanelFilterField,
2466
+ ReportForm: () => ReportForm,
2349
2467
  SubsystemsPanel: () => SubsystemsPanel,
2350
2468
  TextEditor: () => TextEditor,
2351
2469
  TreeView: () => TreeView,
@@ -2479,6 +2597,29 @@ var SubsystemsPanel = class extends AbstractElement {
2479
2597
  init_FormEdit();
2480
2598
  init_ListForm();
2481
2599
  init_TreeView();
2600
+
2601
+ // src/pageObjects/elements/Forms/ReportForm.ts
2602
+ var import_selenium_webdriver26 = require("selenium-webdriver");
2603
+ init_FormEdit();
2604
+ var ReportForm = class extends FormEdit {
2605
+ constructor(driver) {
2606
+ super(driver);
2607
+ this.popupContainerCssSelector = `.popup .form-report-${this.formName}`;
2608
+ this.saveButtonBy = import_selenium_webdriver26.By.id("button-apply");
2609
+ }
2610
+ /**
2611
+ * Знаходить поле/фільтр у формі репорту за ім'ям
2612
+ * @example
2613
+ * const formReport = new MyForm();
2614
+ * //...
2615
+ * expect(await formReport.filterField('Name').getValue()).toBe('test value');
2616
+ */
2617
+ filterField(name) {
2618
+ return super.field(name);
2619
+ }
2620
+ };
2621
+
2622
+ // src/index.ts
2482
2623
  init_Editors();
2483
2624
  init_FormField();
2484
2625
  init_FormFilterField();
@@ -2487,7 +2628,7 @@ init_FilterPanel();
2487
2628
 
2488
2629
  // src/pageObjects/elements/Dialog.ts
2489
2630
  init_AbstractElement();
2490
- var import_selenium_webdriver26 = require("selenium-webdriver");
2631
+ var import_selenium_webdriver27 = require("selenium-webdriver");
2491
2632
  init_AbstractButton();
2492
2633
  var DIALOG_CLASS = ".d5-dialog";
2493
2634
  var DIALOG_TITLE_CLASS = ".dialog__title";
@@ -2502,7 +2643,7 @@ var DialogButton = class extends AbstractButton {
2502
2643
  }
2503
2644
  async getElement() {
2504
2645
  const panel = await super.getElement();
2505
- return panel.findElement(import_selenium_webdriver26.By.xpath(buttonByTextXpath2(this.text)));
2646
+ return panel.findElement(import_selenium_webdriver27.By.xpath(buttonByTextXpath2(this.text)));
2506
2647
  }
2507
2648
  buttonNotDisplayedError() {
2508
2649
  return `Dialog button ${this.text} cannot be clicked. It is not displayed or it is disabled`;
@@ -2522,11 +2663,11 @@ var Dialog = class extends AbstractElement {
2522
2663
  return this.joinRelativeCssSelectors([DIALOG_CLASS, DIALOG_BUTTONS_PANEL_CLASS]);
2523
2664
  }
2524
2665
  async title() {
2525
- const el = await this.driver.findElement(import_selenium_webdriver26.By.css(this.titleSelector));
2666
+ const el = await this.driver.findElement(import_selenium_webdriver27.By.css(this.titleSelector));
2526
2667
  return await el.getText();
2527
2668
  }
2528
2669
  async text() {
2529
- const el = await this.driver.findElement(import_selenium_webdriver26.By.css(this.textSelector));
2670
+ const el = await this.driver.findElement(import_selenium_webdriver27.By.css(this.textSelector));
2530
2671
  return await el.getText();
2531
2672
  }
2532
2673
  button(text) {
@@ -2546,6 +2687,7 @@ var Dialog = class extends AbstractElement {
2546
2687
  LoginPage,
2547
2688
  NumberEditor,
2548
2689
  PanelFilterField,
2690
+ ReportForm,
2549
2691
  SubsystemsPanel,
2550
2692
  TextEditor,
2551
2693
  TreeView,
@@ -154,15 +154,18 @@ declare class FormButton extends DXButton {
154
154
  protected buttonNotDisplayedError(): string;
155
155
  }
156
156
 
157
- interface Group {
157
+ interface Group<TItem = unknown> {
158
158
  isDisplayed(): Promise<boolean>;
159
- tabClick(name: string): Promise<void>;
159
+ click?(): Promise<void>;
160
+ itemClick?(name: string): Promise<void>;
161
+ item?(name: string): TItem;
162
+ accordionClick?(): Promise<void>;
160
163
  }
161
164
 
162
165
  declare class FormGroup extends AbstractElementWithParent implements Group {
163
- editor: Group;
166
+ private groupInstance;
164
167
  constructor(parentCssSelector: string, formName: string, name: string, driver?: WebDriver);
165
- private initEditor;
168
+ private initInstance;
166
169
  /**
167
170
  * Возвращает булевое значение доступна ли группа
168
171
  * @example
@@ -170,11 +173,24 @@ declare class FormGroup extends AbstractElementWithParent implements Group {
170
173
  */
171
174
  isDisplayed(): Promise<boolean>;
172
175
  /**
173
- * Происходит клик по табе
176
+ * Клик по элементам группы.
177
+ * Метод работает если у группы есть дочерние элементы, например элементы аккордеона или вкладки таб панели.
174
178
  * @example
175
- * expect(await tableList.group('TabPanel').tabClick(tabName);
179
+ * expect(await tableList.group('TabPanel').itemClick('Tab');
180
+ * expect(await tableList.group('Accordion').itemClick('AccordionItem');
176
181
  */
177
- tabClick(name: string): Promise<void>;
182
+ itemClick(name: string): Promise<void>;
183
+ /**
184
+ * Метод работает если группа - это элемент аккордеона или вкладка таб панели
185
+ * @example
186
+ * expect(await tableList.group('Tab').click();
187
+ * expect(await tableList.group('AccordionItem').click();
188
+ */
189
+ click(): Promise<void>;
190
+ collapse(): Promise<void>;
191
+ expand(): Promise<void>;
192
+ isExpanded(): Promise<boolean>;
193
+ isCollapsed(): Promise<boolean>;
178
194
  }
179
195
 
180
196
  declare class AbstractForm extends AbstractPage {
@@ -586,6 +602,18 @@ declare class TreeView extends ListForm {
586
602
  constructor(driver: WebDriver);
587
603
  }
588
604
 
605
+ declare class ReportForm extends FormEdit {
606
+ constructor(driver: WebDriver);
607
+ /**
608
+ * Знаходить поле/фільтр у формі репорту за ім'ям
609
+ * @example
610
+ * const formReport = new MyForm();
611
+ * //...
612
+ * expect(await formReport.filterField('Name').getValue()).toBe('test value');
613
+ */
614
+ filterField(name: string): FormField;
615
+ }
616
+
589
617
  declare class DialogButton extends AbstractButton implements Button {
590
618
  private readonly text;
591
619
  constructor(parentCssSelector: string, text: string, driver?: WebDriver);
@@ -602,4 +630,4 @@ declare class Dialog extends AbstractElement {
602
630
  button(text: string): DialogButton;
603
631
  }
604
632
 
605
- export { AbstractPage, ControlClass, Dialog, Editor, FilterPanel, FormEdit, FormField, FormFilterField, ListForm, LoginPage, NumberEditor, PanelFilterField, SubsystemsPanel, TextEditor, TreeView, byTestId, byTestIdCssSelector, click, config, createDriver, editorFactory, elementIsNotPresent, readonlyLocator, signIn, wait, waitElementIsVisible };
633
+ export { AbstractPage, ControlClass, Dialog, Editor, FilterPanel, FormEdit, FormField, FormFilterField, ListForm, LoginPage, NumberEditor, PanelFilterField, ReportForm, SubsystemsPanel, TextEditor, TreeView, byTestId, byTestIdCssSelector, click, config, createDriver, editorFactory, elementIsNotPresent, readonlyLocator, signIn, wait, waitElementIsVisible };
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  TreeView
3
- } from "./chunk-44JIUIEW.mjs";
3
+ } from "./chunk-CFJ5JWM7.mjs";
4
4
  import {
5
5
  FilterPanel,
6
6
  FormFilterField,
7
7
  ListForm,
8
8
  PanelFilterField
9
- } from "./chunk-NWWYF43G.mjs";
9
+ } from "./chunk-3EQV252X.mjs";
10
10
  import {
11
11
  FormEdit
12
- } from "./chunk-FP26UOTI.mjs";
12
+ } from "./chunk-PNSQQKEY.mjs";
13
13
  import {
14
14
  AbstractButton,
15
15
  AbstractElement,
@@ -27,7 +27,7 @@ import {
27
27
  readonlyLocator,
28
28
  wait,
29
29
  waitElementIsVisible
30
- } from "./chunk-VWNH6HVN.mjs";
30
+ } from "./chunk-4VLJL7OZ.mjs";
31
31
 
32
32
  // src/pageObjects/pages/LoginPage.ts
33
33
  var LOGIN_PATH = "/login";
@@ -116,8 +116,28 @@ var SubsystemsPanel = class extends AbstractElement {
116
116
  }
117
117
  };
118
118
 
119
- // src/pageObjects/elements/Dialog.ts
119
+ // src/pageObjects/elements/Forms/ReportForm.ts
120
120
  import { By as By3 } from "selenium-webdriver";
121
+ var ReportForm = class extends FormEdit {
122
+ constructor(driver) {
123
+ super(driver);
124
+ this.popupContainerCssSelector = `.popup .form-report-${this.formName}`;
125
+ this.saveButtonBy = By3.id("button-apply");
126
+ }
127
+ /**
128
+ * Знаходить поле/фільтр у формі репорту за ім'ям
129
+ * @example
130
+ * const formReport = new MyForm();
131
+ * //...
132
+ * expect(await formReport.filterField('Name').getValue()).toBe('test value');
133
+ */
134
+ filterField(name) {
135
+ return super.field(name);
136
+ }
137
+ };
138
+
139
+ // src/pageObjects/elements/Dialog.ts
140
+ import { By as By4 } from "selenium-webdriver";
121
141
  var DIALOG_CLASS = ".d5-dialog";
122
142
  var DIALOG_TITLE_CLASS = ".dialog__title";
123
143
  var DIALOG_TEXT_CLASS = ".dialog__text";
@@ -131,7 +151,7 @@ var DialogButton = class extends AbstractButton {
131
151
  }
132
152
  async getElement() {
133
153
  const panel = await super.getElement();
134
- return panel.findElement(By3.xpath(buttonByTextXpath(this.text)));
154
+ return panel.findElement(By4.xpath(buttonByTextXpath(this.text)));
135
155
  }
136
156
  buttonNotDisplayedError() {
137
157
  return `Dialog button ${this.text} cannot be clicked. It is not displayed or it is disabled`;
@@ -151,11 +171,11 @@ var Dialog = class extends AbstractElement {
151
171
  return this.joinRelativeCssSelectors([DIALOG_CLASS, DIALOG_BUTTONS_PANEL_CLASS]);
152
172
  }
153
173
  async title() {
154
- const el = await this.driver.findElement(By3.css(this.titleSelector));
174
+ const el = await this.driver.findElement(By4.css(this.titleSelector));
155
175
  return await el.getText();
156
176
  }
157
177
  async text() {
158
- const el = await this.driver.findElement(By3.css(this.textSelector));
178
+ const el = await this.driver.findElement(By4.css(this.textSelector));
159
179
  return await el.getText();
160
180
  }
161
181
  button(text) {
@@ -174,6 +194,7 @@ export {
174
194
  LoginPage,
175
195
  NumberEditor,
176
196
  PanelFilterField,
197
+ ReportForm,
177
198
  SubsystemsPanel,
178
199
  TextEditor,
179
200
  TreeView,
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  TreeView
3
- } from "./chunk-44JIUIEW.mjs";
3
+ } from "./chunk-CFJ5JWM7.mjs";
4
4
  import {
5
5
  FilterPanel,
6
6
  FormFilterField,
7
7
  ListForm,
8
8
  PanelFilterField
9
- } from "./chunk-NWWYF43G.mjs";
9
+ } from "./chunk-3EQV252X.mjs";
10
10
  import {
11
11
  FormEdit
12
- } from "./chunk-FP26UOTI.mjs";
12
+ } from "./chunk-PNSQQKEY.mjs";
13
13
  import {
14
14
  AbstractButton,
15
15
  AbstractElement,
@@ -27,7 +27,7 @@ import {
27
27
  readonlyLocator,
28
28
  wait,
29
29
  waitElementIsVisible
30
- } from "./chunk-VWNH6HVN.mjs";
30
+ } from "./chunk-4VLJL7OZ.mjs";
31
31
 
32
32
  // src/pageObjects/pages/LoginPage.ts
33
33
  var LOGIN_PATH = "/login";
@@ -116,8 +116,28 @@ var SubsystemsPanel = class extends AbstractElement {
116
116
  }
117
117
  };
118
118
 
119
- // src/pageObjects/elements/Dialog.ts
119
+ // src/pageObjects/elements/Forms/ReportForm.ts
120
120
  import { By as By3 } from "selenium-webdriver";
121
+ var ReportForm = class extends FormEdit {
122
+ constructor(driver) {
123
+ super(driver);
124
+ this.popupContainerCssSelector = `.popup .form-report-${this.formName}`;
125
+ this.saveButtonBy = By3.id("button-apply");
126
+ }
127
+ /**
128
+ * Знаходить поле/фільтр у формі репорту за ім'ям
129
+ * @example
130
+ * const formReport = new MyForm();
131
+ * //...
132
+ * expect(await formReport.filterField('Name').getValue()).toBe('test value');
133
+ */
134
+ filterField(name) {
135
+ return super.field(name);
136
+ }
137
+ };
138
+
139
+ // src/pageObjects/elements/Dialog.ts
140
+ import { By as By4 } from "selenium-webdriver";
121
141
  var DIALOG_CLASS = ".d5-dialog";
122
142
  var DIALOG_TITLE_CLASS = ".dialog__title";
123
143
  var DIALOG_TEXT_CLASS = ".dialog__text";
@@ -131,7 +151,7 @@ var DialogButton = class extends AbstractButton {
131
151
  }
132
152
  async getElement() {
133
153
  const panel = await super.getElement();
134
- return panel.findElement(By3.xpath(buttonByTextXpath(this.text)));
154
+ return panel.findElement(By4.xpath(buttonByTextXpath(this.text)));
135
155
  }
136
156
  buttonNotDisplayedError() {
137
157
  return `Dialog button ${this.text} cannot be clicked. It is not displayed or it is disabled`;
@@ -151,11 +171,11 @@ var Dialog = class extends AbstractElement {
151
171
  return this.joinRelativeCssSelectors([DIALOG_CLASS, DIALOG_BUTTONS_PANEL_CLASS]);
152
172
  }
153
173
  async title() {
154
- const el = await this.driver.findElement(By3.css(this.titleSelector));
174
+ const el = await this.driver.findElement(By4.css(this.titleSelector));
155
175
  return await el.getText();
156
176
  }
157
177
  async text() {
158
- const el = await this.driver.findElement(By3.css(this.textSelector));
178
+ const el = await this.driver.findElement(By4.css(this.textSelector));
159
179
  return await el.getText();
160
180
  }
161
181
  button(text) {
@@ -174,6 +194,7 @@ export {
174
194
  LoginPage,
175
195
  NumberEditor,
176
196
  PanelFilterField,
197
+ ReportForm,
177
198
  SubsystemsPanel,
178
199
  TextEditor,
179
200
  TreeView,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "d5-testing-library",
3
- "version": "1.5.0",
3
+ "version": "1.6.0",
4
4
  "description": "e2e testing D5 projects",
5
5
  "main": "dist/cjs/d5-testing-library.cjs",
6
6
  "module": "dist/d5-testing-library.legacy-esm.js",
@@ -1,7 +0,0 @@
1
- import {
2
- FormEdit
3
- } from "./chunk-FP26UOTI.mjs";
4
- import "./chunk-VWNH6HVN.mjs";
5
- export {
6
- FormEdit as default
7
- };
@@ -1,7 +0,0 @@
1
- import {
2
- ListForm
3
- } from "./chunk-NWWYF43G.mjs";
4
- import "./chunk-VWNH6HVN.mjs";
5
- export {
6
- ListForm as default
7
- };
@@ -1,8 +0,0 @@
1
- import {
2
- TreeView
3
- } from "./chunk-44JIUIEW.mjs";
4
- import "./chunk-NWWYF43G.mjs";
5
- import "./chunk-VWNH6HVN.mjs";
6
- export {
7
- TreeView as default
8
- };