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.
- package/dist/FormEdit-ZDBS5OJX.mjs +7 -0
- package/dist/ListForm-6PRF2IKJ.mjs +7 -0
- package/dist/TreeView-YHZLUCNA.mjs +8 -0
- package/dist/{chunk-LMFYREYI.mjs → chunk-MDGM7U6W.mjs} +1 -1
- package/dist/{chunk-WDYVVF7O.mjs → chunk-NXRKCIYK.mjs} +1 -1
- package/dist/{chunk-PMZQRKUZ.mjs → chunk-SYZ2HQR7.mjs} +145 -28
- package/dist/{chunk-MV63JF3H.mjs → chunk-VJLNAL57.mjs} +13 -19
- package/dist/cjs/d5-testing-library.cjs +187 -67
- package/dist/d5-testing-library.d.ts +19 -1
- package/dist/d5-testing-library.legacy-esm.js +7 -4
- package/dist/d5-testing-library.mjs +7 -4
- package/package.json +1 -1
- package/dist/FormEdit-GTZISTTI.mjs +0 -7
- package/dist/ListForm-EM7E4ZMM.mjs +0 -7
- package/dist/TreeView-F2XF44N2.mjs +0 -8
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
wait,
|
|
18
18
|
waitElementIsClickable_default,
|
|
19
19
|
waitElementIsVisible
|
|
20
|
-
} from "./chunk-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
317
|
-
|
|
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
|
-
|
|
320
|
-
return 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
|
-
|
|
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,
|
|
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/
|
|
565
|
-
var
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
|
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(
|
|
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(
|
|
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
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
|
592
|
-
await
|
|
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
|
-
|
|
604
|
-
await
|
|
605
|
-
await actions.move({ origin:
|
|
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-
|
|
1286
|
+
SubFormFactoryClass = (await import("./ListForm-6PRF2IKJ.mjs")).default;
|
|
1293
1287
|
break;
|
|
1294
1288
|
case "3" /* TREE */:
|
|
1295
|
-
SubFormFactoryClass = (await import("./TreeView-
|
|
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-
|
|
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
|
|
811
|
-
await
|
|
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
|
-
|
|
823
|
-
await
|
|
824
|
-
await actions.move({ origin:
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
2049
|
-
return 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/
|
|
2318
|
-
var
|
|
2319
|
-
var
|
|
2320
|
-
"src/pageObjects/elements/TableToolbar/
|
|
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
|
-
|
|
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,
|
|
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/
|
|
2337
|
-
var
|
|
2338
|
-
var
|
|
2339
|
-
"src/pageObjects/elements/TableToolbar/
|
|
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
|
-
|
|
2343
|
-
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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 =
|
|
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
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
|
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-
|
|
3
|
+
} from "./chunk-MDGM7U6W.mjs";
|
|
4
4
|
import {
|
|
5
5
|
FilterPanel,
|
|
6
6
|
FormFilterField,
|
|
7
7
|
ListForm,
|
|
8
8
|
PanelFilterField
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-SYZ2HQR7.mjs";
|
|
10
10
|
import {
|
|
11
11
|
FormEdit
|
|
12
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
3
|
+
} from "./chunk-MDGM7U6W.mjs";
|
|
4
4
|
import {
|
|
5
5
|
FilterPanel,
|
|
6
6
|
FormFilterField,
|
|
7
7
|
ListForm,
|
|
8
8
|
PanelFilterField
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-SYZ2HQR7.mjs";
|
|
10
10
|
import {
|
|
11
11
|
FormEdit
|
|
12
|
-
} from "./chunk-
|
|
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-
|
|
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