d5-testing-library 1.8.0-alpha.3 → 1.8.0-alpha.5
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-TOZGO3OB.mjs +7 -0
- package/dist/ListForm-2ZNDPNHK.mjs +7 -0
- package/dist/TreeView-RSM2623Z.mjs +8 -0
- package/dist/{chunk-MH6NCS6F.mjs → chunk-35I6E2YD.mjs} +1 -1
- package/dist/{chunk-2DQ5YCRB.mjs → chunk-AHJAA7VV.mjs} +1 -1
- package/dist/{chunk-R25O5O4T.mjs → chunk-E4DNUJAB.mjs} +1 -1
- package/dist/{chunk-F57G2ZDW.mjs → chunk-NWVB4S3G.mjs} +155 -27
- package/dist/cjs/d5-testing-library.cjs +215 -63
- package/dist/d5-testing-library.d.ts +17 -1
- package/dist/d5-testing-library.legacy-esm.js +4 -4
- package/dist/d5-testing-library.mjs +4 -4
- package/package.json +1 -1
- package/dist/FormEdit-2USHOJID.mjs +0 -7
- package/dist/ListForm-KXMIP4EA.mjs +0 -7
- package/dist/TreeView-5QQREFJ6.mjs +0 -8
|
@@ -262,6 +262,7 @@ var ControlClass = /* @__PURE__ */ ((ControlClass2) => {
|
|
|
262
262
|
ControlClass2["SingleDateRange"] = "single-date-range-control";
|
|
263
263
|
ControlClass2["BooleanSelector"] = "buttons-group";
|
|
264
264
|
ControlClass2["ButtonGroup"] = "button-group-field";
|
|
265
|
+
ControlClass2["HeaderFilterDictionary"] = "header-filter-dictionary";
|
|
265
266
|
return ControlClass2;
|
|
266
267
|
})(ControlClass || {});
|
|
267
268
|
|
|
@@ -679,6 +680,97 @@ var DateEditor = class extends AbstractDXEditorWithInput {
|
|
|
679
680
|
}
|
|
680
681
|
};
|
|
681
682
|
|
|
683
|
+
// src/pageObjects/elements/Editors/HeaderFilterDictionary.ts
|
|
684
|
+
import { By as By11, Key as Key4 } from "selenium-webdriver";
|
|
685
|
+
var TAGS_SELECTOR2 = ".dx-tag .tag-text";
|
|
686
|
+
var DX_TAG_CONTAINER2 = "dx-tag-container";
|
|
687
|
+
var DX_TEXTEDITOR_EMPTY3 = "dx-texteditor-empty";
|
|
688
|
+
var CUSTOM_OPTION_LIST_SELECTOR = "custom-list";
|
|
689
|
+
var SELECT_BOX_OPTION_TEXT_CONTAINER_CLASS2 = "d5-multi-select-item";
|
|
690
|
+
var TAG_BOX_LIST_ITEM_SELECTOR2 = '.dx-overlay-wrapper .dx-list-item[aria-selected="true"]';
|
|
691
|
+
var combinedOptionHeaderFilterDictValueXpath = (value) => `//div[contains(@class, '${SELECT_BOX_OPTION_TEXT_CONTAINER_CLASS2}') and contains(text(), '${value}')]`;
|
|
692
|
+
var dropDownHeaderFilterDictionaryOptionClick = async (optionValue, driver, dataTEST = "", delay = true) => {
|
|
693
|
+
const { implicit } = await driver.manage().getTimeouts();
|
|
694
|
+
let optElement = null;
|
|
695
|
+
const timeout = delay ? implicit : 600;
|
|
696
|
+
let err = null;
|
|
697
|
+
try {
|
|
698
|
+
const calendarPopoverSelector = byTestIdCssSelector(`${dataTEST}`);
|
|
699
|
+
await driver.manage().setTimeouts({ implicit: timeout });
|
|
700
|
+
const calendarPopoverElement = await driver.findElement(By11.css(calendarPopoverSelector));
|
|
701
|
+
const customOptionList = calendarPopoverElement.findElement(By11.css(`.${CUSTOM_OPTION_LIST_SELECTOR}`));
|
|
702
|
+
optElement = await customOptionList.findElement(By11.xpath(combinedOptionHeaderFilterDictValueXpath(optionValue)));
|
|
703
|
+
await click(optElement, driver);
|
|
704
|
+
} catch (e) {
|
|
705
|
+
err = new Error(`Item not found: "${optionValue}"`);
|
|
706
|
+
} finally {
|
|
707
|
+
await driver.manage().setTimeouts({ implicit });
|
|
708
|
+
}
|
|
709
|
+
if (err)
|
|
710
|
+
throw err;
|
|
711
|
+
};
|
|
712
|
+
var HeaderFilterDictionary = class extends AbstractDXEditorWithInput {
|
|
713
|
+
constructor(parentCssSelector, elementCssSelector, driver) {
|
|
714
|
+
super(parentCssSelector, elementCssSelector, driver);
|
|
715
|
+
this.setClearStrategy(new ClearButtonStrategy(this.getFullCssSelector(), this.driver));
|
|
716
|
+
}
|
|
717
|
+
async setTagBoxInputValue(values) {
|
|
718
|
+
const lastElement = values[values.length - 1];
|
|
719
|
+
const inputEl = await this.getInputElement();
|
|
720
|
+
await inputEl.click();
|
|
721
|
+
for (const value of values) {
|
|
722
|
+
await this.selectOption(inputEl, value, lastElement);
|
|
723
|
+
}
|
|
724
|
+
}
|
|
725
|
+
async waitOptionSelection() {
|
|
726
|
+
await fixElementStaleError(By11.css(TAG_BOX_LIST_ITEM_SELECTOR2), this.driver);
|
|
727
|
+
}
|
|
728
|
+
async selectOption(inputEl, value, lastElement) {
|
|
729
|
+
try {
|
|
730
|
+
await inputEl.sendKeys(value);
|
|
731
|
+
const dataTEST = await this.getDataTestId();
|
|
732
|
+
await dropDownHeaderFilterDictionaryOptionClick(value, this.driver, dataTEST);
|
|
733
|
+
const textLength = await inputEl.getAttribute("value").then((value2) => value2.length);
|
|
734
|
+
for (let i = 0; i < textLength; i++) {
|
|
735
|
+
await inputEl.sendKeys(Key4.BACK_SPACE);
|
|
736
|
+
}
|
|
737
|
+
} catch (error) {
|
|
738
|
+
throw error;
|
|
739
|
+
}
|
|
740
|
+
await this.waitOptionSelection();
|
|
741
|
+
if (value !== lastElement) {
|
|
742
|
+
await inputEl.clear();
|
|
743
|
+
}
|
|
744
|
+
}
|
|
745
|
+
async getHeaderFilterDictionaryInputValue() {
|
|
746
|
+
if (await this.isHeaderFilterDictionaryEmpty()) {
|
|
747
|
+
return [];
|
|
748
|
+
}
|
|
749
|
+
const tags = await this.driver.findElements(
|
|
750
|
+
By11.css(`${this.getFullCssSelector()} .${DX_TAG_CONTAINER2} ${TAGS_SELECTOR2}`)
|
|
751
|
+
);
|
|
752
|
+
const values = [];
|
|
753
|
+
for (const tag of tags) {
|
|
754
|
+
values.push(await tag.getAttribute("textContent"));
|
|
755
|
+
}
|
|
756
|
+
return values;
|
|
757
|
+
}
|
|
758
|
+
async isHeaderFilterDictionaryEmpty() {
|
|
759
|
+
const classAttribute = await this.getClasses();
|
|
760
|
+
return classAttribute.includes(DX_TEXTEDITOR_EMPTY3);
|
|
761
|
+
}
|
|
762
|
+
async getValue() {
|
|
763
|
+
const value = await this.getHeaderFilterDictionaryInputValue();
|
|
764
|
+
return value.length ? value : null;
|
|
765
|
+
}
|
|
766
|
+
async setValue(values) {
|
|
767
|
+
if (!Array.isArray(values)) {
|
|
768
|
+
values = [values];
|
|
769
|
+
}
|
|
770
|
+
await this.setTagBoxInputValue(values);
|
|
771
|
+
}
|
|
772
|
+
};
|
|
773
|
+
|
|
682
774
|
// src/pageObjects/elements/Editors/editorFactory.ts
|
|
683
775
|
var editorFactory = async (parentCssSelector, elementCssSelector, driver) => {
|
|
684
776
|
const elementInstance = new AbstractFormElement(parentCssSelector, elementCssSelector, driver);
|
|
@@ -702,6 +794,8 @@ var editorFactory = async (parentCssSelector, elementCssSelector, driver) => {
|
|
|
702
794
|
return new BooleanSelector(parentCssSelector, elementCssSelector, driver);
|
|
703
795
|
if (classSting.includes("button-group-field" /* ButtonGroup */))
|
|
704
796
|
return new ButtonGroup(parentCssSelector, elementCssSelector, driver);
|
|
797
|
+
if (classSting.includes("header-filter-dictionary" /* HeaderFilterDictionary */))
|
|
798
|
+
return new HeaderFilterDictionary(parentCssSelector, elementCssSelector, driver);
|
|
705
799
|
throw new Error("Unknown type of editor. Please write ticket to the support");
|
|
706
800
|
};
|
|
707
801
|
|
|
@@ -736,6 +830,44 @@ function createFormButtonTestId(formName, itemName) {
|
|
|
736
830
|
function createSubSystemTestId(itemName) {
|
|
737
831
|
return `${"subsystem-item" /* SUBSYSTEM_ITEM */}-${itemName}`;
|
|
738
832
|
}
|
|
833
|
+
function createEditorButtonTestId(itemName) {
|
|
834
|
+
return `${"editor-button" /* EDITOR_BUTTON */}-${itemName}`;
|
|
835
|
+
}
|
|
836
|
+
|
|
837
|
+
// src/utils/waitElementIsClickable.ts
|
|
838
|
+
async function waitElementIsClickable({
|
|
839
|
+
element,
|
|
840
|
+
timeout,
|
|
841
|
+
errorMessage,
|
|
842
|
+
driver
|
|
843
|
+
}) {
|
|
844
|
+
driver = driver ?? config().driver;
|
|
845
|
+
await wait(async () => {
|
|
846
|
+
const isDisabled = await element.getCssValue("pointer-events") === "none";
|
|
847
|
+
return await element.isDisplayed() && !isDisabled;
|
|
848
|
+
}, driver, errorMessage, timeout ?? config().timeout);
|
|
849
|
+
}
|
|
850
|
+
|
|
851
|
+
// src/pageObjects/elements/EditorButton.ts
|
|
852
|
+
var EditorButton = class extends AbstractElementWithParent {
|
|
853
|
+
name;
|
|
854
|
+
constructor(parentCssSelector, name, driver) {
|
|
855
|
+
super(parentCssSelector, byTestIdCssSelector(createEditorButtonTestId(name)), driver);
|
|
856
|
+
this.name = name;
|
|
857
|
+
}
|
|
858
|
+
buttonNotDisplayedError() {
|
|
859
|
+
return `Editor Button ${this.name} cannot be clicked. It is not displayed or it is disabled`;
|
|
860
|
+
}
|
|
861
|
+
async click() {
|
|
862
|
+
const button = await this.getElement();
|
|
863
|
+
await waitElementIsClickable({
|
|
864
|
+
element: button,
|
|
865
|
+
errorMessage: this.buttonNotDisplayedError(),
|
|
866
|
+
driver: this.driver
|
|
867
|
+
});
|
|
868
|
+
await click(button, this.driver);
|
|
869
|
+
}
|
|
870
|
+
};
|
|
739
871
|
|
|
740
872
|
// src/pageObjects/elements/AbstractEditor.ts
|
|
741
873
|
var AbstractEditor = class extends AbstractElementWithParent {
|
|
@@ -802,6 +934,16 @@ var AbstractEditor = class extends AbstractElementWithParent {
|
|
|
802
934
|
await this.initEditor();
|
|
803
935
|
return this.editor.isReadonly();
|
|
804
936
|
}
|
|
937
|
+
/**
|
|
938
|
+
* Находит кнопку на поле по имени
|
|
939
|
+
* @example
|
|
940
|
+
* const form= new MyForm();
|
|
941
|
+
* //...
|
|
942
|
+
* await form.field('Name').button('editorButton).click()
|
|
943
|
+
*/
|
|
944
|
+
button(name) {
|
|
945
|
+
return new EditorButton(this.getFullCssSelector(), name, this.driver);
|
|
946
|
+
}
|
|
805
947
|
};
|
|
806
948
|
|
|
807
949
|
// src/pageObjects/elements/FormField.ts
|
|
@@ -812,21 +954,7 @@ var FormField = class extends AbstractEditor {
|
|
|
812
954
|
};
|
|
813
955
|
|
|
814
956
|
// src/pageObjects/elements/Forms/Form.ts
|
|
815
|
-
import { By as
|
|
816
|
-
|
|
817
|
-
// src/utils/waitElementIsClickable.ts
|
|
818
|
-
async function waitElementIsClickable({
|
|
819
|
-
element,
|
|
820
|
-
timeout,
|
|
821
|
-
errorMessage,
|
|
822
|
-
driver
|
|
823
|
-
}) {
|
|
824
|
-
driver = driver ?? config().driver;
|
|
825
|
-
await wait(async () => {
|
|
826
|
-
const isDisabled = await element.getCssValue("pointer-events") === "none";
|
|
827
|
-
return await element.isDisplayed() && !isDisabled;
|
|
828
|
-
}, driver, errorMessage, timeout ?? config().timeout);
|
|
829
|
-
}
|
|
957
|
+
import { By as By15 } from "selenium-webdriver";
|
|
830
958
|
|
|
831
959
|
// src/pageObjects/elements/TableToolbar/AbstractButton.ts
|
|
832
960
|
var AbstractButton = class extends AbstractElementWithParent {
|
|
@@ -849,7 +977,7 @@ var AbstractButton = class extends AbstractElementWithParent {
|
|
|
849
977
|
};
|
|
850
978
|
|
|
851
979
|
// src/pageObjects/elements/DXComponents/DXButton.ts
|
|
852
|
-
import { By as
|
|
980
|
+
import { By as By12 } from "selenium-webdriver";
|
|
853
981
|
var DXButton = class extends AbstractButton {
|
|
854
982
|
async getText() {
|
|
855
983
|
const classes = await this.getClasses();
|
|
@@ -857,7 +985,7 @@ var DXButton = class extends AbstractButton {
|
|
|
857
985
|
return null;
|
|
858
986
|
}
|
|
859
987
|
const el = await this.getElement();
|
|
860
|
-
const textEl = el.findElement(
|
|
988
|
+
const textEl = el.findElement(By12.className("dx-button-text"));
|
|
861
989
|
return await textEl.getText();
|
|
862
990
|
}
|
|
863
991
|
};
|
|
@@ -887,7 +1015,7 @@ var Panel = class extends AbstractGroup {
|
|
|
887
1015
|
};
|
|
888
1016
|
|
|
889
1017
|
// src/pageObjects/elements/Groups/TabPanel.ts
|
|
890
|
-
import { By as
|
|
1018
|
+
import { By as By13 } from "selenium-webdriver";
|
|
891
1019
|
var TabPanelItem = class extends AbstractGroup {
|
|
892
1020
|
constructor(parentCssSelector, elementCssSelector, driver) {
|
|
893
1021
|
super(parentCssSelector, elementCssSelector, driver);
|
|
@@ -897,7 +1025,7 @@ var TabPanelItem = class extends AbstractGroup {
|
|
|
897
1025
|
}
|
|
898
1026
|
async isActive() {
|
|
899
1027
|
const tabPanelItemElement = await this.getElement();
|
|
900
|
-
const grandparentTab = await tabPanelItemElement.findElement(
|
|
1028
|
+
const grandparentTab = await tabPanelItemElement.findElement(By13.xpath('ancestor::div[@role="tab"][1]'));
|
|
901
1029
|
return await grandparentTab.getAttribute("aria-selected") === "true";
|
|
902
1030
|
}
|
|
903
1031
|
async getTitle() {
|
|
@@ -914,7 +1042,7 @@ var TabPanel = class extends AbstractGroup {
|
|
|
914
1042
|
};
|
|
915
1043
|
|
|
916
1044
|
// src/pageObjects/elements/Groups/Accordion/AccordionItem.ts
|
|
917
|
-
import { By as
|
|
1045
|
+
import { By as By14 } from "selenium-webdriver";
|
|
918
1046
|
var ACCORDION_TITLE_CONTAINER = "accordion-title-container";
|
|
919
1047
|
var AccordionItem = class extends AbstractGroup {
|
|
920
1048
|
constructor(parentCssSelector, elementCssSelector, driver) {
|
|
@@ -926,7 +1054,7 @@ var AccordionItem = class extends AbstractGroup {
|
|
|
926
1054
|
}
|
|
927
1055
|
async clickAccordionItemTitle() {
|
|
928
1056
|
const accordionElement = await this.getElement();
|
|
929
|
-
const accordTitleElement = await accordionElement.findElement(
|
|
1057
|
+
const accordTitleElement = await accordionElement.findElement(By14.className(ACCORDION_TITLE_CONTAINER));
|
|
930
1058
|
await accordTitleElement.click();
|
|
931
1059
|
}
|
|
932
1060
|
async click() {
|
|
@@ -1114,15 +1242,15 @@ async function classDependencyInjector(formType) {
|
|
|
1114
1242
|
let SubFormFactoryClass;
|
|
1115
1243
|
switch (formType) {
|
|
1116
1244
|
case "1" /* LIST */:
|
|
1117
|
-
SubFormFactoryClass = (await import("./ListForm-
|
|
1245
|
+
SubFormFactoryClass = (await import("./ListForm-2ZNDPNHK.mjs")).default;
|
|
1118
1246
|
break;
|
|
1119
1247
|
case "3" /* TREE */:
|
|
1120
|
-
SubFormFactoryClass = (await import("./TreeView-
|
|
1248
|
+
SubFormFactoryClass = (await import("./TreeView-RSM2623Z.mjs")).default;
|
|
1121
1249
|
break;
|
|
1122
1250
|
case "2" /* EDIT */:
|
|
1123
1251
|
case "99" /* FREE_FORM */:
|
|
1124
1252
|
case "4" /* REPORT */:
|
|
1125
|
-
SubFormFactoryClass = (await import("./FormEdit-
|
|
1253
|
+
SubFormFactoryClass = (await import("./FormEdit-TOZGO3OB.mjs")).default;
|
|
1126
1254
|
break;
|
|
1127
1255
|
default:
|
|
1128
1256
|
throw new Error(`Unsupported form type ${formType}`);
|
|
@@ -1152,10 +1280,10 @@ var Form = class extends AbstractForm {
|
|
|
1152
1280
|
*/
|
|
1153
1281
|
async getTitleText() {
|
|
1154
1282
|
if (await this.isModal()) {
|
|
1155
|
-
const titleEl2 = await this.driver.findElement(
|
|
1283
|
+
const titleEl2 = await this.driver.findElement(By15.css(`${this.popupContainerCssSelector} .popup-title`));
|
|
1156
1284
|
return titleEl2.getText();
|
|
1157
1285
|
}
|
|
1158
|
-
let titleEl = await this.driver.findElement(
|
|
1286
|
+
let titleEl = await this.driver.findElement(By15.className("main-toolbar-form-title"));
|
|
1159
1287
|
return titleEl.getText();
|
|
1160
1288
|
}
|
|
1161
1289
|
setSubFormMode() {
|
|
@@ -1173,7 +1301,7 @@ var Form = class extends AbstractForm {
|
|
|
1173
1301
|
*/
|
|
1174
1302
|
async subForm(name) {
|
|
1175
1303
|
const cssSelector = subformCssSelector(this.containerCssSelector, subFormTestId(name));
|
|
1176
|
-
const byCssSelector =
|
|
1304
|
+
const byCssSelector = By15.css(cssSelector);
|
|
1177
1305
|
const subFormEl = await this.driver.findElement(byCssSelector);
|
|
1178
1306
|
await waitElementIsVisible({
|
|
1179
1307
|
element: subFormEl,
|
|
@@ -387,6 +387,7 @@ var init_types = __esm({
|
|
|
387
387
|
ControlClass2["SingleDateRange"] = "single-date-range-control";
|
|
388
388
|
ControlClass2["BooleanSelector"] = "buttons-group";
|
|
389
389
|
ControlClass2["ButtonGroup"] = "button-group-field";
|
|
390
|
+
ControlClass2["HeaderFilterDictionary"] = "header-filter-dictionary";
|
|
390
391
|
return ControlClass2;
|
|
391
392
|
})(ControlClass || {});
|
|
392
393
|
}
|
|
@@ -918,6 +919,108 @@ var init_DateEditor = __esm({
|
|
|
918
919
|
}
|
|
919
920
|
});
|
|
920
921
|
|
|
922
|
+
// src/pageObjects/elements/Editors/HeaderFilterDictionary.ts
|
|
923
|
+
var import_selenium_webdriver15, TAGS_SELECTOR2, DX_TAG_CONTAINER2, DX_TEXTEDITOR_EMPTY3, CUSTOM_OPTION_LIST_SELECTOR, SELECT_BOX_OPTION_TEXT_CONTAINER_CLASS2, TAG_BOX_LIST_ITEM_SELECTOR2, combinedOptionHeaderFilterDictValueXpath, dropDownHeaderFilterDictionaryOptionClick, HeaderFilterDictionary;
|
|
924
|
+
var init_HeaderFilterDictionary = __esm({
|
|
925
|
+
"src/pageObjects/elements/Editors/HeaderFilterDictionary.ts"() {
|
|
926
|
+
"use strict";
|
|
927
|
+
init_AbstractEditor();
|
|
928
|
+
import_selenium_webdriver15 = require("selenium-webdriver");
|
|
929
|
+
init_actions();
|
|
930
|
+
init_locators();
|
|
931
|
+
init_ClearButtonStrategy();
|
|
932
|
+
init_fixElementStaleError();
|
|
933
|
+
TAGS_SELECTOR2 = ".dx-tag .tag-text";
|
|
934
|
+
DX_TAG_CONTAINER2 = "dx-tag-container";
|
|
935
|
+
DX_TEXTEDITOR_EMPTY3 = "dx-texteditor-empty";
|
|
936
|
+
CUSTOM_OPTION_LIST_SELECTOR = "custom-list";
|
|
937
|
+
SELECT_BOX_OPTION_TEXT_CONTAINER_CLASS2 = "d5-multi-select-item";
|
|
938
|
+
TAG_BOX_LIST_ITEM_SELECTOR2 = '.dx-overlay-wrapper .dx-list-item[aria-selected="true"]';
|
|
939
|
+
combinedOptionHeaderFilterDictValueXpath = (value) => `//div[contains(@class, '${SELECT_BOX_OPTION_TEXT_CONTAINER_CLASS2}') and contains(text(), '${value}')]`;
|
|
940
|
+
dropDownHeaderFilterDictionaryOptionClick = async (optionValue, driver, dataTEST = "", delay = true) => {
|
|
941
|
+
const { implicit } = await driver.manage().getTimeouts();
|
|
942
|
+
let optElement = null;
|
|
943
|
+
const timeout = delay ? implicit : 600;
|
|
944
|
+
let err = null;
|
|
945
|
+
try {
|
|
946
|
+
const calendarPopoverSelector = byTestIdCssSelector(`${dataTEST}`);
|
|
947
|
+
await driver.manage().setTimeouts({ implicit: timeout });
|
|
948
|
+
const calendarPopoverElement = await driver.findElement(import_selenium_webdriver15.By.css(calendarPopoverSelector));
|
|
949
|
+
const customOptionList = calendarPopoverElement.findElement(import_selenium_webdriver15.By.css(`.${CUSTOM_OPTION_LIST_SELECTOR}`));
|
|
950
|
+
optElement = await customOptionList.findElement(import_selenium_webdriver15.By.xpath(combinedOptionHeaderFilterDictValueXpath(optionValue)));
|
|
951
|
+
await click(optElement, driver);
|
|
952
|
+
} catch (e) {
|
|
953
|
+
err = new Error(`Item not found: "${optionValue}"`);
|
|
954
|
+
} finally {
|
|
955
|
+
await driver.manage().setTimeouts({ implicit });
|
|
956
|
+
}
|
|
957
|
+
if (err)
|
|
958
|
+
throw err;
|
|
959
|
+
};
|
|
960
|
+
HeaderFilterDictionary = class extends AbstractDXEditorWithInput {
|
|
961
|
+
constructor(parentCssSelector, elementCssSelector, driver) {
|
|
962
|
+
super(parentCssSelector, elementCssSelector, driver);
|
|
963
|
+
this.setClearStrategy(new ClearButtonStrategy(this.getFullCssSelector(), this.driver));
|
|
964
|
+
}
|
|
965
|
+
async setTagBoxInputValue(values) {
|
|
966
|
+
const lastElement = values[values.length - 1];
|
|
967
|
+
const inputEl = await this.getInputElement();
|
|
968
|
+
await inputEl.click();
|
|
969
|
+
for (const value of values) {
|
|
970
|
+
await this.selectOption(inputEl, value, lastElement);
|
|
971
|
+
}
|
|
972
|
+
}
|
|
973
|
+
async waitOptionSelection() {
|
|
974
|
+
await fixElementStaleError(import_selenium_webdriver15.By.css(TAG_BOX_LIST_ITEM_SELECTOR2), this.driver);
|
|
975
|
+
}
|
|
976
|
+
async selectOption(inputEl, value, lastElement) {
|
|
977
|
+
try {
|
|
978
|
+
await inputEl.sendKeys(value);
|
|
979
|
+
const dataTEST = await this.getDataTestId();
|
|
980
|
+
await dropDownHeaderFilterDictionaryOptionClick(value, this.driver, dataTEST);
|
|
981
|
+
const textLength = await inputEl.getAttribute("value").then((value2) => value2.length);
|
|
982
|
+
for (let i = 0; i < textLength; i++) {
|
|
983
|
+
await inputEl.sendKeys(import_selenium_webdriver15.Key.BACK_SPACE);
|
|
984
|
+
}
|
|
985
|
+
} catch (error) {
|
|
986
|
+
throw error;
|
|
987
|
+
}
|
|
988
|
+
await this.waitOptionSelection();
|
|
989
|
+
if (value !== lastElement) {
|
|
990
|
+
await inputEl.clear();
|
|
991
|
+
}
|
|
992
|
+
}
|
|
993
|
+
async getHeaderFilterDictionaryInputValue() {
|
|
994
|
+
if (await this.isHeaderFilterDictionaryEmpty()) {
|
|
995
|
+
return [];
|
|
996
|
+
}
|
|
997
|
+
const tags = await this.driver.findElements(
|
|
998
|
+
import_selenium_webdriver15.By.css(`${this.getFullCssSelector()} .${DX_TAG_CONTAINER2} ${TAGS_SELECTOR2}`)
|
|
999
|
+
);
|
|
1000
|
+
const values = [];
|
|
1001
|
+
for (const tag of tags) {
|
|
1002
|
+
values.push(await tag.getAttribute("textContent"));
|
|
1003
|
+
}
|
|
1004
|
+
return values;
|
|
1005
|
+
}
|
|
1006
|
+
async isHeaderFilterDictionaryEmpty() {
|
|
1007
|
+
const classAttribute = await this.getClasses();
|
|
1008
|
+
return classAttribute.includes(DX_TEXTEDITOR_EMPTY3);
|
|
1009
|
+
}
|
|
1010
|
+
async getValue() {
|
|
1011
|
+
const value = await this.getHeaderFilterDictionaryInputValue();
|
|
1012
|
+
return value.length ? value : null;
|
|
1013
|
+
}
|
|
1014
|
+
async setValue(values) {
|
|
1015
|
+
if (!Array.isArray(values)) {
|
|
1016
|
+
values = [values];
|
|
1017
|
+
}
|
|
1018
|
+
await this.setTagBoxInputValue(values);
|
|
1019
|
+
}
|
|
1020
|
+
};
|
|
1021
|
+
}
|
|
1022
|
+
});
|
|
1023
|
+
|
|
921
1024
|
// src/pageObjects/elements/Editors/editorFactory.ts
|
|
922
1025
|
var editorFactory;
|
|
923
1026
|
var init_editorFactory = __esm({
|
|
@@ -934,6 +1037,7 @@ var init_editorFactory = __esm({
|
|
|
934
1037
|
init_BooleanSelector();
|
|
935
1038
|
init_ButtonGroup();
|
|
936
1039
|
init_DateEditor();
|
|
1040
|
+
init_HeaderFilterDictionary();
|
|
937
1041
|
editorFactory = async (parentCssSelector, elementCssSelector, driver) => {
|
|
938
1042
|
const elementInstance = new AbstractFormElement(parentCssSelector, elementCssSelector, driver);
|
|
939
1043
|
const classSting = await elementInstance.getClasses();
|
|
@@ -956,6 +1060,8 @@ var init_editorFactory = __esm({
|
|
|
956
1060
|
return new BooleanSelector(parentCssSelector, elementCssSelector, driver);
|
|
957
1061
|
if (classSting.includes("button-group-field" /* ButtonGroup */))
|
|
958
1062
|
return new ButtonGroup(parentCssSelector, elementCssSelector, driver);
|
|
1063
|
+
if (classSting.includes("header-filter-dictionary" /* HeaderFilterDictionary */))
|
|
1064
|
+
return new HeaderFilterDictionary(parentCssSelector, elementCssSelector, driver);
|
|
959
1065
|
throw new Error("Unknown type of editor. Please write ticket to the support");
|
|
960
1066
|
};
|
|
961
1067
|
}
|
|
@@ -1003,6 +1109,9 @@ function createFormButtonTestId(formName, itemName) {
|
|
|
1003
1109
|
function createSubSystemTestId(itemName) {
|
|
1004
1110
|
return `${"subsystem-item" /* SUBSYSTEM_ITEM */}-${itemName}`;
|
|
1005
1111
|
}
|
|
1112
|
+
function createEditorButtonTestId(itemName) {
|
|
1113
|
+
return `${"editor-button" /* EDITOR_BUTTON */}-${itemName}`;
|
|
1114
|
+
}
|
|
1006
1115
|
var init_createDataTestId = __esm({
|
|
1007
1116
|
"src/utils/createDataTestId.ts"() {
|
|
1008
1117
|
"use strict";
|
|
@@ -1060,12 +1169,12 @@ var init_AbstractButton = __esm({
|
|
|
1060
1169
|
});
|
|
1061
1170
|
|
|
1062
1171
|
// src/pageObjects/elements/DXComponents/DXButton.ts
|
|
1063
|
-
var
|
|
1172
|
+
var import_selenium_webdriver17, DXButton;
|
|
1064
1173
|
var init_DXButton = __esm({
|
|
1065
1174
|
"src/pageObjects/elements/DXComponents/DXButton.ts"() {
|
|
1066
1175
|
"use strict";
|
|
1067
1176
|
init_AbstractButton();
|
|
1068
|
-
|
|
1177
|
+
import_selenium_webdriver17 = require("selenium-webdriver");
|
|
1069
1178
|
DXButton = class extends AbstractButton {
|
|
1070
1179
|
async getText() {
|
|
1071
1180
|
const classes = await this.getClasses();
|
|
@@ -1073,7 +1182,7 @@ var init_DXButton = __esm({
|
|
|
1073
1182
|
return null;
|
|
1074
1183
|
}
|
|
1075
1184
|
const el = await this.getElement();
|
|
1076
|
-
const textEl = el.findElement(
|
|
1185
|
+
const textEl = el.findElement(import_selenium_webdriver17.By.className("dx-button-text"));
|
|
1077
1186
|
return await textEl.getText();
|
|
1078
1187
|
}
|
|
1079
1188
|
};
|
|
@@ -1128,12 +1237,12 @@ var init_Panel = __esm({
|
|
|
1128
1237
|
});
|
|
1129
1238
|
|
|
1130
1239
|
// src/pageObjects/elements/Groups/TabPanel.ts
|
|
1131
|
-
var
|
|
1240
|
+
var import_selenium_webdriver18, TabPanelItem, TabPanel;
|
|
1132
1241
|
var init_TabPanel = __esm({
|
|
1133
1242
|
"src/pageObjects/elements/Groups/TabPanel.ts"() {
|
|
1134
1243
|
"use strict";
|
|
1135
1244
|
init_AbstractGroup();
|
|
1136
|
-
|
|
1245
|
+
import_selenium_webdriver18 = require("selenium-webdriver");
|
|
1137
1246
|
init_actions();
|
|
1138
1247
|
TabPanelItem = class extends AbstractGroup {
|
|
1139
1248
|
constructor(parentCssSelector, elementCssSelector, driver) {
|
|
@@ -1144,7 +1253,7 @@ var init_TabPanel = __esm({
|
|
|
1144
1253
|
}
|
|
1145
1254
|
async isActive() {
|
|
1146
1255
|
const tabPanelItemElement = await this.getElement();
|
|
1147
|
-
const grandparentTab = await tabPanelItemElement.findElement(
|
|
1256
|
+
const grandparentTab = await tabPanelItemElement.findElement(import_selenium_webdriver18.By.xpath('ancestor::div[@role="tab"][1]'));
|
|
1148
1257
|
return await grandparentTab.getAttribute("aria-selected") === "true";
|
|
1149
1258
|
}
|
|
1150
1259
|
async getTitle() {
|
|
@@ -1163,12 +1272,12 @@ var init_TabPanel = __esm({
|
|
|
1163
1272
|
});
|
|
1164
1273
|
|
|
1165
1274
|
// src/pageObjects/elements/Groups/Accordion/AccordionItem.ts
|
|
1166
|
-
var
|
|
1275
|
+
var import_selenium_webdriver19, ACCORDION_TITLE_CONTAINER, AccordionItem;
|
|
1167
1276
|
var init_AccordionItem = __esm({
|
|
1168
1277
|
"src/pageObjects/elements/Groups/Accordion/AccordionItem.ts"() {
|
|
1169
1278
|
"use strict";
|
|
1170
1279
|
init_AbstractGroup();
|
|
1171
|
-
|
|
1280
|
+
import_selenium_webdriver19 = require("selenium-webdriver");
|
|
1172
1281
|
init_actions();
|
|
1173
1282
|
ACCORDION_TITLE_CONTAINER = "accordion-title-container";
|
|
1174
1283
|
AccordionItem = class extends AbstractGroup {
|
|
@@ -1181,7 +1290,7 @@ var init_AccordionItem = __esm({
|
|
|
1181
1290
|
}
|
|
1182
1291
|
async clickAccordionItemTitle() {
|
|
1183
1292
|
const accordionElement = await this.getElement();
|
|
1184
|
-
const accordTitleElement = await accordionElement.findElement(
|
|
1293
|
+
const accordTitleElement = await accordionElement.findElement(import_selenium_webdriver19.By.className(ACCORDION_TITLE_CONTAINER));
|
|
1185
1294
|
await accordTitleElement.click();
|
|
1186
1295
|
}
|
|
1187
1296
|
async click() {
|
|
@@ -1416,11 +1525,11 @@ function getCssRowByIndexSelector(index) {
|
|
|
1416
1525
|
function getCssCellByIndexSelector(index) {
|
|
1417
1526
|
return `td[role="gridcell"][aria-colindex="${transformInputIndex(index)}"]`;
|
|
1418
1527
|
}
|
|
1419
|
-
var
|
|
1528
|
+
var import_selenium_webdriver20, getColumnByIndexCssSelector, getColumnByCaptionCssSelector, getColumnByNameCssSelector, transformInputIndex, transformOutputIndex;
|
|
1420
1529
|
var init_utils2 = __esm({
|
|
1421
1530
|
"src/pageObjects/elements/Table/utils.ts"() {
|
|
1422
1531
|
"use strict";
|
|
1423
|
-
|
|
1532
|
+
import_selenium_webdriver20 = require("selenium-webdriver");
|
|
1424
1533
|
getColumnByIndexCssSelector = (columnIndex) => `td[aria-colindex="${transformInputIndex(columnIndex)}"]`;
|
|
1425
1534
|
getColumnByCaptionCssSelector = (caption) => `td[role="columnheader"][aria-label="Column ${caption}"]`;
|
|
1426
1535
|
getColumnByNameCssSelector = (name) => `td[role="columnheader"][data-fieldname="${name}"]`;
|
|
@@ -1437,11 +1546,11 @@ var init_types3 = __esm({
|
|
|
1437
1546
|
});
|
|
1438
1547
|
|
|
1439
1548
|
// src/pageObjects/elements/Table/elements/Cell.ts
|
|
1440
|
-
var
|
|
1549
|
+
var import_selenium_webdriver21, Cell;
|
|
1441
1550
|
var init_Cell = __esm({
|
|
1442
1551
|
"src/pageObjects/elements/Table/elements/Cell.ts"() {
|
|
1443
1552
|
"use strict";
|
|
1444
|
-
|
|
1553
|
+
import_selenium_webdriver21 = require("selenium-webdriver");
|
|
1445
1554
|
init_AbstractElementWithParent();
|
|
1446
1555
|
init_utils2();
|
|
1447
1556
|
init_types3();
|
|
@@ -1458,12 +1567,12 @@ var init_Cell = __esm({
|
|
|
1458
1567
|
this.elementCssSelector = getCssCellByIndexSelector(index);
|
|
1459
1568
|
}
|
|
1460
1569
|
async getBooleanValue(cellEl) {
|
|
1461
|
-
const booleanEl = await cellEl.findElement(
|
|
1570
|
+
const booleanEl = await cellEl.findElement(import_selenium_webdriver21.By.className("boolean-widget"));
|
|
1462
1571
|
return await booleanEl.getAttribute("aria-checked") === "true" ? 1 : 0;
|
|
1463
1572
|
}
|
|
1464
1573
|
async getTagsValue(cellEl) {
|
|
1465
1574
|
const tagsCssSelector = ".multiselect-container .multiselect-cell";
|
|
1466
|
-
const tags = await cellEl.findElements(
|
|
1575
|
+
const tags = await cellEl.findElements(import_selenium_webdriver21.By.css(tagsCssSelector));
|
|
1467
1576
|
const values = [];
|
|
1468
1577
|
for (const tag of tags) {
|
|
1469
1578
|
values.push(await tag.getAttribute("textContent"));
|
|
@@ -1493,11 +1602,11 @@ var init_Cell = __esm({
|
|
|
1493
1602
|
});
|
|
1494
1603
|
|
|
1495
1604
|
// src/pageObjects/elements/Table/elements/Row.ts
|
|
1496
|
-
var
|
|
1605
|
+
var import_selenium_webdriver22, DX_SELECTION_CLASS, DX_ROW_EDIT_CLASS, DX_DATA_ROW_CLASS, Row;
|
|
1497
1606
|
var init_Row = __esm({
|
|
1498
1607
|
"src/pageObjects/elements/Table/elements/Row.ts"() {
|
|
1499
1608
|
"use strict";
|
|
1500
|
-
|
|
1609
|
+
import_selenium_webdriver22 = require("selenium-webdriver");
|
|
1501
1610
|
init_Cell();
|
|
1502
1611
|
init_utils2();
|
|
1503
1612
|
init_AbstractElementWithParent();
|
|
@@ -1556,7 +1665,7 @@ var init_Row = __esm({
|
|
|
1556
1665
|
return this.index;
|
|
1557
1666
|
}
|
|
1558
1667
|
async getCells() {
|
|
1559
|
-
const cells = await this.driver.findElements(
|
|
1668
|
+
const cells = await this.driver.findElements(import_selenium_webdriver22.By.css(`${this.getFullCssSelector()} td[role="gridcell"]`));
|
|
1560
1669
|
const result = [];
|
|
1561
1670
|
cells.forEach((_, index) => {
|
|
1562
1671
|
const newCell = this.getCellByIndex(index);
|
|
@@ -1569,7 +1678,7 @@ var init_Row = __esm({
|
|
|
1569
1678
|
this.index
|
|
1570
1679
|
)}"] .${buttonClass}`;
|
|
1571
1680
|
const button = await fixElementStaleError(
|
|
1572
|
-
|
|
1681
|
+
import_selenium_webdriver22.By.css(`${this.parentCssSelector} ${this.fixedTableContentCssSelector} ${buttonCssSelector}`),
|
|
1573
1682
|
this.driver
|
|
1574
1683
|
);
|
|
1575
1684
|
return click(button, this.driver);
|
|
@@ -1600,11 +1709,11 @@ var init_Row = __esm({
|
|
|
1600
1709
|
});
|
|
1601
1710
|
|
|
1602
1711
|
// src/pageObjects/elements/Table/elements/Column.ts
|
|
1603
|
-
var
|
|
1712
|
+
var import_selenium_webdriver23, Column;
|
|
1604
1713
|
var init_Column = __esm({
|
|
1605
1714
|
"src/pageObjects/elements/Table/elements/Column.ts"() {
|
|
1606
1715
|
"use strict";
|
|
1607
|
-
|
|
1716
|
+
import_selenium_webdriver23 = require("selenium-webdriver");
|
|
1608
1717
|
init_utils2();
|
|
1609
1718
|
init_AbstractElementWithParent();
|
|
1610
1719
|
init_fixElementStaleError();
|
|
@@ -1632,7 +1741,7 @@ var init_Column = __esm({
|
|
|
1632
1741
|
return super.getElement();
|
|
1633
1742
|
}
|
|
1634
1743
|
async getColumnHeaderIndexBy(cssSelector) {
|
|
1635
|
-
const column = await fixElementStaleError(
|
|
1744
|
+
const column = await fixElementStaleError(import_selenium_webdriver23.By.css(`${this.parentCssSelector} ${this.headerCssSelector} ${cssSelector}`), this.driver);
|
|
1636
1745
|
return transformOutputIndex(await column.getAttribute("aria-colindex"));
|
|
1637
1746
|
}
|
|
1638
1747
|
async getIndexByCaption() {
|
|
@@ -1663,6 +1772,38 @@ var init_Column = __esm({
|
|
|
1663
1772
|
}
|
|
1664
1773
|
});
|
|
1665
1774
|
|
|
1775
|
+
// src/pageObjects/elements/EditorButton.ts
|
|
1776
|
+
var EditorButton;
|
|
1777
|
+
var init_EditorButton = __esm({
|
|
1778
|
+
"src/pageObjects/elements/EditorButton.ts"() {
|
|
1779
|
+
"use strict";
|
|
1780
|
+
init_locators();
|
|
1781
|
+
init_createDataTestId();
|
|
1782
|
+
init_AbstractElementWithParent();
|
|
1783
|
+
init_waitElementIsClickable();
|
|
1784
|
+
init_actions();
|
|
1785
|
+
EditorButton = class extends AbstractElementWithParent {
|
|
1786
|
+
name;
|
|
1787
|
+
constructor(parentCssSelector, name, driver) {
|
|
1788
|
+
super(parentCssSelector, byTestIdCssSelector(createEditorButtonTestId(name)), driver);
|
|
1789
|
+
this.name = name;
|
|
1790
|
+
}
|
|
1791
|
+
buttonNotDisplayedError() {
|
|
1792
|
+
return `Editor Button ${this.name} cannot be clicked. It is not displayed or it is disabled`;
|
|
1793
|
+
}
|
|
1794
|
+
async click() {
|
|
1795
|
+
const button = await this.getElement();
|
|
1796
|
+
await waitElementIsClickable({
|
|
1797
|
+
element: button,
|
|
1798
|
+
errorMessage: this.buttonNotDisplayedError(),
|
|
1799
|
+
driver: this.driver
|
|
1800
|
+
});
|
|
1801
|
+
await click(button, this.driver);
|
|
1802
|
+
}
|
|
1803
|
+
};
|
|
1804
|
+
}
|
|
1805
|
+
});
|
|
1806
|
+
|
|
1666
1807
|
// src/pageObjects/elements/AbstractEditor.ts
|
|
1667
1808
|
var AbstractEditor;
|
|
1668
1809
|
var init_AbstractEditor2 = __esm({
|
|
@@ -1670,6 +1811,7 @@ var init_AbstractEditor2 = __esm({
|
|
|
1670
1811
|
"use strict";
|
|
1671
1812
|
init_AbstractElementWithParent();
|
|
1672
1813
|
init_Editors();
|
|
1814
|
+
init_EditorButton();
|
|
1673
1815
|
AbstractEditor = class extends AbstractElementWithParent {
|
|
1674
1816
|
editor;
|
|
1675
1817
|
constructor(parentCssSelector, elementCssSelector, driver) {
|
|
@@ -1734,6 +1876,16 @@ var init_AbstractEditor2 = __esm({
|
|
|
1734
1876
|
await this.initEditor();
|
|
1735
1877
|
return this.editor.isReadonly();
|
|
1736
1878
|
}
|
|
1879
|
+
/**
|
|
1880
|
+
* Находит кнопку на поле по имени
|
|
1881
|
+
* @example
|
|
1882
|
+
* const form= new MyForm();
|
|
1883
|
+
* //...
|
|
1884
|
+
* await form.field('Name').button('editorButton).click()
|
|
1885
|
+
*/
|
|
1886
|
+
button(name) {
|
|
1887
|
+
return new EditorButton(this.getFullCssSelector(), name, this.driver);
|
|
1888
|
+
}
|
|
1737
1889
|
};
|
|
1738
1890
|
}
|
|
1739
1891
|
});
|
|
@@ -1755,11 +1907,11 @@ var init_FormField = __esm({
|
|
|
1755
1907
|
});
|
|
1756
1908
|
|
|
1757
1909
|
// src/pageObjects/elements/Table/Table.ts
|
|
1758
|
-
var
|
|
1910
|
+
var import_selenium_webdriver24, Table;
|
|
1759
1911
|
var init_Table = __esm({
|
|
1760
1912
|
"src/pageObjects/elements/Table/Table.ts"() {
|
|
1761
1913
|
"use strict";
|
|
1762
|
-
|
|
1914
|
+
import_selenium_webdriver24 = require("selenium-webdriver");
|
|
1763
1915
|
init_createDataTestId();
|
|
1764
1916
|
init_AbstractElementWithParent();
|
|
1765
1917
|
init_Row();
|
|
@@ -1811,7 +1963,7 @@ var init_Table = __esm({
|
|
|
1811
1963
|
return this.getRowByIndex(index).select();
|
|
1812
1964
|
}
|
|
1813
1965
|
async getRows() {
|
|
1814
|
-
const rows = await this.driver.findElements(
|
|
1966
|
+
const rows = await this.driver.findElements(import_selenium_webdriver24.By.css(`${this.getFullCssSelector()} .dx-row.dx-data-row`));
|
|
1815
1967
|
const result = [];
|
|
1816
1968
|
rows.forEach((_, index) => {
|
|
1817
1969
|
const newRow = new Row(
|
|
@@ -1827,7 +1979,7 @@ var init_Table = __esm({
|
|
|
1827
1979
|
}
|
|
1828
1980
|
async getColumns() {
|
|
1829
1981
|
const columns = await this.driver.findElements(
|
|
1830
|
-
|
|
1982
|
+
import_selenium_webdriver24.By.css(`${this.getFullCssSelector()} ${this.headerCssSelector} td[role="columnheader"]`)
|
|
1831
1983
|
);
|
|
1832
1984
|
const result = [];
|
|
1833
1985
|
columns.forEach((_, index) => {
|
|
@@ -1922,11 +2074,11 @@ var init_typesUtil = __esm({
|
|
|
1922
2074
|
});
|
|
1923
2075
|
|
|
1924
2076
|
// src/pageObjects/elements/TableToolbar/ToolbarMenu.ts
|
|
1925
|
-
var
|
|
2077
|
+
var import_selenium_webdriver25, SPINDOWN_CLASS, buttonGroupItemSelector, getFullCssSelector, buttonByTextXpath, ToolbarMenu;
|
|
1926
2078
|
var init_ToolbarMenu = __esm({
|
|
1927
2079
|
"src/pageObjects/elements/TableToolbar/ToolbarMenu.ts"() {
|
|
1928
2080
|
"use strict";
|
|
1929
|
-
|
|
2081
|
+
import_selenium_webdriver25 = require("selenium-webdriver");
|
|
1930
2082
|
init_typesUtil();
|
|
1931
2083
|
init_AbstractElementWithParent();
|
|
1932
2084
|
init_locators();
|
|
@@ -1977,7 +2129,7 @@ var init_ToolbarMenu = __esm({
|
|
|
1977
2129
|
throw new Error(`"title" must be a string or array of string`);
|
|
1978
2130
|
let lTitle = isString(title) ? [title] : title;
|
|
1979
2131
|
for (let t of lTitle) {
|
|
1980
|
-
await this.goToButton(t,
|
|
2132
|
+
await this.goToButton(t, import_selenium_webdriver25.By.xpath(buttonByTextXpath(t)));
|
|
1981
2133
|
}
|
|
1982
2134
|
}
|
|
1983
2135
|
};
|
|
@@ -2052,11 +2204,11 @@ var init_FormToolbar = __esm({
|
|
|
2052
2204
|
});
|
|
2053
2205
|
|
|
2054
2206
|
// src/pageObjects/elements/Filters/FilterOperation.ts
|
|
2055
|
-
var
|
|
2207
|
+
var import_selenium_webdriver26, FILTER_OPERATIONS, BUTTON_OPERATION_WIDGET, OPERATIONS_WIDGET_POPUP, getWidgetInPopupSelector, FilterOperation;
|
|
2056
2208
|
var init_FilterOperation = __esm({
|
|
2057
2209
|
"src/pageObjects/elements/Filters/FilterOperation.ts"() {
|
|
2058
2210
|
"use strict";
|
|
2059
|
-
|
|
2211
|
+
import_selenium_webdriver26 = require("selenium-webdriver");
|
|
2060
2212
|
init_fixElementStaleError();
|
|
2061
2213
|
init_AbstractElementWithParent();
|
|
2062
2214
|
init_locators();
|
|
@@ -2096,10 +2248,10 @@ var init_FilterOperation = __esm({
|
|
|
2096
2248
|
errorMessage: "Widget operation is not clickable",
|
|
2097
2249
|
driver: this.driver
|
|
2098
2250
|
});
|
|
2099
|
-
const clickableElement = await widgetButtonEl.findElement(
|
|
2251
|
+
const clickableElement = await widgetButtonEl.findElement(import_selenium_webdriver26.By.className("dx-icon"));
|
|
2100
2252
|
await click(clickableElement, this.driver);
|
|
2101
2253
|
try {
|
|
2102
|
-
const widgetPopupEl = await this.driver.findElement(
|
|
2254
|
+
const widgetPopupEl = await this.driver.findElement(import_selenium_webdriver26.By.css(`${byTestIdCssSelector(`${OPERATIONS_WIDGET_POPUP}-${this._testId}`)}`));
|
|
2103
2255
|
await waitElementIsVisible({
|
|
2104
2256
|
element: widgetPopupEl,
|
|
2105
2257
|
errorMessage: `Operation widget popup is not visible`,
|
|
@@ -2114,7 +2266,7 @@ var init_FilterOperation = __esm({
|
|
|
2114
2266
|
throw new Error(`Operation with name "${operationName}" is not correct.`);
|
|
2115
2267
|
}
|
|
2116
2268
|
await this.initOperationWidget();
|
|
2117
|
-
const operationEl = await fixElementStaleError(
|
|
2269
|
+
const operationEl = await fixElementStaleError(import_selenium_webdriver26.By.css(`${byTestIdCssSelector(`${OPERATIONS_WIDGET_POPUP}-${this._testId}`)} ${getWidgetInPopupSelector(operationName)}`), this.driver);
|
|
2118
2270
|
await click(operationEl, this.driver);
|
|
2119
2271
|
await wait(
|
|
2120
2272
|
async () => {
|
|
@@ -2356,11 +2508,11 @@ var init_PanelFilterField = __esm({
|
|
|
2356
2508
|
});
|
|
2357
2509
|
|
|
2358
2510
|
// src/pageObjects/elements/Filters/FilterPanel.ts
|
|
2359
|
-
var
|
|
2511
|
+
var import_selenium_webdriver27, drawerSelector, FILTER_PANEL_SELECTOR, CLOSE_SELECTOR, FilterPanel;
|
|
2360
2512
|
var init_FilterPanel = __esm({
|
|
2361
2513
|
"src/pageObjects/elements/Filters/FilterPanel.ts"() {
|
|
2362
2514
|
"use strict";
|
|
2363
|
-
|
|
2515
|
+
import_selenium_webdriver27 = require("selenium-webdriver");
|
|
2364
2516
|
init_AbstractElement();
|
|
2365
2517
|
init_PanelFilterField();
|
|
2366
2518
|
init_actions();
|
|
@@ -2375,7 +2527,7 @@ var init_FilterPanel = __esm({
|
|
|
2375
2527
|
async filterPanelButtons() {
|
|
2376
2528
|
const selector = `${this.elementCssSelector} ${FILTER_PANEL_SELECTOR} .filter-panel__buttons-panel .dx-button-text`;
|
|
2377
2529
|
const el = await this.getElement();
|
|
2378
|
-
return el.findElements(
|
|
2530
|
+
return el.findElements(import_selenium_webdriver27.By.css(selector));
|
|
2379
2531
|
}
|
|
2380
2532
|
constructor(formName, driver) {
|
|
2381
2533
|
super(driver, drawerSelector(formName));
|
|
@@ -2408,7 +2560,7 @@ var init_FilterPanel = __esm({
|
|
|
2408
2560
|
await this.driver.sleep(300);
|
|
2409
2561
|
}
|
|
2410
2562
|
async close() {
|
|
2411
|
-
const btn = await this.driver.findElement(
|
|
2563
|
+
const btn = await this.driver.findElement(import_selenium_webdriver27.By.css(`${this.elementCssSelector} ${CLOSE_SELECTOR}`));
|
|
2412
2564
|
await click(btn, this.driver);
|
|
2413
2565
|
}
|
|
2414
2566
|
};
|
|
@@ -2444,12 +2596,12 @@ var init_HeaderFilterField = __esm({
|
|
|
2444
2596
|
});
|
|
2445
2597
|
|
|
2446
2598
|
// src/pageObjects/elements/Filters/ColumnFilter.ts
|
|
2447
|
-
var
|
|
2599
|
+
var import_selenium_webdriver28, APPLY_SELECTOR, CANCEL_SELECTOR, HEADER_FILTER_ICON, HEADER_FILTER_CONTAINER, HEADER_FILTER_BUTTONS, ColumnFilter;
|
|
2448
2600
|
var init_ColumnFilter = __esm({
|
|
2449
2601
|
"src/pageObjects/elements/Filters/ColumnFilter.ts"() {
|
|
2450
2602
|
"use strict";
|
|
2451
2603
|
init_actions();
|
|
2452
|
-
|
|
2604
|
+
import_selenium_webdriver28 = require("selenium-webdriver");
|
|
2453
2605
|
init_HeaderFilterField();
|
|
2454
2606
|
init_waitElementIsVisible();
|
|
2455
2607
|
init_AbstractElement();
|
|
@@ -2474,11 +2626,11 @@ var init_ColumnFilter = __esm({
|
|
|
2474
2626
|
}
|
|
2475
2627
|
async getApplyButton() {
|
|
2476
2628
|
const selector = `${HEADER_FILTER_CONTAINER} ${HEADER_FILTER_BUTTONS} ${APPLY_SELECTOR}`;
|
|
2477
|
-
return this.driver.findElement(
|
|
2629
|
+
return this.driver.findElement(import_selenium_webdriver28.By.css(selector));
|
|
2478
2630
|
}
|
|
2479
2631
|
async getCancelButton() {
|
|
2480
2632
|
const selector = `${HEADER_FILTER_CONTAINER} ${HEADER_FILTER_BUTTONS} ${CANCEL_SELECTOR}`;
|
|
2481
|
-
return this.driver.findElement(
|
|
2633
|
+
return this.driver.findElement(import_selenium_webdriver28.By.css(selector));
|
|
2482
2634
|
}
|
|
2483
2635
|
async apply() {
|
|
2484
2636
|
const btn = await this.getApplyButton();
|
|
@@ -2492,7 +2644,7 @@ var init_ColumnFilter = __esm({
|
|
|
2492
2644
|
const columnEl = await this._column.getElement();
|
|
2493
2645
|
const actions = this.driver.actions({ async: true });
|
|
2494
2646
|
await actions.move({ origin: columnEl }).perform();
|
|
2495
|
-
const elements = await columnEl.findElements(
|
|
2647
|
+
const elements = await columnEl.findElements(import_selenium_webdriver28.By.css(HEADER_FILTER_ICON));
|
|
2496
2648
|
let headerFilterIcon = null;
|
|
2497
2649
|
await wait(
|
|
2498
2650
|
async () => {
|
|
@@ -2737,12 +2889,12 @@ var init_createSubFormInstance = __esm({
|
|
|
2737
2889
|
});
|
|
2738
2890
|
|
|
2739
2891
|
// src/pageObjects/elements/Forms/Form.ts
|
|
2740
|
-
var
|
|
2892
|
+
var import_selenium_webdriver29, formTestId, Form;
|
|
2741
2893
|
var init_Form = __esm({
|
|
2742
2894
|
"src/pageObjects/elements/Forms/Form.ts"() {
|
|
2743
2895
|
"use strict";
|
|
2744
2896
|
init_locators();
|
|
2745
|
-
|
|
2897
|
+
import_selenium_webdriver29 = require("selenium-webdriver");
|
|
2746
2898
|
init_AbstractForm();
|
|
2747
2899
|
init_waitElementIsVisible();
|
|
2748
2900
|
init_createSubFormInstance();
|
|
@@ -2767,10 +2919,10 @@ var init_Form = __esm({
|
|
|
2767
2919
|
*/
|
|
2768
2920
|
async getTitleText() {
|
|
2769
2921
|
if (await this.isModal()) {
|
|
2770
|
-
const titleEl2 = await this.driver.findElement(
|
|
2922
|
+
const titleEl2 = await this.driver.findElement(import_selenium_webdriver29.By.css(`${this.popupContainerCssSelector} .popup-title`));
|
|
2771
2923
|
return titleEl2.getText();
|
|
2772
2924
|
}
|
|
2773
|
-
let titleEl = await this.driver.findElement(
|
|
2925
|
+
let titleEl = await this.driver.findElement(import_selenium_webdriver29.By.className("main-toolbar-form-title"));
|
|
2774
2926
|
return titleEl.getText();
|
|
2775
2927
|
}
|
|
2776
2928
|
setSubFormMode() {
|
|
@@ -2788,7 +2940,7 @@ var init_Form = __esm({
|
|
|
2788
2940
|
*/
|
|
2789
2941
|
async subForm(name) {
|
|
2790
2942
|
const cssSelector = subformCssSelector(this.containerCssSelector, subFormTestId(name));
|
|
2791
|
-
const byCssSelector =
|
|
2943
|
+
const byCssSelector = import_selenium_webdriver29.By.css(cssSelector);
|
|
2792
2944
|
const subFormEl = await this.driver.findElement(byCssSelector);
|
|
2793
2945
|
await waitElementIsVisible({
|
|
2794
2946
|
element: subFormEl,
|
|
@@ -2818,18 +2970,18 @@ var FormEdit_exports = {};
|
|
|
2818
2970
|
__export(FormEdit_exports, {
|
|
2819
2971
|
default: () => FormEdit
|
|
2820
2972
|
});
|
|
2821
|
-
var
|
|
2973
|
+
var import_selenium_webdriver30, FormEdit;
|
|
2822
2974
|
var init_FormEdit = __esm({
|
|
2823
2975
|
"src/pageObjects/elements/Forms/FormEdit.ts"() {
|
|
2824
2976
|
"use strict";
|
|
2825
2977
|
init_Form();
|
|
2826
|
-
|
|
2978
|
+
import_selenium_webdriver30 = require("selenium-webdriver");
|
|
2827
2979
|
init_FormField();
|
|
2828
2980
|
init_actions();
|
|
2829
2981
|
init_wait();
|
|
2830
2982
|
FormEdit = class extends Form {
|
|
2831
|
-
saveButtonBy =
|
|
2832
|
-
closeButtonBy =
|
|
2983
|
+
saveButtonBy = import_selenium_webdriver30.By.id("button-save");
|
|
2984
|
+
closeButtonBy = import_selenium_webdriver30.By.id("button-cancel");
|
|
2833
2985
|
constructor(driver) {
|
|
2834
2986
|
super(driver);
|
|
2835
2987
|
this.popupContainerCssSelector = `.popup .form-edit-${this.formName}`;
|
|
@@ -3012,7 +3164,7 @@ var SubsystemsPanelHeader = class extends AbstractElementWithParent {
|
|
|
3012
3164
|
};
|
|
3013
3165
|
|
|
3014
3166
|
// src/pageObjects/elements/SubsystemsPanel/SubsystemsPanel.ts
|
|
3015
|
-
var
|
|
3167
|
+
var import_selenium_webdriver16 = require("selenium-webdriver");
|
|
3016
3168
|
init_wait();
|
|
3017
3169
|
init_locators();
|
|
3018
3170
|
init_Editors();
|
|
@@ -3094,7 +3246,7 @@ var SubsystemsPanel = class extends AbstractElement {
|
|
|
3094
3246
|
*/
|
|
3095
3247
|
async searchClear() {
|
|
3096
3248
|
const clearBtnSelector = `#aside ${byTestIdCssSelector(SEARCH_INPUT_SELECTOR)} .${DX_CLEAR_BUTTON_AREA}`;
|
|
3097
|
-
const clearBtn = await this.driver.findElement(
|
|
3249
|
+
const clearBtn = await this.driver.findElement(import_selenium_webdriver16.By.css(clearBtnSelector));
|
|
3098
3250
|
if (await clearBtn.isDisplayed()) {
|
|
3099
3251
|
await click(clearBtn, this.driver);
|
|
3100
3252
|
}
|
|
@@ -3108,7 +3260,7 @@ var SubsystemsPanel = class extends AbstractElement {
|
|
|
3108
3260
|
*/
|
|
3109
3261
|
item(name) {
|
|
3110
3262
|
const elementCSS = createSubSystemTestId(name);
|
|
3111
|
-
return new SubsystemItem({ driver: this.driver, bySelector:
|
|
3263
|
+
return new SubsystemItem({ driver: this.driver, bySelector: import_selenium_webdriver16.By.css(`${byTestIdCssSelector(elementCSS, "span")}`) });
|
|
3112
3264
|
}
|
|
3113
3265
|
/**
|
|
3114
3266
|
* Возвращает сабсистему по заголовку
|
|
@@ -3118,7 +3270,7 @@ var SubsystemsPanel = class extends AbstractElement {
|
|
|
3118
3270
|
* const subsystem = subsystemsPanel.itemByTitle('SubSystemTitle');
|
|
3119
3271
|
*/
|
|
3120
3272
|
itemByTitle(title) {
|
|
3121
|
-
return new SubsystemItem({ driver: this.driver, bySelector:
|
|
3273
|
+
return new SubsystemItem({ driver: this.driver, bySelector: import_selenium_webdriver16.By.css(byTitleCssSelector(title)) });
|
|
3122
3274
|
}
|
|
3123
3275
|
/**
|
|
3124
3276
|
* Возвращается на уровень выше по сабсистемам
|
|
@@ -3128,7 +3280,7 @@ var SubsystemsPanel = class extends AbstractElement {
|
|
|
3128
3280
|
* wait subsystemsPanel.back();
|
|
3129
3281
|
*/
|
|
3130
3282
|
async back() {
|
|
3131
|
-
const backButton = this.driver.findElement(
|
|
3283
|
+
const backButton = this.driver.findElement(import_selenium_webdriver16.By.css(`#aside .${BACK_BUTTON_SELECTOR}`));
|
|
3132
3284
|
await waitElementIsVisible(
|
|
3133
3285
|
{
|
|
3134
3286
|
element: backButton,
|
|
@@ -3145,13 +3297,13 @@ init_ListForm();
|
|
|
3145
3297
|
init_TreeView();
|
|
3146
3298
|
|
|
3147
3299
|
// src/pageObjects/elements/Forms/ReportForm.ts
|
|
3148
|
-
var
|
|
3300
|
+
var import_selenium_webdriver31 = require("selenium-webdriver");
|
|
3149
3301
|
init_FormEdit();
|
|
3150
3302
|
var ReportForm = class extends FormEdit {
|
|
3151
3303
|
constructor(driver) {
|
|
3152
3304
|
super(driver);
|
|
3153
3305
|
this.popupContainerCssSelector = `.popup .form-report-${this.formName}`;
|
|
3154
|
-
this.saveButtonBy =
|
|
3306
|
+
this.saveButtonBy = import_selenium_webdriver31.By.id("button-apply");
|
|
3155
3307
|
}
|
|
3156
3308
|
/**
|
|
3157
3309
|
* Знаходить поле/фільтр у формі репорту за ім'ям
|
|
@@ -3174,7 +3326,7 @@ init_FilterPanel();
|
|
|
3174
3326
|
|
|
3175
3327
|
// src/pageObjects/elements/Dialog.ts
|
|
3176
3328
|
init_AbstractElement();
|
|
3177
|
-
var
|
|
3329
|
+
var import_selenium_webdriver32 = require("selenium-webdriver");
|
|
3178
3330
|
init_AbstractButton();
|
|
3179
3331
|
var DIALOG_CLASS = ".d5-dialog";
|
|
3180
3332
|
var DIALOG_TITLE_CLASS = ".dialog__title";
|
|
@@ -3189,7 +3341,7 @@ var DialogButton = class extends AbstractButton {
|
|
|
3189
3341
|
}
|
|
3190
3342
|
async getElement() {
|
|
3191
3343
|
const panel = await super.getElement();
|
|
3192
|
-
return panel.findElement(
|
|
3344
|
+
return panel.findElement(import_selenium_webdriver32.By.xpath(buttonByTextXpath2(this.text)));
|
|
3193
3345
|
}
|
|
3194
3346
|
buttonNotDisplayedError() {
|
|
3195
3347
|
return `Dialog button ${this.text} cannot be clicked. It is not displayed or it is disabled`;
|
|
@@ -3209,11 +3361,11 @@ var Dialog = class extends AbstractElement {
|
|
|
3209
3361
|
return this.joinRelativeCssSelectors([DIALOG_CLASS, DIALOG_BUTTONS_PANEL_CLASS]);
|
|
3210
3362
|
}
|
|
3211
3363
|
async title() {
|
|
3212
|
-
const el = await this.driver.findElement(
|
|
3364
|
+
const el = await this.driver.findElement(import_selenium_webdriver32.By.css(this.titleSelector));
|
|
3213
3365
|
return await el.getText();
|
|
3214
3366
|
}
|
|
3215
3367
|
async text() {
|
|
3216
|
-
const el = await this.driver.findElement(
|
|
3368
|
+
const el = await this.driver.findElement(import_selenium_webdriver32.By.css(this.textSelector));
|
|
3217
3369
|
return await el.getText();
|
|
3218
3370
|
}
|
|
3219
3371
|
button(text) {
|
|
@@ -138,7 +138,8 @@ declare enum ControlClass {
|
|
|
138
138
|
Date = "date-control",
|
|
139
139
|
SingleDateRange = "single-date-range-control",
|
|
140
140
|
BooleanSelector = "buttons-group",
|
|
141
|
-
ButtonGroup = "button-group-field"
|
|
141
|
+
ButtonGroup = "button-group-field",
|
|
142
|
+
HeaderFilterDictionary = "header-filter-dictionary"
|
|
142
143
|
}
|
|
143
144
|
|
|
144
145
|
interface ClearStrategy {
|
|
@@ -350,6 +351,13 @@ declare abstract class Form extends AbstractForm {
|
|
|
350
351
|
subForm(name: string): Promise<unknown>;
|
|
351
352
|
}
|
|
352
353
|
|
|
354
|
+
declare class EditorButton extends AbstractElementWithParent {
|
|
355
|
+
private readonly name;
|
|
356
|
+
constructor(parentCssSelector: string, name: string, driver?: WebDriver);
|
|
357
|
+
protected buttonNotDisplayedError(): string;
|
|
358
|
+
click(): Promise<void>;
|
|
359
|
+
}
|
|
360
|
+
|
|
353
361
|
declare class AbstractEditor extends AbstractElementWithParent implements Editor {
|
|
354
362
|
protected editor: Editor;
|
|
355
363
|
constructor(parentCssSelector: string, elementCssSelector: string, driver?: WebDriver);
|
|
@@ -387,6 +395,14 @@ declare class AbstractEditor extends AbstractElementWithParent implements Editor
|
|
|
387
395
|
* expect(await formEdit.field('TextFld').isReadonly()).toBe(false);
|
|
388
396
|
*/
|
|
389
397
|
isReadonly(): Promise<boolean>;
|
|
398
|
+
/**
|
|
399
|
+
* Находит кнопку на поле по имени
|
|
400
|
+
* @example
|
|
401
|
+
* const form= new MyForm();
|
|
402
|
+
* //...
|
|
403
|
+
* await form.field('Name').button('editorButton).click()
|
|
404
|
+
*/
|
|
405
|
+
button(name: string): EditorButton;
|
|
390
406
|
}
|
|
391
407
|
|
|
392
408
|
declare class FormField extends AbstractEditor {
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
2
|
TreeView
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-E4DNUJAB.mjs";
|
|
4
4
|
import {
|
|
5
5
|
FilterPanel,
|
|
6
6
|
FormFilterField,
|
|
7
7
|
ListForm,
|
|
8
8
|
PanelFilterField
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-35I6E2YD.mjs";
|
|
10
10
|
import {
|
|
11
11
|
FormEdit
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-AHJAA7VV.mjs";
|
|
13
13
|
import {
|
|
14
14
|
AbstractButton,
|
|
15
15
|
AbstractElement,
|
|
@@ -30,7 +30,7 @@ import {
|
|
|
30
30
|
readonlyLocator,
|
|
31
31
|
wait,
|
|
32
32
|
waitElementIsVisible
|
|
33
|
-
} from "./chunk-
|
|
33
|
+
} from "./chunk-NWVB4S3G.mjs";
|
|
34
34
|
|
|
35
35
|
// src/pageObjects/pages/LoginPage.ts
|
|
36
36
|
var LOGIN_PATH = "/login";
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
2
|
TreeView
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-E4DNUJAB.mjs";
|
|
4
4
|
import {
|
|
5
5
|
FilterPanel,
|
|
6
6
|
FormFilterField,
|
|
7
7
|
ListForm,
|
|
8
8
|
PanelFilterField
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-35I6E2YD.mjs";
|
|
10
10
|
import {
|
|
11
11
|
FormEdit
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-AHJAA7VV.mjs";
|
|
13
13
|
import {
|
|
14
14
|
AbstractButton,
|
|
15
15
|
AbstractElement,
|
|
@@ -30,7 +30,7 @@ import {
|
|
|
30
30
|
readonlyLocator,
|
|
31
31
|
wait,
|
|
32
32
|
waitElementIsVisible
|
|
33
|
-
} from "./chunk-
|
|
33
|
+
} from "./chunk-NWVB4S3G.mjs";
|
|
34
34
|
|
|
35
35
|
// src/pageObjects/pages/LoginPage.ts
|
|
36
36
|
var LOGIN_PATH = "/login";
|
package/package.json
CHANGED