d5-testing-library 1.8.0-alpha.21 → 1.8.0-alpha.23

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-NXRKCIYK.mjs";
4
+ import "./chunk-VJLNAL57.mjs";
5
+ export {
6
+ FormEdit as default
7
+ };
@@ -0,0 +1,7 @@
1
+ import {
2
+ ListForm
3
+ } from "./chunk-SYZ2HQR7.mjs";
4
+ import "./chunk-VJLNAL57.mjs";
5
+ export {
6
+ ListForm as default
7
+ };
@@ -0,0 +1,8 @@
1
+ import {
2
+ TreeView
3
+ } from "./chunk-MDGM7U6W.mjs";
4
+ import "./chunk-SYZ2HQR7.mjs";
5
+ import "./chunk-VJLNAL57.mjs";
6
+ export {
7
+ TreeView as default
8
+ };
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  ListForm
3
- } from "./chunk-PMZQRKUZ.mjs";
3
+ } from "./chunk-SYZ2HQR7.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-MV63JF3H.mjs";
6
+ } from "./chunk-VJLNAL57.mjs";
7
7
 
8
8
  // src/pageObjects/elements/Forms/FormEdit.ts
9
9
  import { By } from "selenium-webdriver";
@@ -17,7 +17,7 @@ import {
17
17
  wait,
18
18
  waitElementIsClickable_default,
19
19
  waitElementIsVisible
20
- } from "./chunk-MV63JF3H.mjs";
20
+ } from "./chunk-VJLNAL57.mjs";
21
21
 
22
22
  // src/pageObjects/elements/Table/Table.ts
23
23
  import { By as By6 } from "selenium-webdriver";
@@ -307,17 +307,31 @@ var AbstractDropDownMenuList = class extends AbstractElementWithParent {
307
307
  const menuItemElement = await fixElementStaleError(by, this.driver);
308
308
  await click(menuItemElement, this.driver);
309
309
  }
310
- async clickItemByPath(path, getBy) {
310
+ async getElementByPath(path, getBy, returnLastElement = false) {
311
311
  let pathList = isString(path) ? [path] : path;
312
+ let result = null;
313
+ let index = 1;
312
314
  for (let text of pathList) {
313
- await this.clickItemBy(this.buttonNotDisplayedError(text), getBy(text));
315
+ if (!returnLastElement || index < pathList.length) {
316
+ await this.clickItemBy(this.buttonNotDisplayedError(text), getBy(text));
317
+ } else {
318
+ result = await fixElementStaleError(getBy(text), this.driver);
319
+ }
320
+ index++;
314
321
  }
322
+ return result;
323
+ }
324
+ async clickButton(name) {
325
+ await this.getElementByPath(name, this.getButtonNameBy.bind(this));
315
326
  }
316
- clickButton(name) {
317
- return this.clickItemByPath(name, this.getButtonNameBy.bind(this));
327
+ async clickButtonByTitle(title) {
328
+ await this.getElementByPath(title, this.getButtonTitleBy.bind(this));
329
+ }
330
+ getMenuItemElementByTitle(title) {
331
+ return this.getElementByPath(title, this.getButtonTitleBy.bind(this), true);
318
332
  }
319
- clickButtonByTitle(title) {
320
- return this.clickItemByPath(title, this.getButtonTitleBy.bind(this));
333
+ getMenuItemElementByName(name) {
334
+ return this.getElementByPath(name, this.getButtonNameBy.bind(this), true);
321
335
  }
322
336
  isVisible() {
323
337
  return Promise.resolve(true);
@@ -550,28 +564,51 @@ var Table = class extends AbstractElementWithParent {
550
564
  };
551
565
 
552
566
  // src/pageObjects/elements/TableToolbar/ToolbarGroupButton.ts
553
- var ToolbarGroupButton = class extends AbstractButton {
567
+ import { By as By8 } from "selenium-webdriver";
568
+
569
+ // src/pageObjects/elements/TableToolbar/ToolbarButton.ts
570
+ import { By as By7 } from "selenium-webdriver";
571
+ var TOOLBAR_BUTTON_CLASS = "toolbar-button";
572
+ var TOOLBAR_BUTTON_TEXT_CLASS = "dx-button-text";
573
+ var getToolbarButtonSelector = (name) => `#${TOOLBAR_BUTTON_CLASS}-${name}`;
574
+ var getToolbarButtonTextSelector = (name) => `${getToolbarButtonSelector(name)} .${TOOLBAR_BUTTON_TEXT_CLASS}`;
575
+ var ToolbarButton = class extends AbstractButton {
554
576
  name;
555
577
  constructor(parentCssSelector, name, driver) {
556
- super(parentCssSelector, ``, driver);
578
+ super(parentCssSelector, getToolbarButtonSelector(name), driver);
557
579
  this.name = name;
558
580
  }
559
581
  buttonNotDisplayedError() {
560
582
  return `Button ${this.name} cannot be clicked. It is not displayed or it is disabled`;
561
583
  }
584
+ async getTitle() {
585
+ try {
586
+ const buttonTextContainer = await this.driver.findElement(By7.css(getToolbarButtonTextSelector(this.name)));
587
+ return await buttonTextContainer.getText();
588
+ } catch (_) {
589
+ return null;
590
+ }
591
+ }
562
592
  };
563
593
 
564
- // src/pageObjects/elements/TableToolbar/ToolbarButton.ts
565
- var TOOLBAR_BUTTON_CLASS = "toolbar-button";
566
- var ToolbarButton = class extends AbstractButton {
594
+ // src/pageObjects/elements/TableToolbar/ToolbarGroupButton.ts
595
+ var ToolbarGroupButton = class extends AbstractButton {
567
596
  name;
568
597
  constructor(parentCssSelector, name, driver) {
569
- super(parentCssSelector, `#${TOOLBAR_BUTTON_CLASS}-${name}`, driver);
598
+ super(parentCssSelector, ``, driver);
570
599
  this.name = name;
571
600
  }
572
601
  buttonNotDisplayedError() {
573
602
  return `Button ${this.name} cannot be clicked. It is not displayed or it is disabled`;
574
603
  }
604
+ async getTitle() {
605
+ try {
606
+ const buttonTextContainer = await this.driver.findElement(By8.css(getToolbarButtonTextSelector(this.name)));
607
+ return await buttonTextContainer.getText();
608
+ } catch (_) {
609
+ return null;
610
+ }
611
+ }
575
612
  };
576
613
 
577
614
  // src/pageObjects/elements/AbstractDropDownMenuButton.ts
@@ -594,6 +631,48 @@ var AbstractDropDownMenuButton = class extends AbstractElementWithParent {
594
631
  await this.openDropdownMenu();
595
632
  await this._list.clickButtonByTitle(title);
596
633
  }
634
+ async getMenuItemElementByTitle(title) {
635
+ await this.openDropdownMenu();
636
+ return await this._list.getMenuItemElementByTitle(title);
637
+ }
638
+ async getMenuItemElementByName(name) {
639
+ await this.openDropdownMenu();
640
+ return await this._list.getMenuItemElementByName(name);
641
+ }
642
+ };
643
+
644
+ // src/pageObjects/elements/TableToolbar/ToolbarMenuItem.ts
645
+ var ToolbarMenuItem = class {
646
+ getMenuItem;
647
+ name;
648
+ constructor(getMenuItem, name) {
649
+ this.getMenuItem = getMenuItem;
650
+ this.name = name;
651
+ }
652
+ async click() {
653
+ const menuItemElement = await this.getMenuItem(this.name);
654
+ await menuItemElement.click();
655
+ }
656
+ async getTitle() {
657
+ try {
658
+ const menuItemElement = await this.getMenuItem(this.name);
659
+ return await menuItemElement.getText();
660
+ } catch (_) {
661
+ return null;
662
+ }
663
+ }
664
+ async isDisabled() {
665
+ const menuItemElement = await this.getMenuItem(this.name);
666
+ return await menuItemElement.getCssValue("pointer-events") === "none";
667
+ }
668
+ async isDisplayed() {
669
+ try {
670
+ const menuItemElement = await this.getMenuItem(this.name);
671
+ return await menuItemElement.isDisplayed();
672
+ } catch (_) {
673
+ return false;
674
+ }
675
+ }
597
676
  };
598
677
 
599
678
  // src/pageObjects/elements/TableToolbar/ToolbarMenu.ts
@@ -616,15 +695,49 @@ var ToolbarMenu = class extends AbstractDropDownMenuButton {
616
695
  const list = new ToolbarMenuList(parentCssSelector, ".toolbar-dropdown-context-menu", formName, driver);
617
696
  super(parentCssSelector, fullSelector, list, driver);
618
697
  }
619
- async clickButton(name) {
698
+ checkNameValue(name) {
620
699
  if (!isString(name) && !isArray(name))
621
700
  throw new Error(`"name" must be a string or array of string`);
622
- await super.clickButton(name);
623
701
  }
624
- async clickButtonByTitle(title) {
702
+ checkTitleValue(title) {
625
703
  if (!isString(title) && !isArray(title))
626
704
  throw new Error(`"title" must be a string or array of string`);
627
- await super.clickButtonByTitle(title);
705
+ }
706
+ buttonByName(name) {
707
+ this.checkNameValue(name);
708
+ return new ToolbarMenuItem(this.getMenuItemElementByName.bind(this), name);
709
+ }
710
+ buttonByTitle(title) {
711
+ this.checkTitleValue(title);
712
+ return new ToolbarMenuItem(this.getMenuItemElementByTitle.bind(this), title);
713
+ }
714
+ async buttonIsDisplayed(name) {
715
+ const button = this.buttonByName(name);
716
+ return await button.isDisplayed();
717
+ }
718
+ async buttonByTitleIsDisplayed(title) {
719
+ const button = this.buttonByTitle(title);
720
+ return await button.isDisplayed();
721
+ }
722
+ async buttonTitle(name) {
723
+ const button = this.buttonByName(name);
724
+ return await button.getTitle();
725
+ }
726
+ async buttonIsDisabled(name) {
727
+ const button = this.buttonByName(name);
728
+ return await button.isDisabled();
729
+ }
730
+ async buttonByTitleIsDisabled(title) {
731
+ const button = this.buttonByTitle(title);
732
+ return await button.isDisabled();
733
+ }
734
+ async clickButton(name) {
735
+ const button = this.buttonByName(name);
736
+ await button.click();
737
+ }
738
+ async clickButtonByTitle(title) {
739
+ const button = this.buttonByTitle(title);
740
+ await button.click();
628
741
  }
629
742
  };
630
743
 
@@ -666,6 +779,10 @@ var ToolbarItem = class extends AbstractElementWithParent {
666
779
  return false;
667
780
  }
668
781
  }
782
+ async getTitle() {
783
+ await this.init();
784
+ return await this._button.getTitle();
785
+ }
669
786
  get menu() {
670
787
  return new ToolbarMenu(this.parentCssSelector, this._formName, this._itemName, this.driver);
671
788
  }
@@ -685,7 +802,7 @@ var FormToolbar = class extends AbstractElementWithParent {
685
802
  };
686
803
 
687
804
  // src/pageObjects/elements/Filters/FilterOperation.ts
688
- import { By as By7 } from "selenium-webdriver";
805
+ import { By as By9 } from "selenium-webdriver";
689
806
  var FILTER_OPERATIONS = [
690
807
  "=",
691
808
  "<>",
@@ -718,10 +835,10 @@ var FilterOperation = class extends AbstractElementWithParent {
718
835
  errorMessage: "Widget operation is not clickable",
719
836
  driver: this.driver
720
837
  });
721
- const clickableElement = await widgetButtonEl.findElement(By7.className("dx-icon"));
838
+ const clickableElement = await widgetButtonEl.findElement(By9.className("dx-icon"));
722
839
  await click(clickableElement, this.driver);
723
840
  try {
724
- const widgetPopupEl = await this.driver.findElement(By7.css(`${byTestIdCssSelector(`${OPERATIONS_WIDGET_POPUP}-${this._testId}`)}`));
841
+ const widgetPopupEl = await this.driver.findElement(By9.css(`${byTestIdCssSelector(`${OPERATIONS_WIDGET_POPUP}-${this._testId}`)}`));
725
842
  await waitElementIsVisible({
726
843
  element: widgetPopupEl,
727
844
  errorMessage: `Operation widget popup is not visible`,
@@ -736,7 +853,7 @@ var FilterOperation = class extends AbstractElementWithParent {
736
853
  throw new Error(`Operation with name "${operationName}" is not correct.`);
737
854
  }
738
855
  await this.initOperationWidget();
739
- const operationEl = await fixElementStaleError(By7.css(`${byTestIdCssSelector(`${OPERATIONS_WIDGET_POPUP}-${this._testId}`)} ${getWidgetInPopupSelector(operationName)}`), this.driver);
856
+ const operationEl = await fixElementStaleError(By9.css(`${byTestIdCssSelector(`${OPERATIONS_WIDGET_POPUP}-${this._testId}`)} ${getWidgetInPopupSelector(operationName)}`), this.driver);
740
857
  await click(operationEl, this.driver);
741
858
  await wait(
742
859
  async () => {
@@ -873,7 +990,7 @@ var FormFilterField = class extends AbstractEditor {
873
990
  };
874
991
 
875
992
  // src/pageObjects/elements/Filters/FilterPanel.ts
876
- import { By as By8 } from "selenium-webdriver";
993
+ import { By as By10 } from "selenium-webdriver";
877
994
 
878
995
  // src/pageObjects/elements/Filters/PanelFilterField.ts
879
996
  var PanelFilterField = class extends AbstractEditor {
@@ -984,7 +1101,7 @@ var FilterPanel = class extends AbstractElement {
984
1101
  async filterPanelButtons() {
985
1102
  const selector = `${this.elementCssSelector} ${FILTER_PANEL_SELECTOR} .filter-panel__buttons-panel .dx-button-text`;
986
1103
  const el = await this.getElement();
987
- return el.findElements(By8.css(selector));
1104
+ return el.findElements(By10.css(selector));
988
1105
  }
989
1106
  constructor(formName, driver) {
990
1107
  super(driver, drawerSelector(formName));
@@ -1017,13 +1134,13 @@ var FilterPanel = class extends AbstractElement {
1017
1134
  await this.driver.sleep(300);
1018
1135
  }
1019
1136
  async close() {
1020
- const btn = await this.driver.findElement(By8.css(`${this.elementCssSelector} ${CLOSE_SELECTOR}`));
1137
+ const btn = await this.driver.findElement(By10.css(`${this.elementCssSelector} ${CLOSE_SELECTOR}`));
1021
1138
  await click(btn, this.driver);
1022
1139
  }
1023
1140
  };
1024
1141
 
1025
1142
  // src/pageObjects/elements/Filters/ColumnFilter.ts
1026
- import { By as By9 } from "selenium-webdriver";
1143
+ import { By as By11 } from "selenium-webdriver";
1027
1144
 
1028
1145
  // src/pageObjects/elements/Filters/HeaderFilterField.ts
1029
1146
  var HeaderFilterField = class extends AbstractEditor {
@@ -1063,11 +1180,11 @@ var ColumnFilter = class extends AbstractElement {
1063
1180
  }
1064
1181
  async getApplyButton() {
1065
1182
  const selector = `${HEADER_FILTER_CONTAINER} ${HEADER_FILTER_BUTTONS} ${APPLY_SELECTOR}`;
1066
- return this.driver.findElement(By9.css(selector));
1183
+ return this.driver.findElement(By11.css(selector));
1067
1184
  }
1068
1185
  async getCancelButton() {
1069
1186
  const selector = `${HEADER_FILTER_CONTAINER} ${HEADER_FILTER_BUTTONS} ${CANCEL_SELECTOR}`;
1070
- return this.driver.findElement(By9.css(selector));
1187
+ return this.driver.findElement(By11.css(selector));
1071
1188
  }
1072
1189
  async apply() {
1073
1190
  const btn = await this.getApplyButton();
@@ -1081,7 +1198,7 @@ var ColumnFilter = class extends AbstractElement {
1081
1198
  const columnEl = await this._column.getElement();
1082
1199
  const actions = this.driver.actions({ async: true });
1083
1200
  await actions.move({ origin: columnEl }).perform();
1084
- const elements = await columnEl.findElements(By9.css(HEADER_FILTER_ICON));
1201
+ const elements = await columnEl.findElements(By11.css(HEADER_FILTER_ICON));
1085
1202
  let headerFilterIcon = null;
1086
1203
  await wait(
1087
1204
  async () => {
@@ -574,11 +574,8 @@ var BaseDateEditor = class extends AbstractDXEditorWithInput {
574
574
  this.setClearStrategy(new InputClearStrategy());
575
575
  }
576
576
  async setArrayValue(value) {
577
- const actions = this.driver.actions({ async: true });
578
577
  const dateField = await this.driver.findElement(By8.css(`${this.getFullCssSelector()}`));
579
- const dateInputEl = await this.getInputElement();
580
578
  const dateFieldDataTestID = await this.getDataTestId();
581
- const formattedDates = value.map(formatDMYDate);
582
579
  const button = await dateField.findElement(By8.css(`.${BTN_CALENDAR_POPOVER_OPEN_SELECTOR}`));
583
580
  await click(button, this.driver);
584
581
  const calendarPopoverElement = await this.driver.findElement(By8.css(byTestIdCssSelector(`${dateFieldDataTestID}-calendar-popover`)));
@@ -588,29 +585,23 @@ var BaseDateEditor = class extends AbstractDXEditorWithInput {
588
585
  const dateToInput = await calendarPopoverElement.findElement(
589
586
  By8.css(`.${BTN_CALENDAR_POPOVER_DATE_TO_INPUT_SELECTOR} .dx-texteditor-input`)
590
587
  );
591
- await click(dateFromInput, this.driver);
592
- await dateFromInput.sendKeys(formattedDates[0]);
593
- await click(dateToInput, this.driver);
594
- await actions.move({ origin: dateInputEl }).sendKeys(Key3.HOME).perform();
595
- await dateToInput.sendKeys(formattedDates[1]);
596
- await actions.move({ origin: dateInputEl }).sendKeys(Key3.ENTER).perform();
588
+ await this.setSingleValue(value[0], dateFromInput);
589
+ await this.setSingleValue(value[1], dateToInput);
597
590
  const btnOk = await this.driver.findElement(By8.css(`.${BTN_SAVE_SELECTOR}`));
598
591
  await click(btnOk, this.driver);
599
592
  }
600
- async setSingleValue(value) {
593
+ async setSingleValue(value, inputEl) {
601
594
  const actions = this.driver.actions({ async: true });
602
595
  const formattedDate = formatDMYDate(value);
603
- const dateInputEl = await this.getInputElement();
604
- await click(dateInputEl, this.driver);
605
- await actions.move({ origin: dateInputEl }).sendKeys(Key3.HOME).perform();
606
- await actions.move({ origin: dateInputEl }).sendKeys(formattedDate, Key3.ENTER).perform();
596
+ await click(inputEl, this.driver);
597
+ await actions.move({ origin: inputEl }).sendKeys(Key3.HOME).perform();
598
+ await actions.move({ origin: inputEl }).sendKeys(formattedDate, Key3.ENTER).perform();
607
599
  }
608
600
  async setDateValue(value) {
609
- await this.clear();
610
601
  if (Array.isArray(value)) {
611
602
  await this.setArrayValue(value);
612
603
  } else {
613
- await this.setSingleValue(value);
604
+ await this.setSingleValue(value, await this.getInputElement());
614
605
  }
615
606
  }
616
607
  };
@@ -1042,6 +1033,9 @@ var FormButton = class extends DXButton {
1042
1033
  buttonNotDisplayedError() {
1043
1034
  return `Form Button ${this.name} cannot be clicked. It is not displayed or it is disabled`;
1044
1035
  }
1036
+ async getTitle() {
1037
+ return await this.getText();
1038
+ }
1045
1039
  };
1046
1040
 
1047
1041
  // src/pageObjects/elements/Groups/AbstractGroup.ts
@@ -1289,15 +1283,15 @@ async function classDependencyInjector(formType) {
1289
1283
  let SubFormFactoryClass;
1290
1284
  switch (formType) {
1291
1285
  case "1" /* LIST */:
1292
- SubFormFactoryClass = (await import("./ListForm-EM7E4ZMM.mjs")).default;
1286
+ SubFormFactoryClass = (await import("./ListForm-6PRF2IKJ.mjs")).default;
1293
1287
  break;
1294
1288
  case "3" /* TREE */:
1295
- SubFormFactoryClass = (await import("./TreeView-F2XF44N2.mjs")).default;
1289
+ SubFormFactoryClass = (await import("./TreeView-YHZLUCNA.mjs")).default;
1296
1290
  break;
1297
1291
  case "2" /* EDIT */:
1298
1292
  case "99" /* FREE_FORM */:
1299
1293
  case "4" /* REPORT */:
1300
- SubFormFactoryClass = (await import("./FormEdit-GTZISTTI.mjs")).default;
1294
+ SubFormFactoryClass = (await import("./FormEdit-ZDBS5OJX.mjs")).default;
1301
1295
  break;
1302
1296
  default:
1303
1297
  throw new Error(`Unsupported form type ${formType}`);
@@ -793,11 +793,8 @@ var init_BaseDateEditor = __esm({
793
793
  this.setClearStrategy(new InputClearStrategy());
794
794
  }
795
795
  async setArrayValue(value) {
796
- const actions = this.driver.actions({ async: true });
797
796
  const dateField = await this.driver.findElement(import_selenium_webdriver12.By.css(`${this.getFullCssSelector()}`));
798
- const dateInputEl = await this.getInputElement();
799
797
  const dateFieldDataTestID = await this.getDataTestId();
800
- const formattedDates = value.map(formatDMYDate);
801
798
  const button = await dateField.findElement(import_selenium_webdriver12.By.css(`.${BTN_CALENDAR_POPOVER_OPEN_SELECTOR}`));
802
799
  await click(button, this.driver);
803
800
  const calendarPopoverElement = await this.driver.findElement(import_selenium_webdriver12.By.css(byTestIdCssSelector(`${dateFieldDataTestID}-calendar-popover`)));
@@ -807,29 +804,23 @@ var init_BaseDateEditor = __esm({
807
804
  const dateToInput = await calendarPopoverElement.findElement(
808
805
  import_selenium_webdriver12.By.css(`.${BTN_CALENDAR_POPOVER_DATE_TO_INPUT_SELECTOR} .dx-texteditor-input`)
809
806
  );
810
- await click(dateFromInput, this.driver);
811
- await dateFromInput.sendKeys(formattedDates[0]);
812
- await click(dateToInput, this.driver);
813
- await actions.move({ origin: dateInputEl }).sendKeys(import_selenium_webdriver12.Key.HOME).perform();
814
- await dateToInput.sendKeys(formattedDates[1]);
815
- await actions.move({ origin: dateInputEl }).sendKeys(import_selenium_webdriver12.Key.ENTER).perform();
807
+ await this.setSingleValue(value[0], dateFromInput);
808
+ await this.setSingleValue(value[1], dateToInput);
816
809
  const btnOk = await this.driver.findElement(import_selenium_webdriver12.By.css(`.${BTN_SAVE_SELECTOR}`));
817
810
  await click(btnOk, this.driver);
818
811
  }
819
- async setSingleValue(value) {
812
+ async setSingleValue(value, inputEl) {
820
813
  const actions = this.driver.actions({ async: true });
821
814
  const formattedDate = formatDMYDate(value);
822
- const dateInputEl = await this.getInputElement();
823
- await click(dateInputEl, this.driver);
824
- await actions.move({ origin: dateInputEl }).sendKeys(import_selenium_webdriver12.Key.HOME).perform();
825
- await actions.move({ origin: dateInputEl }).sendKeys(formattedDate, import_selenium_webdriver12.Key.ENTER).perform();
815
+ await click(inputEl, this.driver);
816
+ await actions.move({ origin: inputEl }).sendKeys(import_selenium_webdriver12.Key.HOME).perform();
817
+ await actions.move({ origin: inputEl }).sendKeys(formattedDate, import_selenium_webdriver12.Key.ENTER).perform();
826
818
  }
827
819
  async setDateValue(value) {
828
- await this.clear();
829
820
  if (Array.isArray(value)) {
830
821
  await this.setArrayValue(value);
831
822
  } else {
832
- await this.setSingleValue(value);
823
+ await this.setSingleValue(value, await this.getInputElement());
833
824
  }
834
825
  }
835
826
  };
@@ -1228,6 +1219,9 @@ var init_FormButton = __esm({
1228
1219
  buttonNotDisplayedError() {
1229
1220
  return `Form Button ${this.name} cannot be clicked. It is not displayed or it is disabled`;
1230
1221
  }
1222
+ async getTitle() {
1223
+ return await this.getText();
1224
+ }
1231
1225
  };
1232
1226
  }
1233
1227
  });
@@ -2036,17 +2030,31 @@ var init_AbstractDropDownMenuList = __esm({
2036
2030
  const menuItemElement = await fixElementStaleError(by, this.driver);
2037
2031
  await click(menuItemElement, this.driver);
2038
2032
  }
2039
- async clickItemByPath(path, getBy) {
2033
+ async getElementByPath(path, getBy, returnLastElement = false) {
2040
2034
  let pathList = isString(path) ? [path] : path;
2035
+ let result = null;
2036
+ let index = 1;
2041
2037
  for (let text of pathList) {
2042
- await this.clickItemBy(this.buttonNotDisplayedError(text), getBy(text));
2038
+ if (!returnLastElement || index < pathList.length) {
2039
+ await this.clickItemBy(this.buttonNotDisplayedError(text), getBy(text));
2040
+ } else {
2041
+ result = await fixElementStaleError(getBy(text), this.driver);
2042
+ }
2043
+ index++;
2043
2044
  }
2045
+ return result;
2044
2046
  }
2045
- clickButton(name) {
2046
- return this.clickItemByPath(name, this.getButtonNameBy.bind(this));
2047
+ async clickButton(name) {
2048
+ await this.getElementByPath(name, this.getButtonNameBy.bind(this));
2049
+ }
2050
+ async clickButtonByTitle(title) {
2051
+ await this.getElementByPath(title, this.getButtonTitleBy.bind(this));
2047
2052
  }
2048
- clickButtonByTitle(title) {
2049
- return this.clickItemByPath(title, this.getButtonTitleBy.bind(this));
2053
+ getMenuItemElementByTitle(title) {
2054
+ return this.getElementByPath(title, this.getButtonTitleBy.bind(this), true);
2055
+ }
2056
+ getMenuItemElementByName(name) {
2057
+ return this.getElementByPath(name, this.getButtonNameBy.bind(this), true);
2050
2058
  }
2051
2059
  isVisible() {
2052
2060
  return Promise.resolve(true);
@@ -2314,41 +2322,63 @@ var init_Table = __esm({
2314
2322
  }
2315
2323
  });
2316
2324
 
2317
- // src/pageObjects/elements/TableToolbar/ToolbarGroupButton.ts
2318
- var ToolbarGroupButton;
2319
- var init_ToolbarGroupButton = __esm({
2320
- "src/pageObjects/elements/TableToolbar/ToolbarGroupButton.ts"() {
2325
+ // src/pageObjects/elements/TableToolbar/ToolbarButton.ts
2326
+ var import_selenium_webdriver26, TOOLBAR_BUTTON_CLASS, TOOLBAR_BUTTON_TEXT_CLASS, getToolbarButtonSelector, getToolbarButtonTextSelector, ToolbarButton;
2327
+ var init_ToolbarButton = __esm({
2328
+ "src/pageObjects/elements/TableToolbar/ToolbarButton.ts"() {
2321
2329
  "use strict";
2330
+ import_selenium_webdriver26 = require("selenium-webdriver");
2322
2331
  init_AbstractButton();
2323
- ToolbarGroupButton = class extends AbstractButton {
2332
+ TOOLBAR_BUTTON_CLASS = "toolbar-button";
2333
+ TOOLBAR_BUTTON_TEXT_CLASS = "dx-button-text";
2334
+ getToolbarButtonSelector = (name) => `#${TOOLBAR_BUTTON_CLASS}-${name}`;
2335
+ getToolbarButtonTextSelector = (name) => `${getToolbarButtonSelector(name)} .${TOOLBAR_BUTTON_TEXT_CLASS}`;
2336
+ ToolbarButton = class extends AbstractButton {
2324
2337
  name;
2325
2338
  constructor(parentCssSelector, name, driver) {
2326
- super(parentCssSelector, ``, driver);
2339
+ super(parentCssSelector, getToolbarButtonSelector(name), driver);
2327
2340
  this.name = name;
2328
2341
  }
2329
2342
  buttonNotDisplayedError() {
2330
2343
  return `Button ${this.name} cannot be clicked. It is not displayed or it is disabled`;
2331
2344
  }
2345
+ async getTitle() {
2346
+ try {
2347
+ const buttonTextContainer = await this.driver.findElement(import_selenium_webdriver26.By.css(getToolbarButtonTextSelector(this.name)));
2348
+ return await buttonTextContainer.getText();
2349
+ } catch (_) {
2350
+ return null;
2351
+ }
2352
+ }
2332
2353
  };
2333
2354
  }
2334
2355
  });
2335
2356
 
2336
- // src/pageObjects/elements/TableToolbar/ToolbarButton.ts
2337
- var TOOLBAR_BUTTON_CLASS, ToolbarButton;
2338
- var init_ToolbarButton = __esm({
2339
- "src/pageObjects/elements/TableToolbar/ToolbarButton.ts"() {
2357
+ // src/pageObjects/elements/TableToolbar/ToolbarGroupButton.ts
2358
+ var import_selenium_webdriver27, ToolbarGroupButton;
2359
+ var init_ToolbarGroupButton = __esm({
2360
+ "src/pageObjects/elements/TableToolbar/ToolbarGroupButton.ts"() {
2340
2361
  "use strict";
2341
2362
  init_AbstractButton();
2342
- TOOLBAR_BUTTON_CLASS = "toolbar-button";
2343
- ToolbarButton = class extends AbstractButton {
2363
+ import_selenium_webdriver27 = require("selenium-webdriver");
2364
+ init_ToolbarButton();
2365
+ ToolbarGroupButton = class extends AbstractButton {
2344
2366
  name;
2345
2367
  constructor(parentCssSelector, name, driver) {
2346
- super(parentCssSelector, `#${TOOLBAR_BUTTON_CLASS}-${name}`, driver);
2368
+ super(parentCssSelector, ``, driver);
2347
2369
  this.name = name;
2348
2370
  }
2349
2371
  buttonNotDisplayedError() {
2350
2372
  return `Button ${this.name} cannot be clicked. It is not displayed or it is disabled`;
2351
2373
  }
2374
+ async getTitle() {
2375
+ try {
2376
+ const buttonTextContainer = await this.driver.findElement(import_selenium_webdriver27.By.css(getToolbarButtonTextSelector(this.name)));
2377
+ return await buttonTextContainer.getText();
2378
+ } catch (_) {
2379
+ return null;
2380
+ }
2381
+ }
2352
2382
  };
2353
2383
  }
2354
2384
  });
@@ -2379,6 +2409,54 @@ var init_AbstractDropDownMenuButton = __esm({
2379
2409
  await this.openDropdownMenu();
2380
2410
  await this._list.clickButtonByTitle(title);
2381
2411
  }
2412
+ async getMenuItemElementByTitle(title) {
2413
+ await this.openDropdownMenu();
2414
+ return await this._list.getMenuItemElementByTitle(title);
2415
+ }
2416
+ async getMenuItemElementByName(name) {
2417
+ await this.openDropdownMenu();
2418
+ return await this._list.getMenuItemElementByName(name);
2419
+ }
2420
+ };
2421
+ }
2422
+ });
2423
+
2424
+ // src/pageObjects/elements/TableToolbar/ToolbarMenuItem.ts
2425
+ var ToolbarMenuItem;
2426
+ var init_ToolbarMenuItem = __esm({
2427
+ "src/pageObjects/elements/TableToolbar/ToolbarMenuItem.ts"() {
2428
+ "use strict";
2429
+ ToolbarMenuItem = class {
2430
+ getMenuItem;
2431
+ name;
2432
+ constructor(getMenuItem, name) {
2433
+ this.getMenuItem = getMenuItem;
2434
+ this.name = name;
2435
+ }
2436
+ async click() {
2437
+ const menuItemElement = await this.getMenuItem(this.name);
2438
+ await menuItemElement.click();
2439
+ }
2440
+ async getTitle() {
2441
+ try {
2442
+ const menuItemElement = await this.getMenuItem(this.name);
2443
+ return await menuItemElement.getText();
2444
+ } catch (_) {
2445
+ return null;
2446
+ }
2447
+ }
2448
+ async isDisabled() {
2449
+ const menuItemElement = await this.getMenuItem(this.name);
2450
+ return await menuItemElement.getCssValue("pointer-events") === "none";
2451
+ }
2452
+ async isDisplayed() {
2453
+ try {
2454
+ const menuItemElement = await this.getMenuItem(this.name);
2455
+ return await menuItemElement.isDisplayed();
2456
+ } catch (_) {
2457
+ return false;
2458
+ }
2459
+ }
2382
2460
  };
2383
2461
  }
2384
2462
  });
@@ -2392,6 +2470,7 @@ var init_ToolbarMenu = __esm({
2392
2470
  init_locators();
2393
2471
  init_AbstractDropDownMenuButton();
2394
2472
  init_DXContextMenuList();
2473
+ init_ToolbarMenuItem();
2395
2474
  SPINDOWN_CLASS = ".dx-icon-spindown";
2396
2475
  buttonGroupItemSelector = (formName, name) => byTestIdCssSelector(`ftb-${formName}-${name}`);
2397
2476
  getFullCssSelector = (formName, name) => `${buttonGroupItemSelector(formName, name)} ${SPINDOWN_CLASS}`;
@@ -2411,15 +2490,49 @@ var init_ToolbarMenu = __esm({
2411
2490
  const list = new ToolbarMenuList(parentCssSelector, ".toolbar-dropdown-context-menu", formName, driver);
2412
2491
  super(parentCssSelector, fullSelector, list, driver);
2413
2492
  }
2414
- async clickButton(name) {
2493
+ checkNameValue(name) {
2415
2494
  if (!isString(name) && !isArray(name))
2416
2495
  throw new Error(`"name" must be a string or array of string`);
2417
- await super.clickButton(name);
2418
2496
  }
2419
- async clickButtonByTitle(title) {
2497
+ checkTitleValue(title) {
2420
2498
  if (!isString(title) && !isArray(title))
2421
2499
  throw new Error(`"title" must be a string or array of string`);
2422
- await super.clickButtonByTitle(title);
2500
+ }
2501
+ buttonByName(name) {
2502
+ this.checkNameValue(name);
2503
+ return new ToolbarMenuItem(this.getMenuItemElementByName.bind(this), name);
2504
+ }
2505
+ buttonByTitle(title) {
2506
+ this.checkTitleValue(title);
2507
+ return new ToolbarMenuItem(this.getMenuItemElementByTitle.bind(this), title);
2508
+ }
2509
+ async buttonIsDisplayed(name) {
2510
+ const button = this.buttonByName(name);
2511
+ return await button.isDisplayed();
2512
+ }
2513
+ async buttonByTitleIsDisplayed(title) {
2514
+ const button = this.buttonByTitle(title);
2515
+ return await button.isDisplayed();
2516
+ }
2517
+ async buttonTitle(name) {
2518
+ const button = this.buttonByName(name);
2519
+ return await button.getTitle();
2520
+ }
2521
+ async buttonIsDisabled(name) {
2522
+ const button = this.buttonByName(name);
2523
+ return await button.isDisabled();
2524
+ }
2525
+ async buttonByTitleIsDisabled(title) {
2526
+ const button = this.buttonByTitle(title);
2527
+ return await button.isDisabled();
2528
+ }
2529
+ async clickButton(name) {
2530
+ const button = this.buttonByName(name);
2531
+ await button.click();
2532
+ }
2533
+ async clickButtonByTitle(title) {
2534
+ const button = this.buttonByTitle(title);
2535
+ await button.click();
2423
2536
  }
2424
2537
  };
2425
2538
  }
@@ -2472,6 +2585,10 @@ var init_ToolbarItem = __esm({
2472
2585
  return false;
2473
2586
  }
2474
2587
  }
2588
+ async getTitle() {
2589
+ await this.init();
2590
+ return await this._button.getTitle();
2591
+ }
2475
2592
  get menu() {
2476
2593
  return new ToolbarMenu(this.parentCssSelector, this._formName, this._itemName, this.driver);
2477
2594
  }
@@ -2501,11 +2618,11 @@ var init_FormToolbar = __esm({
2501
2618
  });
2502
2619
 
2503
2620
  // src/pageObjects/elements/Filters/FilterOperation.ts
2504
- var import_selenium_webdriver26, FILTER_OPERATIONS, BUTTON_OPERATION_WIDGET, OPERATIONS_WIDGET_POPUP, getWidgetInPopupSelector, FilterOperation;
2621
+ var import_selenium_webdriver28, FILTER_OPERATIONS, BUTTON_OPERATION_WIDGET, OPERATIONS_WIDGET_POPUP, getWidgetInPopupSelector, FilterOperation;
2505
2622
  var init_FilterOperation = __esm({
2506
2623
  "src/pageObjects/elements/Filters/FilterOperation.ts"() {
2507
2624
  "use strict";
2508
- import_selenium_webdriver26 = require("selenium-webdriver");
2625
+ import_selenium_webdriver28 = require("selenium-webdriver");
2509
2626
  init_fixElementStaleError();
2510
2627
  init_AbstractElementWithParent();
2511
2628
  init_locators();
@@ -2545,10 +2662,10 @@ var init_FilterOperation = __esm({
2545
2662
  errorMessage: "Widget operation is not clickable",
2546
2663
  driver: this.driver
2547
2664
  });
2548
- const clickableElement = await widgetButtonEl.findElement(import_selenium_webdriver26.By.className("dx-icon"));
2665
+ const clickableElement = await widgetButtonEl.findElement(import_selenium_webdriver28.By.className("dx-icon"));
2549
2666
  await click(clickableElement, this.driver);
2550
2667
  try {
2551
- const widgetPopupEl = await this.driver.findElement(import_selenium_webdriver26.By.css(`${byTestIdCssSelector(`${OPERATIONS_WIDGET_POPUP}-${this._testId}`)}`));
2668
+ const widgetPopupEl = await this.driver.findElement(import_selenium_webdriver28.By.css(`${byTestIdCssSelector(`${OPERATIONS_WIDGET_POPUP}-${this._testId}`)}`));
2552
2669
  await waitElementIsVisible({
2553
2670
  element: widgetPopupEl,
2554
2671
  errorMessage: `Operation widget popup is not visible`,
@@ -2563,7 +2680,7 @@ var init_FilterOperation = __esm({
2563
2680
  throw new Error(`Operation with name "${operationName}" is not correct.`);
2564
2681
  }
2565
2682
  await this.initOperationWidget();
2566
- const operationEl = await fixElementStaleError(import_selenium_webdriver26.By.css(`${byTestIdCssSelector(`${OPERATIONS_WIDGET_POPUP}-${this._testId}`)} ${getWidgetInPopupSelector(operationName)}`), this.driver);
2683
+ const operationEl = await fixElementStaleError(import_selenium_webdriver28.By.css(`${byTestIdCssSelector(`${OPERATIONS_WIDGET_POPUP}-${this._testId}`)} ${getWidgetInPopupSelector(operationName)}`), this.driver);
2567
2684
  await click(operationEl, this.driver);
2568
2685
  await wait(
2569
2686
  async () => {
@@ -2819,11 +2936,11 @@ var init_PanelFilterField = __esm({
2819
2936
  });
2820
2937
 
2821
2938
  // src/pageObjects/elements/Filters/FilterPanel.ts
2822
- var import_selenium_webdriver27, drawerSelector, FILTER_PANEL_SELECTOR, CLOSE_SELECTOR, FilterPanel;
2939
+ var import_selenium_webdriver29, drawerSelector, FILTER_PANEL_SELECTOR, CLOSE_SELECTOR, FilterPanel;
2823
2940
  var init_FilterPanel = __esm({
2824
2941
  "src/pageObjects/elements/Filters/FilterPanel.ts"() {
2825
2942
  "use strict";
2826
- import_selenium_webdriver27 = require("selenium-webdriver");
2943
+ import_selenium_webdriver29 = require("selenium-webdriver");
2827
2944
  init_AbstractElement();
2828
2945
  init_PanelFilterField();
2829
2946
  init_actions();
@@ -2838,7 +2955,7 @@ var init_FilterPanel = __esm({
2838
2955
  async filterPanelButtons() {
2839
2956
  const selector = `${this.elementCssSelector} ${FILTER_PANEL_SELECTOR} .filter-panel__buttons-panel .dx-button-text`;
2840
2957
  const el = await this.getElement();
2841
- return el.findElements(import_selenium_webdriver27.By.css(selector));
2958
+ return el.findElements(import_selenium_webdriver29.By.css(selector));
2842
2959
  }
2843
2960
  constructor(formName, driver) {
2844
2961
  super(driver, drawerSelector(formName));
@@ -2871,7 +2988,7 @@ var init_FilterPanel = __esm({
2871
2988
  await this.driver.sleep(300);
2872
2989
  }
2873
2990
  async close() {
2874
- const btn = await this.driver.findElement(import_selenium_webdriver27.By.css(`${this.elementCssSelector} ${CLOSE_SELECTOR}`));
2991
+ const btn = await this.driver.findElement(import_selenium_webdriver29.By.css(`${this.elementCssSelector} ${CLOSE_SELECTOR}`));
2875
2992
  await click(btn, this.driver);
2876
2993
  }
2877
2994
  };
@@ -2907,12 +3024,12 @@ var init_HeaderFilterField = __esm({
2907
3024
  });
2908
3025
 
2909
3026
  // src/pageObjects/elements/Filters/ColumnFilter.ts
2910
- var import_selenium_webdriver28, APPLY_SELECTOR, CANCEL_SELECTOR, HEADER_FILTER_ICON, HEADER_FILTER_CONTAINER, HEADER_FILTER_BUTTONS, ColumnFilter;
3027
+ var import_selenium_webdriver30, APPLY_SELECTOR, CANCEL_SELECTOR, HEADER_FILTER_ICON, HEADER_FILTER_CONTAINER, HEADER_FILTER_BUTTONS, ColumnFilter;
2911
3028
  var init_ColumnFilter = __esm({
2912
3029
  "src/pageObjects/elements/Filters/ColumnFilter.ts"() {
2913
3030
  "use strict";
2914
3031
  init_actions();
2915
- import_selenium_webdriver28 = require("selenium-webdriver");
3032
+ import_selenium_webdriver30 = require("selenium-webdriver");
2916
3033
  init_HeaderFilterField();
2917
3034
  init_waitElementIsVisible();
2918
3035
  init_AbstractElement();
@@ -2937,11 +3054,11 @@ var init_ColumnFilter = __esm({
2937
3054
  }
2938
3055
  async getApplyButton() {
2939
3056
  const selector = `${HEADER_FILTER_CONTAINER} ${HEADER_FILTER_BUTTONS} ${APPLY_SELECTOR}`;
2940
- return this.driver.findElement(import_selenium_webdriver28.By.css(selector));
3057
+ return this.driver.findElement(import_selenium_webdriver30.By.css(selector));
2941
3058
  }
2942
3059
  async getCancelButton() {
2943
3060
  const selector = `${HEADER_FILTER_CONTAINER} ${HEADER_FILTER_BUTTONS} ${CANCEL_SELECTOR}`;
2944
- return this.driver.findElement(import_selenium_webdriver28.By.css(selector));
3061
+ return this.driver.findElement(import_selenium_webdriver30.By.css(selector));
2945
3062
  }
2946
3063
  async apply() {
2947
3064
  const btn = await this.getApplyButton();
@@ -2955,7 +3072,7 @@ var init_ColumnFilter = __esm({
2955
3072
  const columnEl = await this._column.getElement();
2956
3073
  const actions = this.driver.actions({ async: true });
2957
3074
  await actions.move({ origin: columnEl }).perform();
2958
- const elements = await columnEl.findElements(import_selenium_webdriver28.By.css(HEADER_FILTER_ICON));
3075
+ const elements = await columnEl.findElements(import_selenium_webdriver30.By.css(HEADER_FILTER_ICON));
2959
3076
  let headerFilterIcon = null;
2960
3077
  await wait(
2961
3078
  async () => {
@@ -3252,12 +3369,12 @@ var init_createSubFormInstance = __esm({
3252
3369
  });
3253
3370
 
3254
3371
  // src/pageObjects/elements/Forms/Form.ts
3255
- var import_selenium_webdriver29, formTestId, Form;
3372
+ var import_selenium_webdriver31, formTestId, Form;
3256
3373
  var init_Form = __esm({
3257
3374
  "src/pageObjects/elements/Forms/Form.ts"() {
3258
3375
  "use strict";
3259
3376
  init_locators();
3260
- import_selenium_webdriver29 = require("selenium-webdriver");
3377
+ import_selenium_webdriver31 = require("selenium-webdriver");
3261
3378
  init_AbstractForm();
3262
3379
  init_waitElementIsVisible();
3263
3380
  init_createSubFormInstance();
@@ -3282,7 +3399,7 @@ var init_Form = __esm({
3282
3399
  */
3283
3400
  async getTitleText() {
3284
3401
  if (await this.isModal()) {
3285
- const titleEl2 = await this.driver.findElement(import_selenium_webdriver29.By.css(`${this.popupContainerCssSelector} .popup-title`));
3402
+ const titleEl2 = await this.driver.findElement(import_selenium_webdriver31.By.css(`${this.popupContainerCssSelector} .popup-title`));
3286
3403
  await waitElementIsVisible({
3287
3404
  element: titleEl2,
3288
3405
  driver: this.driver,
@@ -3290,7 +3407,7 @@ var init_Form = __esm({
3290
3407
  });
3291
3408
  return titleEl2.getText();
3292
3409
  }
3293
- let titleEl = await this.driver.findElement(import_selenium_webdriver29.By.className("main-toolbar-form-title"));
3410
+ let titleEl = await this.driver.findElement(import_selenium_webdriver31.By.className("main-toolbar-form-title"));
3294
3411
  return titleEl.getText();
3295
3412
  }
3296
3413
  setSubFormMode() {
@@ -3309,7 +3426,7 @@ var init_Form = __esm({
3309
3426
  async subForm(name, options = {}) {
3310
3427
  const { isDockPanel = false } = options;
3311
3428
  const cssSelector = subformCssSelector(this.containerCssSelector, subFormTestId(name), isDockPanel);
3312
- const byCssSelector = import_selenium_webdriver29.By.css(cssSelector);
3429
+ const byCssSelector = import_selenium_webdriver31.By.css(cssSelector);
3313
3430
  const subFormEl = await this.driver.findElement(byCssSelector);
3314
3431
  await waitElementIsVisible({
3315
3432
  element: subFormEl,
@@ -3339,12 +3456,12 @@ var FormEdit_exports = {};
3339
3456
  __export(FormEdit_exports, {
3340
3457
  default: () => FormEdit
3341
3458
  });
3342
- var import_selenium_webdriver30, FormEdit;
3459
+ var import_selenium_webdriver32, FormEdit;
3343
3460
  var init_FormEdit = __esm({
3344
3461
  "src/pageObjects/elements/Forms/FormEdit.ts"() {
3345
3462
  "use strict";
3346
3463
  init_Form();
3347
- import_selenium_webdriver30 = require("selenium-webdriver");
3464
+ import_selenium_webdriver32 = require("selenium-webdriver");
3348
3465
  init_FormField();
3349
3466
  init_actions();
3350
3467
  init_wait();
@@ -3380,7 +3497,7 @@ var init_FormEdit = __esm({
3380
3497
  */
3381
3498
  async isSaveButtonDisabled() {
3382
3499
  const saveButtonCssSelector = await this.getButtonCssSelector(this.saveButtonId);
3383
- const saveButton = await this.driver.findElement(import_selenium_webdriver30.By.css(saveButtonCssSelector));
3500
+ const saveButton = await this.driver.findElement(import_selenium_webdriver32.By.css(saveButtonCssSelector));
3384
3501
  const result = await saveButton.getAttribute("aria-disabled");
3385
3502
  return result === "true";
3386
3503
  }
@@ -3393,7 +3510,7 @@ var init_FormEdit = __esm({
3393
3510
  */
3394
3511
  async saveButtonClick() {
3395
3512
  const saveButtonCssSelector = await this.getButtonCssSelector(this.saveButtonId);
3396
- const saveButton = await this.driver.findElement(import_selenium_webdriver30.By.css(saveButtonCssSelector));
3513
+ const saveButton = await this.driver.findElement(import_selenium_webdriver32.By.css(saveButtonCssSelector));
3397
3514
  await wait(async () => !await this.isSaveButtonDisabled(), this.driver, "Button is disabled");
3398
3515
  await click(saveButton, this.driver);
3399
3516
  }
@@ -3406,7 +3523,7 @@ var init_FormEdit = __esm({
3406
3523
  */
3407
3524
  async closeButtonClick() {
3408
3525
  const closeButtonCssSelector = await this.getButtonCssSelector(this.closeButtonId);
3409
- const closeButton = await this.driver.findElement(import_selenium_webdriver30.By.css(closeButtonCssSelector));
3526
+ const closeButton = await this.driver.findElement(import_selenium_webdriver32.By.css(closeButtonCssSelector));
3410
3527
  await click(closeButton, this.driver);
3411
3528
  }
3412
3529
  };
@@ -3722,7 +3839,7 @@ init_FilterPanel();
3722
3839
 
3723
3840
  // src/pageObjects/elements/Dialog.ts
3724
3841
  init_AbstractElement();
3725
- var import_selenium_webdriver31 = require("selenium-webdriver");
3842
+ var import_selenium_webdriver33 = require("selenium-webdriver");
3726
3843
  init_AbstractButton();
3727
3844
  var DIALOG_CLASS = ".d5-dialog";
3728
3845
  var DIALOG_TITLE_CLASS = ".dialog__title";
@@ -3737,11 +3854,14 @@ var DialogButton = class extends AbstractButton {
3737
3854
  }
3738
3855
  async getElement() {
3739
3856
  const panel = await super.getElement();
3740
- return panel.findElement(import_selenium_webdriver31.By.xpath(buttonByTextXpath(this.text)));
3857
+ return panel.findElement(import_selenium_webdriver33.By.xpath(buttonByTextXpath(this.text)));
3741
3858
  }
3742
3859
  buttonNotDisplayedError() {
3743
3860
  return `Dialog button ${this.text} cannot be clicked. It is not displayed or it is disabled`;
3744
3861
  }
3862
+ getTitle() {
3863
+ throw new Error(`Method "getTitle()" is not working.`);
3864
+ }
3745
3865
  };
3746
3866
  var Dialog = class extends AbstractElement {
3747
3867
  constructor(driver) {
@@ -3757,11 +3877,11 @@ var Dialog = class extends AbstractElement {
3757
3877
  return this.joinRelativeCssSelectors([DIALOG_CLASS, DIALOG_BUTTONS_PANEL_CLASS]);
3758
3878
  }
3759
3879
  async title() {
3760
- const el = await this.driver.findElement(import_selenium_webdriver31.By.css(this.titleSelector));
3880
+ const el = await this.driver.findElement(import_selenium_webdriver33.By.css(this.titleSelector));
3761
3881
  return await el.getText();
3762
3882
  }
3763
3883
  async text() {
3764
- const el = await this.driver.findElement(import_selenium_webdriver31.By.css(this.textSelector));
3884
+ const el = await this.driver.findElement(import_selenium_webdriver33.By.css(this.textSelector));
3765
3885
  return await el.getText();
3766
3886
  }
3767
3887
  button(text) {
@@ -260,6 +260,7 @@ interface Button {
260
260
  click(): Promise<void>;
261
261
  isDisabled(): Promise<boolean>;
262
262
  isDisplayed(): Promise<boolean>;
263
+ getTitle(): Promise<string>;
263
264
  }
264
265
  declare abstract class AbstractButton extends AbstractElementWithParent implements Button {
265
266
  protected constructor(parentCssSelector: string, elementCssSelector: string, driver?: WebDriver);
@@ -267,6 +268,7 @@ declare abstract class AbstractButton extends AbstractElementWithParent implemen
267
268
  click(): Promise<void>;
268
269
  isDisabled(): Promise<boolean>;
269
270
  isDisplayed(): Promise<boolean>;
271
+ abstract getTitle(): Promise<string>;
270
272
  }
271
273
 
272
274
  declare abstract class DXButton extends AbstractButton {
@@ -277,6 +279,7 @@ declare class FormButton extends DXButton {
277
279
  private readonly name;
278
280
  constructor(parentCssSelector: string, formName: string, name: string, driver?: WebDriver);
279
281
  protected buttonNotDisplayedError(): string;
282
+ getTitle(): Promise<string>;
280
283
  }
281
284
 
282
285
  interface Group<TItem = unknown> {
@@ -483,9 +486,11 @@ declare abstract class AbstractDropDownMenuList extends AbstractElementWithParen
483
486
  protected abstract getButtonTitleBy(name: string): By;
484
487
  protected buttonNotDisplayedError(name: string): string;
485
488
  private clickItemBy;
486
- private clickItemByPath;
489
+ private getElementByPath;
487
490
  clickButton(name: string | string[]): Promise<void>;
488
491
  clickButtonByTitle(title: string | string[]): Promise<void>;
492
+ getMenuItemElementByTitle(title: string | string[]): Promise<WebElement>;
493
+ getMenuItemElementByName(name: string | string[]): Promise<WebElement>;
489
494
  isVisible(): Promise<boolean>;
490
495
  }
491
496
 
@@ -495,10 +500,21 @@ declare abstract class AbstractDropDownMenuButton extends AbstractElementWithPar
495
500
  protected openDropdownMenu(): Promise<void>;
496
501
  clickButton(name: string | string[]): Promise<void>;
497
502
  clickButtonByTitle(title: string | string[]): Promise<void>;
503
+ getMenuItemElementByTitle(title: string | string[]): Promise<WebElement>;
504
+ getMenuItemElementByName(name: string | string[]): Promise<WebElement>;
498
505
  }
499
506
 
500
507
  declare class ToolbarMenu extends AbstractDropDownMenuButton {
501
508
  constructor(parentCssSelector: string, formName: string, name: string, driver?: WebDriver);
509
+ private checkNameValue;
510
+ private checkTitleValue;
511
+ private buttonByName;
512
+ private buttonByTitle;
513
+ buttonIsDisplayed(name: string | string[]): Promise<boolean>;
514
+ buttonByTitleIsDisplayed(title: string | string[]): Promise<boolean>;
515
+ buttonTitle(name: string | string[]): Promise<string>;
516
+ buttonIsDisabled(name: string | string[]): Promise<boolean>;
517
+ buttonByTitleIsDisabled(title: string | string[]): Promise<boolean>;
502
518
  clickButton(name: string | string[]): Promise<void>;
503
519
  clickButtonByTitle(title: string | string[]): Promise<void>;
504
520
  }
@@ -512,6 +528,7 @@ declare class ToolbarItem extends AbstractElementWithParent implements Button {
512
528
  click(): Promise<void>;
513
529
  isDisabled(): Promise<boolean>;
514
530
  isDisplayed(): Promise<boolean>;
531
+ getTitle(): Promise<string>;
515
532
  get menu(): ToolbarMenu;
516
533
  }
517
534
 
@@ -968,6 +985,7 @@ declare class DialogButton extends AbstractButton implements Button {
968
985
  constructor(parentCssSelector: string, text: string, driver?: WebDriver);
969
986
  getElement(): Promise<WebElement>;
970
987
  protected buttonNotDisplayedError(): string;
988
+ getTitle(): Promise<string>;
971
989
  }
972
990
  declare class Dialog extends AbstractElement {
973
991
  constructor(driver?: WebDriver);
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  TreeView
3
- } from "./chunk-LMFYREYI.mjs";
3
+ } from "./chunk-MDGM7U6W.mjs";
4
4
  import {
5
5
  FilterPanel,
6
6
  FormFilterField,
7
7
  ListForm,
8
8
  PanelFilterField
9
- } from "./chunk-PMZQRKUZ.mjs";
9
+ } from "./chunk-SYZ2HQR7.mjs";
10
10
  import {
11
11
  FormEdit
12
- } from "./chunk-WDYVVF7O.mjs";
12
+ } from "./chunk-NXRKCIYK.mjs";
13
13
  import {
14
14
  AbstractButton,
15
15
  AbstractElement,
@@ -32,7 +32,7 @@ import {
32
32
  wait,
33
33
  waitElementIsClickable_default,
34
34
  waitElementIsVisible
35
- } from "./chunk-MV63JF3H.mjs";
35
+ } from "./chunk-VJLNAL57.mjs";
36
36
 
37
37
  // src/pageObjects/pages/LoginPage.ts
38
38
  var LOGIN_PATH = "/login";
@@ -278,6 +278,9 @@ var DialogButton = class extends AbstractButton {
278
278
  buttonNotDisplayedError() {
279
279
  return `Dialog button ${this.text} cannot be clicked. It is not displayed or it is disabled`;
280
280
  }
281
+ getTitle() {
282
+ throw new Error(`Method "getTitle()" is not working.`);
283
+ }
281
284
  };
282
285
  var Dialog = class extends AbstractElement {
283
286
  constructor(driver) {
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  TreeView
3
- } from "./chunk-LMFYREYI.mjs";
3
+ } from "./chunk-MDGM7U6W.mjs";
4
4
  import {
5
5
  FilterPanel,
6
6
  FormFilterField,
7
7
  ListForm,
8
8
  PanelFilterField
9
- } from "./chunk-PMZQRKUZ.mjs";
9
+ } from "./chunk-SYZ2HQR7.mjs";
10
10
  import {
11
11
  FormEdit
12
- } from "./chunk-WDYVVF7O.mjs";
12
+ } from "./chunk-NXRKCIYK.mjs";
13
13
  import {
14
14
  AbstractButton,
15
15
  AbstractElement,
@@ -32,7 +32,7 @@ import {
32
32
  wait,
33
33
  waitElementIsClickable_default,
34
34
  waitElementIsVisible
35
- } from "./chunk-MV63JF3H.mjs";
35
+ } from "./chunk-VJLNAL57.mjs";
36
36
 
37
37
  // src/pageObjects/pages/LoginPage.ts
38
38
  var LOGIN_PATH = "/login";
@@ -278,6 +278,9 @@ var DialogButton = class extends AbstractButton {
278
278
  buttonNotDisplayedError() {
279
279
  return `Dialog button ${this.text} cannot be clicked. It is not displayed or it is disabled`;
280
280
  }
281
+ getTitle() {
282
+ throw new Error(`Method "getTitle()" is not working.`);
283
+ }
281
284
  };
282
285
  var Dialog = class extends AbstractElement {
283
286
  constructor(driver) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "d5-testing-library",
3
- "version": "1.8.0-alpha.21",
3
+ "version": "1.8.0-alpha.23",
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-WDYVVF7O.mjs";
4
- import "./chunk-MV63JF3H.mjs";
5
- export {
6
- FormEdit as default
7
- };
@@ -1,7 +0,0 @@
1
- import {
2
- ListForm
3
- } from "./chunk-PMZQRKUZ.mjs";
4
- import "./chunk-MV63JF3H.mjs";
5
- export {
6
- ListForm as default
7
- };
@@ -1,8 +0,0 @@
1
- import {
2
- TreeView
3
- } from "./chunk-LMFYREYI.mjs";
4
- import "./chunk-PMZQRKUZ.mjs";
5
- import "./chunk-MV63JF3H.mjs";
6
- export {
7
- TreeView as default
8
- };