d5-testing-library 1.8.0-alpha.0 → 1.8.0-alpha.10
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-ZFZMJYWV.mjs +7 -0
- package/dist/ListForm-FXCLXRJW.mjs +7 -0
- package/dist/TreeView-DE2BPJG2.mjs +8 -0
- package/dist/chunk-6RIWBBNU.mjs +21 -0
- package/dist/{chunk-CKCSBNKD.mjs → chunk-MZW4BBF3.mjs} +16 -7
- package/dist/{chunk-JITTN2NY.mjs → chunk-NXQ4TYFN.mjs} +167 -27
- package/dist/{chunk-WUPIBFH7.mjs → chunk-PS3VVRTQ.mjs} +345 -28
- package/dist/cjs/d5-testing-library.cjs +596 -85
- package/dist/d5-testing-library.d.ts +140 -8
- package/dist/d5-testing-library.legacy-esm.js +10 -11
- package/dist/d5-testing-library.mjs +10 -11
- package/package.json +4 -4
- package/dist/FormEdit-XOCYARDX.mjs +0 -7
- package/dist/ListForm-R7WQIGBI.mjs +0 -7
- package/dist/TreeView-STUAAR65.mjs +0 -8
- package/dist/chunk-Q67RHZDP.mjs +0 -17
|
@@ -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";
|
|
@@ -1035,9 +1144,9 @@ var AbstractButton;
|
|
|
1035
1144
|
var init_AbstractButton = __esm({
|
|
1036
1145
|
"src/pageObjects/elements/TableToolbar/AbstractButton.ts"() {
|
|
1037
1146
|
"use strict";
|
|
1038
|
-
init_AbstractElementWithParent();
|
|
1039
1147
|
init_actions();
|
|
1040
1148
|
init_waitElementIsClickable();
|
|
1149
|
+
init_AbstractElementWithParent();
|
|
1041
1150
|
AbstractButton = class extends AbstractElementWithParent {
|
|
1042
1151
|
constructor(parentCssSelector, elementCssSelector, driver) {
|
|
1043
1152
|
super(parentCssSelector, elementCssSelector, driver);
|
|
@@ -1055,17 +1164,21 @@ var init_AbstractButton = __esm({
|
|
|
1055
1164
|
const button = await this.getElement();
|
|
1056
1165
|
return await button.getCssValue("pointer-events") === "none";
|
|
1057
1166
|
}
|
|
1167
|
+
async isDisplayed() {
|
|
1168
|
+
const button = await this.getElement();
|
|
1169
|
+
return await button.isDisplayed();
|
|
1170
|
+
}
|
|
1058
1171
|
};
|
|
1059
1172
|
}
|
|
1060
1173
|
});
|
|
1061
1174
|
|
|
1062
1175
|
// src/pageObjects/elements/DXComponents/DXButton.ts
|
|
1063
|
-
var
|
|
1176
|
+
var import_selenium_webdriver17, DXButton;
|
|
1064
1177
|
var init_DXButton = __esm({
|
|
1065
1178
|
"src/pageObjects/elements/DXComponents/DXButton.ts"() {
|
|
1066
1179
|
"use strict";
|
|
1067
1180
|
init_AbstractButton();
|
|
1068
|
-
|
|
1181
|
+
import_selenium_webdriver17 = require("selenium-webdriver");
|
|
1069
1182
|
DXButton = class extends AbstractButton {
|
|
1070
1183
|
async getText() {
|
|
1071
1184
|
const classes = await this.getClasses();
|
|
@@ -1073,7 +1186,7 @@ var init_DXButton = __esm({
|
|
|
1073
1186
|
return null;
|
|
1074
1187
|
}
|
|
1075
1188
|
const el = await this.getElement();
|
|
1076
|
-
const textEl = el.findElement(
|
|
1189
|
+
const textEl = el.findElement(import_selenium_webdriver17.By.className("dx-button-text"));
|
|
1077
1190
|
return await textEl.getText();
|
|
1078
1191
|
}
|
|
1079
1192
|
};
|
|
@@ -1128,12 +1241,12 @@ var init_Panel = __esm({
|
|
|
1128
1241
|
});
|
|
1129
1242
|
|
|
1130
1243
|
// src/pageObjects/elements/Groups/TabPanel.ts
|
|
1131
|
-
var
|
|
1244
|
+
var import_selenium_webdriver18, TabPanelItem, TabPanel;
|
|
1132
1245
|
var init_TabPanel = __esm({
|
|
1133
1246
|
"src/pageObjects/elements/Groups/TabPanel.ts"() {
|
|
1134
1247
|
"use strict";
|
|
1135
1248
|
init_AbstractGroup();
|
|
1136
|
-
|
|
1249
|
+
import_selenium_webdriver18 = require("selenium-webdriver");
|
|
1137
1250
|
init_actions();
|
|
1138
1251
|
TabPanelItem = class extends AbstractGroup {
|
|
1139
1252
|
constructor(parentCssSelector, elementCssSelector, driver) {
|
|
@@ -1144,7 +1257,7 @@ var init_TabPanel = __esm({
|
|
|
1144
1257
|
}
|
|
1145
1258
|
async isActive() {
|
|
1146
1259
|
const tabPanelItemElement = await this.getElement();
|
|
1147
|
-
const grandparentTab = await tabPanelItemElement.findElement(
|
|
1260
|
+
const grandparentTab = await tabPanelItemElement.findElement(import_selenium_webdriver18.By.xpath('ancestor::div[@role="tab"][1]'));
|
|
1148
1261
|
return await grandparentTab.getAttribute("aria-selected") === "true";
|
|
1149
1262
|
}
|
|
1150
1263
|
async getTitle() {
|
|
@@ -1163,12 +1276,12 @@ var init_TabPanel = __esm({
|
|
|
1163
1276
|
});
|
|
1164
1277
|
|
|
1165
1278
|
// src/pageObjects/elements/Groups/Accordion/AccordionItem.ts
|
|
1166
|
-
var
|
|
1279
|
+
var import_selenium_webdriver19, ACCORDION_TITLE_CONTAINER, AccordionItem;
|
|
1167
1280
|
var init_AccordionItem = __esm({
|
|
1168
1281
|
"src/pageObjects/elements/Groups/Accordion/AccordionItem.ts"() {
|
|
1169
1282
|
"use strict";
|
|
1170
1283
|
init_AbstractGroup();
|
|
1171
|
-
|
|
1284
|
+
import_selenium_webdriver19 = require("selenium-webdriver");
|
|
1172
1285
|
init_actions();
|
|
1173
1286
|
ACCORDION_TITLE_CONTAINER = "accordion-title-container";
|
|
1174
1287
|
AccordionItem = class extends AbstractGroup {
|
|
@@ -1181,7 +1294,7 @@ var init_AccordionItem = __esm({
|
|
|
1181
1294
|
}
|
|
1182
1295
|
async clickAccordionItemTitle() {
|
|
1183
1296
|
const accordionElement = await this.getElement();
|
|
1184
|
-
const accordTitleElement = await accordionElement.findElement(
|
|
1297
|
+
const accordTitleElement = await accordionElement.findElement(import_selenium_webdriver19.By.className(ACCORDION_TITLE_CONTAINER));
|
|
1185
1298
|
await accordTitleElement.click();
|
|
1186
1299
|
}
|
|
1187
1300
|
async click() {
|
|
@@ -1416,11 +1529,11 @@ function getCssRowByIndexSelector(index) {
|
|
|
1416
1529
|
function getCssCellByIndexSelector(index) {
|
|
1417
1530
|
return `td[role="gridcell"][aria-colindex="${transformInputIndex(index)}"]`;
|
|
1418
1531
|
}
|
|
1419
|
-
var
|
|
1532
|
+
var import_selenium_webdriver20, getColumnByIndexCssSelector, getColumnByCaptionCssSelector, getColumnByNameCssSelector, transformInputIndex, transformOutputIndex;
|
|
1420
1533
|
var init_utils2 = __esm({
|
|
1421
1534
|
"src/pageObjects/elements/Table/utils.ts"() {
|
|
1422
1535
|
"use strict";
|
|
1423
|
-
|
|
1536
|
+
import_selenium_webdriver20 = require("selenium-webdriver");
|
|
1424
1537
|
getColumnByIndexCssSelector = (columnIndex) => `td[aria-colindex="${transformInputIndex(columnIndex)}"]`;
|
|
1425
1538
|
getColumnByCaptionCssSelector = (caption) => `td[role="columnheader"][aria-label="Column ${caption}"]`;
|
|
1426
1539
|
getColumnByNameCssSelector = (name) => `td[role="columnheader"][data-fieldname="${name}"]`;
|
|
@@ -1437,11 +1550,11 @@ var init_types3 = __esm({
|
|
|
1437
1550
|
});
|
|
1438
1551
|
|
|
1439
1552
|
// src/pageObjects/elements/Table/elements/Cell.ts
|
|
1440
|
-
var
|
|
1553
|
+
var import_selenium_webdriver21, Cell;
|
|
1441
1554
|
var init_Cell = __esm({
|
|
1442
1555
|
"src/pageObjects/elements/Table/elements/Cell.ts"() {
|
|
1443
1556
|
"use strict";
|
|
1444
|
-
|
|
1557
|
+
import_selenium_webdriver21 = require("selenium-webdriver");
|
|
1445
1558
|
init_AbstractElementWithParent();
|
|
1446
1559
|
init_utils2();
|
|
1447
1560
|
init_types3();
|
|
@@ -1458,12 +1571,12 @@ var init_Cell = __esm({
|
|
|
1458
1571
|
this.elementCssSelector = getCssCellByIndexSelector(index);
|
|
1459
1572
|
}
|
|
1460
1573
|
async getBooleanValue(cellEl) {
|
|
1461
|
-
const booleanEl = await cellEl.findElement(
|
|
1574
|
+
const booleanEl = await cellEl.findElement(import_selenium_webdriver21.By.className("boolean-widget"));
|
|
1462
1575
|
return await booleanEl.getAttribute("aria-checked") === "true" ? 1 : 0;
|
|
1463
1576
|
}
|
|
1464
1577
|
async getTagsValue(cellEl) {
|
|
1465
1578
|
const tagsCssSelector = ".multiselect-container .multiselect-cell";
|
|
1466
|
-
const tags = await cellEl.findElements(
|
|
1579
|
+
const tags = await cellEl.findElements(import_selenium_webdriver21.By.css(tagsCssSelector));
|
|
1467
1580
|
const values = [];
|
|
1468
1581
|
for (const tag of tags) {
|
|
1469
1582
|
values.push(await tag.getAttribute("textContent"));
|
|
@@ -1493,11 +1606,11 @@ var init_Cell = __esm({
|
|
|
1493
1606
|
});
|
|
1494
1607
|
|
|
1495
1608
|
// src/pageObjects/elements/Table/elements/Row.ts
|
|
1496
|
-
var
|
|
1609
|
+
var import_selenium_webdriver22, DX_SELECTION_CLASS, DX_ROW_EDIT_CLASS, DX_DATA_ROW_CLASS, Row;
|
|
1497
1610
|
var init_Row = __esm({
|
|
1498
1611
|
"src/pageObjects/elements/Table/elements/Row.ts"() {
|
|
1499
1612
|
"use strict";
|
|
1500
|
-
|
|
1613
|
+
import_selenium_webdriver22 = require("selenium-webdriver");
|
|
1501
1614
|
init_Cell();
|
|
1502
1615
|
init_utils2();
|
|
1503
1616
|
init_AbstractElementWithParent();
|
|
@@ -1510,10 +1623,12 @@ var init_Row = __esm({
|
|
|
1510
1623
|
Row = class extends AbstractElementWithParent {
|
|
1511
1624
|
index;
|
|
1512
1625
|
getColumnBy;
|
|
1513
|
-
|
|
1626
|
+
fixedTableContentCssSelector;
|
|
1627
|
+
constructor(parentCssSelector, fixedTableContentCssSelector, index, driver, getColumnBy) {
|
|
1514
1628
|
super(parentCssSelector, getCssRowByIndexSelector(index), driver);
|
|
1515
1629
|
this.index = index;
|
|
1516
1630
|
this.getColumnBy = getColumnBy;
|
|
1631
|
+
this.fixedTableContentCssSelector = fixedTableContentCssSelector;
|
|
1517
1632
|
}
|
|
1518
1633
|
_getCell({ index, name, title }) {
|
|
1519
1634
|
return new Cell(
|
|
@@ -1554,7 +1669,7 @@ var init_Row = __esm({
|
|
|
1554
1669
|
return this.index;
|
|
1555
1670
|
}
|
|
1556
1671
|
async getCells() {
|
|
1557
|
-
const cells = await this.driver.findElements(
|
|
1672
|
+
const cells = await this.driver.findElements(import_selenium_webdriver22.By.css(`${this.getFullCssSelector()} td[role="gridcell"]`));
|
|
1558
1673
|
const result = [];
|
|
1559
1674
|
cells.forEach((_, index) => {
|
|
1560
1675
|
const newCell = this.getCellByIndex(index);
|
|
@@ -1563,12 +1678,11 @@ var init_Row = __esm({
|
|
|
1563
1678
|
return result;
|
|
1564
1679
|
}
|
|
1565
1680
|
async clickInlineButton(buttonClass) {
|
|
1566
|
-
const FIXED_TABLE_CSS_SELECTOR = ".dx-fixed-columns .dx-datagrid-content.dx-datagrid-content-fixed";
|
|
1567
1681
|
const buttonCssSelector = `.${DX_DATA_ROW_CLASS}[aria-rowindex="${transformInputIndex(
|
|
1568
1682
|
this.index
|
|
1569
1683
|
)}"] .${buttonClass}`;
|
|
1570
1684
|
const button = await fixElementStaleError(
|
|
1571
|
-
|
|
1685
|
+
import_selenium_webdriver22.By.css(`${this.parentCssSelector} ${this.fixedTableContentCssSelector} ${buttonCssSelector}`),
|
|
1572
1686
|
this.driver
|
|
1573
1687
|
);
|
|
1574
1688
|
return click(button, this.driver);
|
|
@@ -1599,11 +1713,11 @@ var init_Row = __esm({
|
|
|
1599
1713
|
});
|
|
1600
1714
|
|
|
1601
1715
|
// src/pageObjects/elements/Table/elements/Column.ts
|
|
1602
|
-
var
|
|
1716
|
+
var import_selenium_webdriver23, Column;
|
|
1603
1717
|
var init_Column = __esm({
|
|
1604
1718
|
"src/pageObjects/elements/Table/elements/Column.ts"() {
|
|
1605
1719
|
"use strict";
|
|
1606
|
-
|
|
1720
|
+
import_selenium_webdriver23 = require("selenium-webdriver");
|
|
1607
1721
|
init_utils2();
|
|
1608
1722
|
init_AbstractElementWithParent();
|
|
1609
1723
|
init_fixElementStaleError();
|
|
@@ -1631,7 +1745,7 @@ var init_Column = __esm({
|
|
|
1631
1745
|
return super.getElement();
|
|
1632
1746
|
}
|
|
1633
1747
|
async getColumnHeaderIndexBy(cssSelector) {
|
|
1634
|
-
const column = await fixElementStaleError(
|
|
1748
|
+
const column = await fixElementStaleError(import_selenium_webdriver23.By.css(`${this.parentCssSelector} ${this.headerCssSelector} ${cssSelector}`), this.driver);
|
|
1635
1749
|
return transformOutputIndex(await column.getAttribute("aria-colindex"));
|
|
1636
1750
|
}
|
|
1637
1751
|
async getIndexByCaption() {
|
|
@@ -1662,6 +1776,46 @@ var init_Column = __esm({
|
|
|
1662
1776
|
}
|
|
1663
1777
|
});
|
|
1664
1778
|
|
|
1779
|
+
// src/pageObjects/elements/EditorButton.ts
|
|
1780
|
+
var EditorButton;
|
|
1781
|
+
var init_EditorButton = __esm({
|
|
1782
|
+
"src/pageObjects/elements/EditorButton.ts"() {
|
|
1783
|
+
"use strict";
|
|
1784
|
+
init_locators();
|
|
1785
|
+
init_createDataTestId();
|
|
1786
|
+
init_AbstractElementWithParent();
|
|
1787
|
+
init_waitElementIsClickable();
|
|
1788
|
+
init_actions();
|
|
1789
|
+
EditorButton = class extends AbstractElementWithParent {
|
|
1790
|
+
name;
|
|
1791
|
+
constructor(parentCssSelector, name, driver) {
|
|
1792
|
+
super(parentCssSelector, byTestIdCssSelector(createEditorButtonTestId(name)), driver);
|
|
1793
|
+
this.name = name;
|
|
1794
|
+
}
|
|
1795
|
+
buttonNotDisplayedError() {
|
|
1796
|
+
return `Editor Button ${this.name} cannot be clicked. It is not displayed or it is disabled`;
|
|
1797
|
+
}
|
|
1798
|
+
async click() {
|
|
1799
|
+
const button = await this.getElement();
|
|
1800
|
+
await waitElementIsClickable({
|
|
1801
|
+
element: button,
|
|
1802
|
+
errorMessage: this.buttonNotDisplayedError(),
|
|
1803
|
+
driver: this.driver
|
|
1804
|
+
});
|
|
1805
|
+
await click(button, this.driver);
|
|
1806
|
+
}
|
|
1807
|
+
async isDisplayed() {
|
|
1808
|
+
try {
|
|
1809
|
+
const button = await this.getElement();
|
|
1810
|
+
return await button.isDisplayed();
|
|
1811
|
+
} catch (error) {
|
|
1812
|
+
return false;
|
|
1813
|
+
}
|
|
1814
|
+
}
|
|
1815
|
+
};
|
|
1816
|
+
}
|
|
1817
|
+
});
|
|
1818
|
+
|
|
1665
1819
|
// src/pageObjects/elements/AbstractEditor.ts
|
|
1666
1820
|
var AbstractEditor;
|
|
1667
1821
|
var init_AbstractEditor2 = __esm({
|
|
@@ -1669,6 +1823,7 @@ var init_AbstractEditor2 = __esm({
|
|
|
1669
1823
|
"use strict";
|
|
1670
1824
|
init_AbstractElementWithParent();
|
|
1671
1825
|
init_Editors();
|
|
1826
|
+
init_EditorButton();
|
|
1672
1827
|
AbstractEditor = class extends AbstractElementWithParent {
|
|
1673
1828
|
editor;
|
|
1674
1829
|
constructor(parentCssSelector, elementCssSelector, driver) {
|
|
@@ -1733,6 +1888,16 @@ var init_AbstractEditor2 = __esm({
|
|
|
1733
1888
|
await this.initEditor();
|
|
1734
1889
|
return this.editor.isReadonly();
|
|
1735
1890
|
}
|
|
1891
|
+
/**
|
|
1892
|
+
* Находит кнопку на поле по имени
|
|
1893
|
+
* @example
|
|
1894
|
+
* const form= new MyForm();
|
|
1895
|
+
* //...
|
|
1896
|
+
* await form.field('Name').button('editorButton).click()
|
|
1897
|
+
*/
|
|
1898
|
+
button(name) {
|
|
1899
|
+
return new EditorButton(this.getFullCssSelector(), name, this.driver);
|
|
1900
|
+
}
|
|
1736
1901
|
};
|
|
1737
1902
|
}
|
|
1738
1903
|
});
|
|
@@ -1754,11 +1919,11 @@ var init_FormField = __esm({
|
|
|
1754
1919
|
});
|
|
1755
1920
|
|
|
1756
1921
|
// src/pageObjects/elements/Table/Table.ts
|
|
1757
|
-
var
|
|
1922
|
+
var import_selenium_webdriver24, Table;
|
|
1758
1923
|
var init_Table = __esm({
|
|
1759
1924
|
"src/pageObjects/elements/Table/Table.ts"() {
|
|
1760
1925
|
"use strict";
|
|
1761
|
-
|
|
1926
|
+
import_selenium_webdriver24 = require("selenium-webdriver");
|
|
1762
1927
|
init_createDataTestId();
|
|
1763
1928
|
init_AbstractElementWithParent();
|
|
1764
1929
|
init_Row();
|
|
@@ -1767,10 +1932,14 @@ var init_Table = __esm({
|
|
|
1767
1932
|
Table = class extends AbstractElementWithParent {
|
|
1768
1933
|
formName;
|
|
1769
1934
|
headerCssSelector;
|
|
1770
|
-
|
|
1935
|
+
fixedTableContentCssSelector;
|
|
1936
|
+
tableContentCssSelector;
|
|
1937
|
+
constructor(parentCssSelector, headerCssSelector, tableContentCssSelector, fixedTableContentCssSelector, formName, driver) {
|
|
1771
1938
|
super(parentCssSelector, `#${createTableId(formName)}`, driver);
|
|
1772
1939
|
this.formName = formName;
|
|
1773
1940
|
this.headerCssSelector = headerCssSelector;
|
|
1941
|
+
this.fixedTableContentCssSelector = fixedTableContentCssSelector;
|
|
1942
|
+
this.tableContentCssSelector = tableContentCssSelector;
|
|
1774
1943
|
}
|
|
1775
1944
|
getColumnBy = (args) => {
|
|
1776
1945
|
if (args.title) {
|
|
@@ -1779,7 +1948,7 @@ var init_Table = __esm({
|
|
|
1779
1948
|
return this.getColumnByName(args.name);
|
|
1780
1949
|
};
|
|
1781
1950
|
getRowByIndex(index) {
|
|
1782
|
-
return new Row(this.getFullCssSelector(), index, this.driver, this.getColumnBy);
|
|
1951
|
+
return new Row(this.getFullCssSelector(), this.fixedTableContentCssSelector, index, this.driver, this.getColumnBy);
|
|
1783
1952
|
}
|
|
1784
1953
|
getColumnByIndex(index) {
|
|
1785
1954
|
return new Column({
|
|
@@ -1808,17 +1977,24 @@ var init_Table = __esm({
|
|
|
1808
1977
|
return this.getRowByIndex(index).select();
|
|
1809
1978
|
}
|
|
1810
1979
|
async getRows() {
|
|
1811
|
-
const
|
|
1980
|
+
const rowsFullCssSelector = `${this.getFullCssSelector()} ${this.tableContentCssSelector} .dx-row.dx-data-row`;
|
|
1981
|
+
const rows = await this.driver.findElements(import_selenium_webdriver24.By.css(rowsFullCssSelector));
|
|
1812
1982
|
const result = [];
|
|
1813
1983
|
rows.forEach((_, index) => {
|
|
1814
|
-
const newRow = new Row(
|
|
1984
|
+
const newRow = new Row(
|
|
1985
|
+
this.getFullCssSelector(),
|
|
1986
|
+
this.fixedTableContentCssSelector,
|
|
1987
|
+
index,
|
|
1988
|
+
this.driver,
|
|
1989
|
+
this.getColumnBy
|
|
1990
|
+
);
|
|
1815
1991
|
result.push(newRow);
|
|
1816
1992
|
});
|
|
1817
1993
|
return result;
|
|
1818
1994
|
}
|
|
1819
1995
|
async getColumns() {
|
|
1820
1996
|
const columns = await this.driver.findElements(
|
|
1821
|
-
|
|
1997
|
+
import_selenium_webdriver24.By.css(`${this.getFullCssSelector()} ${this.headerCssSelector} td[role="columnheader"]`)
|
|
1822
1998
|
);
|
|
1823
1999
|
const result = [];
|
|
1824
2000
|
columns.forEach((_, index) => {
|
|
@@ -1913,11 +2089,11 @@ var init_typesUtil = __esm({
|
|
|
1913
2089
|
});
|
|
1914
2090
|
|
|
1915
2091
|
// src/pageObjects/elements/TableToolbar/ToolbarMenu.ts
|
|
1916
|
-
var
|
|
2092
|
+
var import_selenium_webdriver25, SPINDOWN_CLASS, CONTEXT_MENU_CLASS, buttonGroupItemSelector, getFullCssSelector, buttonByTextXpath, ToolbarMenu;
|
|
1917
2093
|
var init_ToolbarMenu = __esm({
|
|
1918
2094
|
"src/pageObjects/elements/TableToolbar/ToolbarMenu.ts"() {
|
|
1919
2095
|
"use strict";
|
|
1920
|
-
|
|
2096
|
+
import_selenium_webdriver25 = require("selenium-webdriver");
|
|
1921
2097
|
init_typesUtil();
|
|
1922
2098
|
init_AbstractElementWithParent();
|
|
1923
2099
|
init_locators();
|
|
@@ -1925,9 +2101,10 @@ var init_ToolbarMenu = __esm({
|
|
|
1925
2101
|
init_waitElementIsClickable();
|
|
1926
2102
|
init_fixElementStaleError();
|
|
1927
2103
|
SPINDOWN_CLASS = ".dx-icon-spindown";
|
|
2104
|
+
CONTEXT_MENU_CLASS = "dx-context-menu";
|
|
1928
2105
|
buttonGroupItemSelector = (formName, name) => byTestIdCssSelector(`ftb-${formName}-${name}`);
|
|
1929
2106
|
getFullCssSelector = (formName, name) => `${buttonGroupItemSelector(formName, name)} ${SPINDOWN_CLASS}`;
|
|
1930
|
-
buttonByTextXpath = (text) =>
|
|
2107
|
+
buttonByTextXpath = (text) => `//div[contains(@class, '${CONTEXT_MENU_CLASS}')]//span[contains(@class, 'dx-menu-item-text') and text()='${text}']`;
|
|
1931
2108
|
ToolbarMenu = class extends AbstractElementWithParent {
|
|
1932
2109
|
_formName;
|
|
1933
2110
|
constructor(parentCssSelector, formName, name, driver) {
|
|
@@ -1968,7 +2145,7 @@ var init_ToolbarMenu = __esm({
|
|
|
1968
2145
|
throw new Error(`"title" must be a string or array of string`);
|
|
1969
2146
|
let lTitle = isString(title) ? [title] : title;
|
|
1970
2147
|
for (let t of lTitle) {
|
|
1971
|
-
await this.goToButton(t,
|
|
2148
|
+
await this.goToButton(t, import_selenium_webdriver25.By.xpath(buttonByTextXpath(t)));
|
|
1972
2149
|
}
|
|
1973
2150
|
}
|
|
1974
2151
|
};
|
|
@@ -2014,6 +2191,14 @@ var init_ToolbarItem = __esm({
|
|
|
2014
2191
|
await this.init();
|
|
2015
2192
|
return await this._button.isDisabled();
|
|
2016
2193
|
}
|
|
2194
|
+
async isDisplayed() {
|
|
2195
|
+
try {
|
|
2196
|
+
await this.init();
|
|
2197
|
+
return this._button.isDisplayed();
|
|
2198
|
+
} catch (error) {
|
|
2199
|
+
return false;
|
|
2200
|
+
}
|
|
2201
|
+
}
|
|
2017
2202
|
get menu() {
|
|
2018
2203
|
return new ToolbarMenu(this.parentCssSelector, this._formName, this._itemName, this.driver);
|
|
2019
2204
|
}
|
|
@@ -2042,6 +2227,110 @@ var init_FormToolbar = __esm({
|
|
|
2042
2227
|
}
|
|
2043
2228
|
});
|
|
2044
2229
|
|
|
2230
|
+
// src/pageObjects/elements/Filters/FilterOperation.ts
|
|
2231
|
+
var import_selenium_webdriver26, FILTER_OPERATIONS, BUTTON_OPERATION_WIDGET, OPERATIONS_WIDGET_POPUP, getWidgetInPopupSelector, FilterOperation;
|
|
2232
|
+
var init_FilterOperation = __esm({
|
|
2233
|
+
"src/pageObjects/elements/Filters/FilterOperation.ts"() {
|
|
2234
|
+
"use strict";
|
|
2235
|
+
import_selenium_webdriver26 = require("selenium-webdriver");
|
|
2236
|
+
init_fixElementStaleError();
|
|
2237
|
+
init_AbstractElementWithParent();
|
|
2238
|
+
init_locators();
|
|
2239
|
+
init_actions();
|
|
2240
|
+
init_wait();
|
|
2241
|
+
init_waitElementIsClickable();
|
|
2242
|
+
init_waitElementIsVisible();
|
|
2243
|
+
FILTER_OPERATIONS = [
|
|
2244
|
+
"=",
|
|
2245
|
+
"<>",
|
|
2246
|
+
"<",
|
|
2247
|
+
">",
|
|
2248
|
+
"<=",
|
|
2249
|
+
">=",
|
|
2250
|
+
"contains",
|
|
2251
|
+
"between",
|
|
2252
|
+
"isanyof",
|
|
2253
|
+
"isnotanyof",
|
|
2254
|
+
"isblank",
|
|
2255
|
+
"isnotblank",
|
|
2256
|
+
"startwith",
|
|
2257
|
+
"bywords"
|
|
2258
|
+
];
|
|
2259
|
+
BUTTON_OPERATION_WIDGET = "operation-widget";
|
|
2260
|
+
OPERATIONS_WIDGET_POPUP = "operation-type-widget-popup";
|
|
2261
|
+
getWidgetInPopupSelector = (operationName) => `.dx-list-item [data-operation="${operationName}"]`;
|
|
2262
|
+
FilterOperation = class extends AbstractElementWithParent {
|
|
2263
|
+
_testId;
|
|
2264
|
+
constructor({ parentCssSelector, filterTestID, driver }) {
|
|
2265
|
+
super(parentCssSelector, `${byTestIdCssSelector(`${BUTTON_OPERATION_WIDGET}-${filterTestID}`)}`, driver);
|
|
2266
|
+
this._testId = filterTestID;
|
|
2267
|
+
}
|
|
2268
|
+
async initOperationWidget() {
|
|
2269
|
+
const widgetButtonEl = await this.getElement();
|
|
2270
|
+
await waitElementIsClickable({
|
|
2271
|
+
element: widgetButtonEl,
|
|
2272
|
+
errorMessage: "Widget operation is not clickable",
|
|
2273
|
+
driver: this.driver
|
|
2274
|
+
});
|
|
2275
|
+
const clickableElement = await widgetButtonEl.findElement(import_selenium_webdriver26.By.className("dx-icon"));
|
|
2276
|
+
await click(clickableElement, this.driver);
|
|
2277
|
+
try {
|
|
2278
|
+
const widgetPopupEl = await this.driver.findElement(import_selenium_webdriver26.By.css(`${byTestIdCssSelector(`${OPERATIONS_WIDGET_POPUP}-${this._testId}`)}`));
|
|
2279
|
+
await waitElementIsVisible({
|
|
2280
|
+
element: widgetPopupEl,
|
|
2281
|
+
errorMessage: `Operation widget popup is not visible`,
|
|
2282
|
+
driver: this.driver
|
|
2283
|
+
});
|
|
2284
|
+
} catch (_) {
|
|
2285
|
+
throw `Operation widget popup is not visible`;
|
|
2286
|
+
}
|
|
2287
|
+
}
|
|
2288
|
+
async setOperation(operationName) {
|
|
2289
|
+
if (!FILTER_OPERATIONS.includes(operationName)) {
|
|
2290
|
+
throw new Error(`Operation with name "${operationName}" is not correct.`);
|
|
2291
|
+
}
|
|
2292
|
+
await this.initOperationWidget();
|
|
2293
|
+
const operationEl = await fixElementStaleError(import_selenium_webdriver26.By.css(`${byTestIdCssSelector(`${OPERATIONS_WIDGET_POPUP}-${this._testId}`)} ${getWidgetInPopupSelector(operationName)}`), this.driver);
|
|
2294
|
+
await click(operationEl, this.driver);
|
|
2295
|
+
await wait(
|
|
2296
|
+
async () => {
|
|
2297
|
+
const currOperationName = await this.getAttribute("data-operation");
|
|
2298
|
+
if (operationName === "isblank")
|
|
2299
|
+
return true;
|
|
2300
|
+
return currOperationName === operationName;
|
|
2301
|
+
},
|
|
2302
|
+
this.driver,
|
|
2303
|
+
"Operation is not changed"
|
|
2304
|
+
);
|
|
2305
|
+
}
|
|
2306
|
+
async getOperation() {
|
|
2307
|
+
const result = await this.getAttribute("data-operation");
|
|
2308
|
+
if (!result)
|
|
2309
|
+
throw new Error("Operation not found");
|
|
2310
|
+
return result;
|
|
2311
|
+
}
|
|
2312
|
+
async setIsBlank(value) {
|
|
2313
|
+
const currValue = await this.getIsBlank();
|
|
2314
|
+
if (currValue !== value) {
|
|
2315
|
+
await this.setOperation("isblank");
|
|
2316
|
+
await wait(
|
|
2317
|
+
async () => {
|
|
2318
|
+
const currIsBlank = await this.getIsBlank();
|
|
2319
|
+
return currIsBlank === value;
|
|
2320
|
+
},
|
|
2321
|
+
this.driver,
|
|
2322
|
+
"Operation is not changed"
|
|
2323
|
+
);
|
|
2324
|
+
}
|
|
2325
|
+
}
|
|
2326
|
+
async getIsBlank() {
|
|
2327
|
+
const result = await this.getAttribute("data-hasblank");
|
|
2328
|
+
return result === "true";
|
|
2329
|
+
}
|
|
2330
|
+
};
|
|
2331
|
+
}
|
|
2332
|
+
});
|
|
2333
|
+
|
|
2045
2334
|
// src/pageObjects/elements/Filters/FormFilterField.ts
|
|
2046
2335
|
var FormFilterField;
|
|
2047
2336
|
var init_FormFilterField = __esm({
|
|
@@ -2050,9 +2339,14 @@ var init_FormFilterField = __esm({
|
|
|
2050
2339
|
init_locators();
|
|
2051
2340
|
init_createDataTestId();
|
|
2052
2341
|
init_AbstractEditor2();
|
|
2342
|
+
init_FilterOperation();
|
|
2053
2343
|
FormFilterField = class extends AbstractEditor {
|
|
2344
|
+
formName;
|
|
2345
|
+
name;
|
|
2054
2346
|
constructor(parentCssSelector, formName, name, driver) {
|
|
2055
2347
|
super(parentCssSelector, byTestIdCssSelector(createLayoutFilterTestId(formName, name)), driver);
|
|
2348
|
+
this.formName = formName;
|
|
2349
|
+
this.name = name;
|
|
2056
2350
|
}
|
|
2057
2351
|
/**
|
|
2058
2352
|
* Возвращает значение в поле
|
|
@@ -2068,8 +2362,15 @@ var init_FormFilterField = __esm({
|
|
|
2068
2362
|
* @example
|
|
2069
2363
|
* await form.formFilter('NumberFld').setValue(123);
|
|
2070
2364
|
* await form.formFilter('TextFld').setValue('TestValue');
|
|
2365
|
+
* await form.formFilter('TextFld').setValue('TestValue', '=', true);
|
|
2071
2366
|
*/
|
|
2072
|
-
async setValue(value) {
|
|
2367
|
+
async setValue(value, operation, isBlank) {
|
|
2368
|
+
if (typeof operation === "string") {
|
|
2369
|
+
await this.setOperation(operation);
|
|
2370
|
+
}
|
|
2371
|
+
if (typeof isBlank === "boolean") {
|
|
2372
|
+
await this.setIsBlank(isBlank);
|
|
2373
|
+
}
|
|
2073
2374
|
return super.setValue(value);
|
|
2074
2375
|
}
|
|
2075
2376
|
/**
|
|
@@ -2088,6 +2389,51 @@ var init_FormFilterField = __esm({
|
|
|
2088
2389
|
async remove(itemText) {
|
|
2089
2390
|
return super.remove(itemText);
|
|
2090
2391
|
}
|
|
2392
|
+
/**
|
|
2393
|
+
* Инициализация операции фильтра
|
|
2394
|
+
*/
|
|
2395
|
+
async initOperation() {
|
|
2396
|
+
return new FilterOperation({
|
|
2397
|
+
parentCssSelector: this.parentCssSelector,
|
|
2398
|
+
filterTestID: createLayoutFilterTestId(this.formName, this.name)
|
|
2399
|
+
});
|
|
2400
|
+
}
|
|
2401
|
+
/**
|
|
2402
|
+
* Устанавливает операцию для фильтра
|
|
2403
|
+
* @example
|
|
2404
|
+
* await form.formFilter('TagBox').setOperation("=");
|
|
2405
|
+
*/
|
|
2406
|
+
async setOperation(operationName) {
|
|
2407
|
+
const filterOperation = await this.initOperation();
|
|
2408
|
+
await filterOperation.setOperation(operationName);
|
|
2409
|
+
}
|
|
2410
|
+
/**
|
|
2411
|
+
* Возвращает операцию фильтра
|
|
2412
|
+
* @example
|
|
2413
|
+
* expect(await form.formFilter('NumberFld').getOperation()).toBe("=");
|
|
2414
|
+
*/
|
|
2415
|
+
async getOperation() {
|
|
2416
|
+
const filterOperation = await this.initOperation();
|
|
2417
|
+
return await filterOperation.getOperation();
|
|
2418
|
+
}
|
|
2419
|
+
/**
|
|
2420
|
+
* Устанавливает операцию 'isblank' для фильтра
|
|
2421
|
+
* @example
|
|
2422
|
+
* await form.formFilter('TagBox').setIsBlank(true);
|
|
2423
|
+
*/
|
|
2424
|
+
async setIsBlank(value) {
|
|
2425
|
+
const filterOperation = await this.initOperation();
|
|
2426
|
+
await filterOperation.setIsBlank(value);
|
|
2427
|
+
}
|
|
2428
|
+
/**
|
|
2429
|
+
* Возвращает true|false, если операция 'isblank' установлена для фильтра
|
|
2430
|
+
* @example
|
|
2431
|
+
* expect(await form.formFilter('NumberFld').getIsBlank()).toBe(false);
|
|
2432
|
+
*/
|
|
2433
|
+
async getIsBlank() {
|
|
2434
|
+
const filterOperation = await this.initOperation();
|
|
2435
|
+
return await filterOperation.getIsBlank();
|
|
2436
|
+
}
|
|
2091
2437
|
};
|
|
2092
2438
|
}
|
|
2093
2439
|
});
|
|
@@ -2100,9 +2446,14 @@ var init_PanelFilterField = __esm({
|
|
|
2100
2446
|
init_locators();
|
|
2101
2447
|
init_createDataTestId();
|
|
2102
2448
|
init_AbstractEditor2();
|
|
2449
|
+
init_FilterOperation();
|
|
2103
2450
|
PanelFilterField = class extends AbstractEditor {
|
|
2451
|
+
formName;
|
|
2452
|
+
name;
|
|
2104
2453
|
constructor(parentCssSelector, formName, name, driver) {
|
|
2105
2454
|
super(parentCssSelector, byTestIdCssSelector(createDocFilterTestId(formName, name)), driver);
|
|
2455
|
+
this.formName = formName;
|
|
2456
|
+
this.name = name;
|
|
2106
2457
|
}
|
|
2107
2458
|
/**
|
|
2108
2459
|
* Возвращает значение в поле
|
|
@@ -2118,8 +2469,15 @@ var init_PanelFilterField = __esm({
|
|
|
2118
2469
|
* @example
|
|
2119
2470
|
* await form.filterPanel.filterField('NumberFld').setValue(123);
|
|
2120
2471
|
* await form.filterPanel.filterField('TextFld').setValue('TestValue');
|
|
2472
|
+
* await form.filterPanel.filterField('TextFld').setValue('TestValue', '=', true);
|
|
2121
2473
|
*/
|
|
2122
|
-
async setValue(value) {
|
|
2474
|
+
async setValue(value, operation, isBlank) {
|
|
2475
|
+
if (typeof operation === "string") {
|
|
2476
|
+
await this.setOperation(operation);
|
|
2477
|
+
}
|
|
2478
|
+
if (typeof isBlank === "boolean") {
|
|
2479
|
+
await this.setIsBlank(isBlank);
|
|
2480
|
+
}
|
|
2123
2481
|
return super.setValue(value);
|
|
2124
2482
|
}
|
|
2125
2483
|
/**
|
|
@@ -2138,16 +2496,61 @@ var init_PanelFilterField = __esm({
|
|
|
2138
2496
|
async remove(itemText) {
|
|
2139
2497
|
return super.remove(itemText);
|
|
2140
2498
|
}
|
|
2499
|
+
/**
|
|
2500
|
+
* Инициализация операции фильтра
|
|
2501
|
+
*/
|
|
2502
|
+
async initOperation() {
|
|
2503
|
+
return new FilterOperation({
|
|
2504
|
+
parentCssSelector: this.parentCssSelector,
|
|
2505
|
+
filterTestID: createDocFilterTestId(this.formName, this.name)
|
|
2506
|
+
});
|
|
2507
|
+
}
|
|
2508
|
+
/**
|
|
2509
|
+
* Устанавливает операцию для фильтра
|
|
2510
|
+
* @example
|
|
2511
|
+
* await form.filterPanel.filterField('TagBox').setOperation("=");
|
|
2512
|
+
*/
|
|
2513
|
+
async setOperation(operationName) {
|
|
2514
|
+
const filterOperation = await this.initOperation();
|
|
2515
|
+
await filterOperation.setOperation(operationName);
|
|
2516
|
+
}
|
|
2517
|
+
/**
|
|
2518
|
+
* Возвращает операцию фильтра
|
|
2519
|
+
* @example
|
|
2520
|
+
* expect(await form.filterPanel.filterField('NumberFld').getOperation()).toBe("=");
|
|
2521
|
+
*/
|
|
2522
|
+
async getOperation() {
|
|
2523
|
+
const filterOperation = await this.initOperation();
|
|
2524
|
+
return await filterOperation.getOperation();
|
|
2525
|
+
}
|
|
2526
|
+
/**
|
|
2527
|
+
* Устанавливает операцию 'isblank' для фильтра
|
|
2528
|
+
* @example
|
|
2529
|
+
* await form.filterPanel.filterField('TagBox').setIsBlank(true);
|
|
2530
|
+
*/
|
|
2531
|
+
async setIsBlank(value) {
|
|
2532
|
+
const filterOperation = await this.initOperation();
|
|
2533
|
+
await filterOperation.setIsBlank(value);
|
|
2534
|
+
}
|
|
2535
|
+
/**
|
|
2536
|
+
* Возвращает true|false, если операция 'isblank' установлена для фильтра
|
|
2537
|
+
* @example
|
|
2538
|
+
* expect(await form.filterPanel.filterField('NumberFld').getIsBlank()).toBe(false);
|
|
2539
|
+
*/
|
|
2540
|
+
async getIsBlank() {
|
|
2541
|
+
const filterOperation = await this.initOperation();
|
|
2542
|
+
return await filterOperation.getIsBlank();
|
|
2543
|
+
}
|
|
2141
2544
|
};
|
|
2142
2545
|
}
|
|
2143
2546
|
});
|
|
2144
2547
|
|
|
2145
2548
|
// src/pageObjects/elements/Filters/FilterPanel.ts
|
|
2146
|
-
var
|
|
2549
|
+
var import_selenium_webdriver27, drawerSelector, FILTER_PANEL_SELECTOR, CLOSE_SELECTOR, FilterPanel;
|
|
2147
2550
|
var init_FilterPanel = __esm({
|
|
2148
2551
|
"src/pageObjects/elements/Filters/FilterPanel.ts"() {
|
|
2149
2552
|
"use strict";
|
|
2150
|
-
|
|
2553
|
+
import_selenium_webdriver27 = require("selenium-webdriver");
|
|
2151
2554
|
init_AbstractElement();
|
|
2152
2555
|
init_PanelFilterField();
|
|
2153
2556
|
init_actions();
|
|
@@ -2162,7 +2565,7 @@ var init_FilterPanel = __esm({
|
|
|
2162
2565
|
async filterPanelButtons() {
|
|
2163
2566
|
const selector = `${this.elementCssSelector} ${FILTER_PANEL_SELECTOR} .filter-panel__buttons-panel .dx-button-text`;
|
|
2164
2567
|
const el = await this.getElement();
|
|
2165
|
-
return el.findElements(
|
|
2568
|
+
return el.findElements(import_selenium_webdriver27.By.css(selector));
|
|
2166
2569
|
}
|
|
2167
2570
|
constructor(formName, driver) {
|
|
2168
2571
|
super(driver, drawerSelector(formName));
|
|
@@ -2195,7 +2598,7 @@ var init_FilterPanel = __esm({
|
|
|
2195
2598
|
await this.driver.sleep(300);
|
|
2196
2599
|
}
|
|
2197
2600
|
async close() {
|
|
2198
|
-
const btn = await this.driver.findElement(
|
|
2601
|
+
const btn = await this.driver.findElement(import_selenium_webdriver27.By.css(`${this.elementCssSelector} ${CLOSE_SELECTOR}`));
|
|
2199
2602
|
await click(btn, this.driver);
|
|
2200
2603
|
}
|
|
2201
2604
|
};
|
|
@@ -2231,15 +2634,18 @@ var init_HeaderFilterField = __esm({
|
|
|
2231
2634
|
});
|
|
2232
2635
|
|
|
2233
2636
|
// src/pageObjects/elements/Filters/ColumnFilter.ts
|
|
2234
|
-
var
|
|
2637
|
+
var import_selenium_webdriver28, APPLY_SELECTOR, CANCEL_SELECTOR, HEADER_FILTER_ICON, HEADER_FILTER_CONTAINER, HEADER_FILTER_BUTTONS, ColumnFilter;
|
|
2235
2638
|
var init_ColumnFilter = __esm({
|
|
2236
2639
|
"src/pageObjects/elements/Filters/ColumnFilter.ts"() {
|
|
2237
2640
|
"use strict";
|
|
2238
2641
|
init_actions();
|
|
2239
|
-
|
|
2642
|
+
import_selenium_webdriver28 = require("selenium-webdriver");
|
|
2240
2643
|
init_HeaderFilterField();
|
|
2241
2644
|
init_waitElementIsVisible();
|
|
2242
2645
|
init_AbstractElement();
|
|
2646
|
+
init_FilterOperation();
|
|
2647
|
+
init_createDataTestId();
|
|
2648
|
+
init_wait();
|
|
2243
2649
|
APPLY_SELECTOR = ".apply-button";
|
|
2244
2650
|
CANCEL_SELECTOR = ".cancel-button";
|
|
2245
2651
|
HEADER_FILTER_ICON = ".dx-column-indicators .dx-header-filter";
|
|
@@ -2258,11 +2664,11 @@ var init_ColumnFilter = __esm({
|
|
|
2258
2664
|
}
|
|
2259
2665
|
async getApplyButton() {
|
|
2260
2666
|
const selector = `${HEADER_FILTER_CONTAINER} ${HEADER_FILTER_BUTTONS} ${APPLY_SELECTOR}`;
|
|
2261
|
-
return this.driver.findElement(
|
|
2667
|
+
return this.driver.findElement(import_selenium_webdriver28.By.css(selector));
|
|
2262
2668
|
}
|
|
2263
2669
|
async getCancelButton() {
|
|
2264
2670
|
const selector = `${HEADER_FILTER_CONTAINER} ${HEADER_FILTER_BUTTONS} ${CANCEL_SELECTOR}`;
|
|
2265
|
-
return this.driver.findElement(
|
|
2671
|
+
return this.driver.findElement(import_selenium_webdriver28.By.css(selector));
|
|
2266
2672
|
}
|
|
2267
2673
|
async apply() {
|
|
2268
2674
|
const btn = await this.getApplyButton();
|
|
@@ -2276,17 +2682,34 @@ var init_ColumnFilter = __esm({
|
|
|
2276
2682
|
const columnEl = await this._column.getElement();
|
|
2277
2683
|
const actions = this.driver.actions({ async: true });
|
|
2278
2684
|
await actions.move({ origin: columnEl }).perform();
|
|
2279
|
-
const elements = await columnEl.findElements(
|
|
2280
|
-
|
|
2281
|
-
await
|
|
2282
|
-
|
|
2283
|
-
|
|
2284
|
-
|
|
2285
|
-
|
|
2685
|
+
const elements = await columnEl.findElements(import_selenium_webdriver28.By.css(HEADER_FILTER_ICON));
|
|
2686
|
+
let headerFilterIcon = null;
|
|
2687
|
+
await wait(
|
|
2688
|
+
async () => {
|
|
2689
|
+
let result = false;
|
|
2690
|
+
for (let element of elements) {
|
|
2691
|
+
if (await element.isDisplayed()) {
|
|
2692
|
+
headerFilterIcon = element;
|
|
2693
|
+
result = true;
|
|
2694
|
+
break;
|
|
2695
|
+
}
|
|
2696
|
+
}
|
|
2697
|
+
return result;
|
|
2698
|
+
},
|
|
2699
|
+
this.driver,
|
|
2700
|
+
`HeaderFilter "${this._name}" is not visible`
|
|
2701
|
+
);
|
|
2286
2702
|
if (!headerFilterIcon)
|
|
2287
2703
|
throw new Error(`HeaderFilter "${this._name}" is not visible`);
|
|
2288
2704
|
await headerFilterIcon.click();
|
|
2289
|
-
|
|
2705
|
+
const filter = new HeaderFilterField("", this._formName, this._name, this.driver);
|
|
2706
|
+
const filterEl = await filter.getElement();
|
|
2707
|
+
await waitElementIsVisible({
|
|
2708
|
+
element: filterEl,
|
|
2709
|
+
driver: this.driver,
|
|
2710
|
+
errorMessage: `Header filter is not visible`
|
|
2711
|
+
});
|
|
2712
|
+
return filter;
|
|
2290
2713
|
}
|
|
2291
2714
|
/**
|
|
2292
2715
|
* Возвращает значение в поле
|
|
@@ -2305,9 +2728,22 @@ var init_ColumnFilter = __esm({
|
|
|
2305
2728
|
* @example
|
|
2306
2729
|
* await form.columnFilter('NumberFld').setValue(123);
|
|
2307
2730
|
* await form.columnFilter('TextFld').setValue('TestValue');
|
|
2731
|
+
* await form.columnFilter('TextFld').setValue('TestValue', '=', true);
|
|
2308
2732
|
*/
|
|
2309
|
-
async setValue(value) {
|
|
2733
|
+
async setValue(value, operation, isBlank) {
|
|
2310
2734
|
const filter = await this.initFilter();
|
|
2735
|
+
const inputEl = await filter.getElement();
|
|
2736
|
+
await inputEl.click();
|
|
2737
|
+
const filterOperation = new FilterOperation({
|
|
2738
|
+
parentCssSelector: HEADER_FILTER_CONTAINER,
|
|
2739
|
+
filterTestID: createHeaderFilterTestId(this._formName, this._name)
|
|
2740
|
+
});
|
|
2741
|
+
if (typeof operation === "string") {
|
|
2742
|
+
await filterOperation.setOperation(operation);
|
|
2743
|
+
}
|
|
2744
|
+
if (typeof isBlank === "boolean") {
|
|
2745
|
+
await filterOperation.setIsBlank(isBlank);
|
|
2746
|
+
}
|
|
2311
2747
|
await filter.setValue(value);
|
|
2312
2748
|
return this.apply();
|
|
2313
2749
|
}
|
|
@@ -2331,6 +2767,56 @@ var init_ColumnFilter = __esm({
|
|
|
2331
2767
|
await filter.remove(itemText);
|
|
2332
2768
|
return this.apply();
|
|
2333
2769
|
}
|
|
2770
|
+
/**
|
|
2771
|
+
* Инициализация операции фильтра
|
|
2772
|
+
*/
|
|
2773
|
+
async initOperation() {
|
|
2774
|
+
const filter = await this.initFilter();
|
|
2775
|
+
const inputEl = await filter.getElement();
|
|
2776
|
+
await inputEl.click();
|
|
2777
|
+
return new FilterOperation({
|
|
2778
|
+
parentCssSelector: HEADER_FILTER_CONTAINER,
|
|
2779
|
+
filterTestID: createHeaderFilterTestId(this._formName, this._name)
|
|
2780
|
+
});
|
|
2781
|
+
}
|
|
2782
|
+
/**
|
|
2783
|
+
* Устанавливает операцию для фильтра
|
|
2784
|
+
* @example
|
|
2785
|
+
* await form.columnFilter('TagBox').setOperation("=");
|
|
2786
|
+
*/
|
|
2787
|
+
async setOperation(operationName) {
|
|
2788
|
+
const filterOperation = await this.initOperation();
|
|
2789
|
+
await filterOperation.setOperation(operationName);
|
|
2790
|
+
await this.apply();
|
|
2791
|
+
}
|
|
2792
|
+
/**
|
|
2793
|
+
* Возвращает операцию фильтра
|
|
2794
|
+
* @example
|
|
2795
|
+
* expect(await form.columnFilter('NumberFld').getOperation()).toBe("=");
|
|
2796
|
+
*/
|
|
2797
|
+
async getOperation() {
|
|
2798
|
+
const filterOperation = await this.initOperation();
|
|
2799
|
+
return await filterOperation.getOperation();
|
|
2800
|
+
}
|
|
2801
|
+
/**
|
|
2802
|
+
* Устанавливает операцию 'isblank' для фильтра
|
|
2803
|
+
* @example
|
|
2804
|
+
* await form.columnFilter('TagBox').setIsBlank(true);
|
|
2805
|
+
*/
|
|
2806
|
+
async setIsBlank(value) {
|
|
2807
|
+
const filterOperation = await this.initOperation();
|
|
2808
|
+
await filterOperation.setIsBlank(value);
|
|
2809
|
+
await this.apply();
|
|
2810
|
+
}
|
|
2811
|
+
/**
|
|
2812
|
+
* Возвращает true|false, если операция 'isblank' установлена для фильтра
|
|
2813
|
+
* @example
|
|
2814
|
+
* expect(await form.columnFilter('NumberFld').getIsBlank()).toBe(false);
|
|
2815
|
+
*/
|
|
2816
|
+
async getIsBlank() {
|
|
2817
|
+
const filterOperation = await this.initOperation();
|
|
2818
|
+
return await filterOperation.getIsBlank();
|
|
2819
|
+
}
|
|
2334
2820
|
};
|
|
2335
2821
|
}
|
|
2336
2822
|
});
|
|
@@ -2340,7 +2826,7 @@ var ListForm_exports = {};
|
|
|
2340
2826
|
__export(ListForm_exports, {
|
|
2341
2827
|
default: () => ListForm
|
|
2342
2828
|
});
|
|
2343
|
-
var DATAGRID_HEADER_CSS_SELECTOR, ListForm;
|
|
2829
|
+
var DATAGRID_HEADER_CSS_SELECTOR, DATAGRID_CONTENT_CSS_SELECTOR, FIXED_DATAGRID_CONTENT_CSS_SELECTOR, ListForm;
|
|
2344
2830
|
var init_ListForm = __esm({
|
|
2345
2831
|
"src/pageObjects/elements/Forms/ListForm.ts"() {
|
|
2346
2832
|
"use strict";
|
|
@@ -2351,12 +2837,18 @@ var init_ListForm = __esm({
|
|
|
2351
2837
|
init_FilterPanel();
|
|
2352
2838
|
init_ColumnFilter();
|
|
2353
2839
|
DATAGRID_HEADER_CSS_SELECTOR = ".dx-datagrid-headers .dx-datagrid-content:not(.dx-datagrid-content-fixed)";
|
|
2840
|
+
DATAGRID_CONTENT_CSS_SELECTOR = ".dx-datagrid-content:not(.dx-datagrid-content-fixed)";
|
|
2841
|
+
FIXED_DATAGRID_CONTENT_CSS_SELECTOR = ".dx-fixed-columns .dx-datagrid-content.dx-datagrid-content-fixed";
|
|
2354
2842
|
ListForm = class extends Form {
|
|
2355
2843
|
headerCssSelector;
|
|
2844
|
+
fixedTableContentCssSelector;
|
|
2845
|
+
tableContentCssSelector;
|
|
2356
2846
|
constructor(driver) {
|
|
2357
2847
|
super(driver);
|
|
2358
|
-
this.popupContainerCssSelector = `.popup
|
|
2848
|
+
this.popupContainerCssSelector = `.popup.form-inline-${this.formName}`;
|
|
2359
2849
|
this.headerCssSelector = DATAGRID_HEADER_CSS_SELECTOR;
|
|
2850
|
+
this.fixedTableContentCssSelector = FIXED_DATAGRID_CONTENT_CSS_SELECTOR;
|
|
2851
|
+
this.tableContentCssSelector = DATAGRID_CONTENT_CSS_SELECTOR;
|
|
2360
2852
|
}
|
|
2361
2853
|
/**
|
|
2362
2854
|
* Находит таблицу
|
|
@@ -2366,7 +2858,14 @@ var init_ListForm = __esm({
|
|
|
2366
2858
|
* expect(listForm.table());
|
|
2367
2859
|
*/
|
|
2368
2860
|
table() {
|
|
2369
|
-
return new Table(
|
|
2861
|
+
return new Table(
|
|
2862
|
+
this.containerCssSelector,
|
|
2863
|
+
this.headerCssSelector,
|
|
2864
|
+
this.tableContentCssSelector,
|
|
2865
|
+
this.fixedTableContentCssSelector,
|
|
2866
|
+
this.formName,
|
|
2867
|
+
this.driver
|
|
2868
|
+
);
|
|
2370
2869
|
}
|
|
2371
2870
|
/**
|
|
2372
2871
|
* Находит таблицу
|
|
@@ -2413,17 +2912,21 @@ var TreeView_exports = {};
|
|
|
2413
2912
|
__export(TreeView_exports, {
|
|
2414
2913
|
default: () => TreeView
|
|
2415
2914
|
});
|
|
2416
|
-
var TREELIST_HEADER_CSS_SELECTOR, TreeView;
|
|
2915
|
+
var TREELIST_HEADER_CSS_SELECTOR, TREELIST_CONTENT_CSS_SELECTOR, FIXED_TREELIST_CONTENT_CSS_SELECTOR, TreeView;
|
|
2417
2916
|
var init_TreeView = __esm({
|
|
2418
2917
|
"src/pageObjects/elements/Forms/TreeView.ts"() {
|
|
2419
2918
|
"use strict";
|
|
2420
2919
|
init_ListForm();
|
|
2421
2920
|
TREELIST_HEADER_CSS_SELECTOR = ".dx-treelist-headers .dx-treelist-content:not(.dx-datagrid-content-fixed)";
|
|
2921
|
+
TREELIST_CONTENT_CSS_SELECTOR = ".dx-treelist-content:not(.dx-datagrid-content-fixed)";
|
|
2922
|
+
FIXED_TREELIST_CONTENT_CSS_SELECTOR = ".dx-fixed-columns .dx-treelist-content.dx-treelist-content-fixed";
|
|
2422
2923
|
TreeView = class extends ListForm {
|
|
2423
2924
|
constructor(driver) {
|
|
2424
2925
|
super(driver);
|
|
2425
|
-
this.popupContainerCssSelector = `.popup
|
|
2926
|
+
this.popupContainerCssSelector = `.popup.wrapper-tree-view-${this.formName}`;
|
|
2426
2927
|
this.headerCssSelector = TREELIST_HEADER_CSS_SELECTOR;
|
|
2928
|
+
this.fixedTableContentCssSelector = FIXED_TREELIST_CONTENT_CSS_SELECTOR;
|
|
2929
|
+
this.tableContentCssSelector = TREELIST_CONTENT_CSS_SELECTOR;
|
|
2427
2930
|
}
|
|
2428
2931
|
};
|
|
2429
2932
|
}
|
|
@@ -2463,12 +2966,12 @@ var init_createSubFormInstance = __esm({
|
|
|
2463
2966
|
});
|
|
2464
2967
|
|
|
2465
2968
|
// src/pageObjects/elements/Forms/Form.ts
|
|
2466
|
-
var
|
|
2969
|
+
var import_selenium_webdriver29, formTestId, Form;
|
|
2467
2970
|
var init_Form = __esm({
|
|
2468
2971
|
"src/pageObjects/elements/Forms/Form.ts"() {
|
|
2469
2972
|
"use strict";
|
|
2470
2973
|
init_locators();
|
|
2471
|
-
|
|
2974
|
+
import_selenium_webdriver29 = require("selenium-webdriver");
|
|
2472
2975
|
init_AbstractForm();
|
|
2473
2976
|
init_waitElementIsVisible();
|
|
2474
2977
|
init_createSubFormInstance();
|
|
@@ -2493,10 +2996,10 @@ var init_Form = __esm({
|
|
|
2493
2996
|
*/
|
|
2494
2997
|
async getTitleText() {
|
|
2495
2998
|
if (await this.isModal()) {
|
|
2496
|
-
const titleEl2 = await this.driver.findElement(
|
|
2999
|
+
const titleEl2 = await this.driver.findElement(import_selenium_webdriver29.By.css(`${this.popupContainerCssSelector} .popup-title`));
|
|
2497
3000
|
return titleEl2.getText();
|
|
2498
3001
|
}
|
|
2499
|
-
let titleEl = await this.driver.findElement(
|
|
3002
|
+
let titleEl = await this.driver.findElement(import_selenium_webdriver29.By.className("main-toolbar-form-title"));
|
|
2500
3003
|
return titleEl.getText();
|
|
2501
3004
|
}
|
|
2502
3005
|
setSubFormMode() {
|
|
@@ -2514,7 +3017,7 @@ var init_Form = __esm({
|
|
|
2514
3017
|
*/
|
|
2515
3018
|
async subForm(name) {
|
|
2516
3019
|
const cssSelector = subformCssSelector(this.containerCssSelector, subFormTestId(name));
|
|
2517
|
-
const byCssSelector =
|
|
3020
|
+
const byCssSelector = import_selenium_webdriver29.By.css(cssSelector);
|
|
2518
3021
|
const subFormEl = await this.driver.findElement(byCssSelector);
|
|
2519
3022
|
await waitElementIsVisible({
|
|
2520
3023
|
element: subFormEl,
|
|
@@ -2544,21 +3047,27 @@ var FormEdit_exports = {};
|
|
|
2544
3047
|
__export(FormEdit_exports, {
|
|
2545
3048
|
default: () => FormEdit
|
|
2546
3049
|
});
|
|
2547
|
-
var
|
|
3050
|
+
var import_selenium_webdriver30, FormEdit;
|
|
2548
3051
|
var init_FormEdit = __esm({
|
|
2549
3052
|
"src/pageObjects/elements/Forms/FormEdit.ts"() {
|
|
2550
3053
|
"use strict";
|
|
2551
3054
|
init_Form();
|
|
2552
|
-
|
|
3055
|
+
import_selenium_webdriver30 = require("selenium-webdriver");
|
|
2553
3056
|
init_FormField();
|
|
2554
3057
|
init_actions();
|
|
2555
3058
|
init_wait();
|
|
2556
3059
|
FormEdit = class extends Form {
|
|
2557
|
-
|
|
2558
|
-
|
|
3060
|
+
saveButtonId = "#button-save";
|
|
3061
|
+
closeButtonId = "#button-cancel";
|
|
2559
3062
|
constructor(driver) {
|
|
2560
3063
|
super(driver);
|
|
2561
|
-
this.popupContainerCssSelector = `.popup
|
|
3064
|
+
this.popupContainerCssSelector = `.popup.form-edit-${this.formName}`;
|
|
3065
|
+
}
|
|
3066
|
+
async getButtonCssSelector(buttonId) {
|
|
3067
|
+
if (await this.isModal()) {
|
|
3068
|
+
return `${this.popupContainerCssSelector} ${buttonId}`;
|
|
3069
|
+
}
|
|
3070
|
+
return buttonId;
|
|
2562
3071
|
}
|
|
2563
3072
|
/**
|
|
2564
3073
|
* Находит поле формы редактирования по имени
|
|
@@ -2578,7 +3087,8 @@ var init_FormEdit = __esm({
|
|
|
2578
3087
|
* await formEdit.isSaveButtonDisabled();
|
|
2579
3088
|
*/
|
|
2580
3089
|
async isSaveButtonDisabled() {
|
|
2581
|
-
const
|
|
3090
|
+
const saveButtonCssSelector = await this.getButtonCssSelector(this.saveButtonId);
|
|
3091
|
+
const saveButton = await this.driver.findElement(import_selenium_webdriver30.By.css(saveButtonCssSelector));
|
|
2582
3092
|
const result = await saveButton.getAttribute("aria-disabled");
|
|
2583
3093
|
return result === "true";
|
|
2584
3094
|
}
|
|
@@ -2590,7 +3100,8 @@ var init_FormEdit = __esm({
|
|
|
2590
3100
|
* await formEdit.saveButtonClick();
|
|
2591
3101
|
*/
|
|
2592
3102
|
async saveButtonClick() {
|
|
2593
|
-
const
|
|
3103
|
+
const saveButtonCssSelector = await this.getButtonCssSelector(this.saveButtonId);
|
|
3104
|
+
const saveButton = await this.driver.findElement(import_selenium_webdriver30.By.css(saveButtonCssSelector));
|
|
2594
3105
|
await wait(async () => !await this.isSaveButtonDisabled(), this.driver, "Button is disabled");
|
|
2595
3106
|
await click(saveButton, this.driver);
|
|
2596
3107
|
}
|
|
@@ -2602,7 +3113,8 @@ var init_FormEdit = __esm({
|
|
|
2602
3113
|
* await formEdit.closeButtonClick();
|
|
2603
3114
|
*/
|
|
2604
3115
|
async closeButtonClick() {
|
|
2605
|
-
const
|
|
3116
|
+
const closeButtonCssSelector = await this.getButtonCssSelector(this.closeButtonId);
|
|
3117
|
+
const closeButton = await this.driver.findElement(import_selenium_webdriver30.By.css(closeButtonCssSelector));
|
|
2606
3118
|
await click(closeButton, this.driver);
|
|
2607
3119
|
}
|
|
2608
3120
|
};
|
|
@@ -2738,7 +3250,7 @@ var SubsystemsPanelHeader = class extends AbstractElementWithParent {
|
|
|
2738
3250
|
};
|
|
2739
3251
|
|
|
2740
3252
|
// src/pageObjects/elements/SubsystemsPanel/SubsystemsPanel.ts
|
|
2741
|
-
var
|
|
3253
|
+
var import_selenium_webdriver16 = require("selenium-webdriver");
|
|
2742
3254
|
init_wait();
|
|
2743
3255
|
init_locators();
|
|
2744
3256
|
init_Editors();
|
|
@@ -2820,7 +3332,7 @@ var SubsystemsPanel = class extends AbstractElement {
|
|
|
2820
3332
|
*/
|
|
2821
3333
|
async searchClear() {
|
|
2822
3334
|
const clearBtnSelector = `#aside ${byTestIdCssSelector(SEARCH_INPUT_SELECTOR)} .${DX_CLEAR_BUTTON_AREA}`;
|
|
2823
|
-
const clearBtn = await this.driver.findElement(
|
|
3335
|
+
const clearBtn = await this.driver.findElement(import_selenium_webdriver16.By.css(clearBtnSelector));
|
|
2824
3336
|
if (await clearBtn.isDisplayed()) {
|
|
2825
3337
|
await click(clearBtn, this.driver);
|
|
2826
3338
|
}
|
|
@@ -2834,7 +3346,7 @@ var SubsystemsPanel = class extends AbstractElement {
|
|
|
2834
3346
|
*/
|
|
2835
3347
|
item(name) {
|
|
2836
3348
|
const elementCSS = createSubSystemTestId(name);
|
|
2837
|
-
return new SubsystemItem({ driver: this.driver, bySelector:
|
|
3349
|
+
return new SubsystemItem({ driver: this.driver, bySelector: import_selenium_webdriver16.By.css(`${byTestIdCssSelector(elementCSS, "span")}`) });
|
|
2838
3350
|
}
|
|
2839
3351
|
/**
|
|
2840
3352
|
* Возвращает сабсистему по заголовку
|
|
@@ -2844,7 +3356,7 @@ var SubsystemsPanel = class extends AbstractElement {
|
|
|
2844
3356
|
* const subsystem = subsystemsPanel.itemByTitle('SubSystemTitle');
|
|
2845
3357
|
*/
|
|
2846
3358
|
itemByTitle(title) {
|
|
2847
|
-
return new SubsystemItem({ driver: this.driver, bySelector:
|
|
3359
|
+
return new SubsystemItem({ driver: this.driver, bySelector: import_selenium_webdriver16.By.css(byTitleCssSelector(title)) });
|
|
2848
3360
|
}
|
|
2849
3361
|
/**
|
|
2850
3362
|
* Возвращается на уровень выше по сабсистемам
|
|
@@ -2854,7 +3366,7 @@ var SubsystemsPanel = class extends AbstractElement {
|
|
|
2854
3366
|
* wait subsystemsPanel.back();
|
|
2855
3367
|
*/
|
|
2856
3368
|
async back() {
|
|
2857
|
-
const backButton = this.driver.findElement(
|
|
3369
|
+
const backButton = this.driver.findElement(import_selenium_webdriver16.By.css(`#aside .${BACK_BUTTON_SELECTOR}`));
|
|
2858
3370
|
await waitElementIsVisible(
|
|
2859
3371
|
{
|
|
2860
3372
|
element: backButton,
|
|
@@ -2871,13 +3383,12 @@ init_ListForm();
|
|
|
2871
3383
|
init_TreeView();
|
|
2872
3384
|
|
|
2873
3385
|
// src/pageObjects/elements/Forms/ReportForm.ts
|
|
2874
|
-
var import_selenium_webdriver29 = require("selenium-webdriver");
|
|
2875
3386
|
init_FormEdit();
|
|
2876
3387
|
var ReportForm = class extends FormEdit {
|
|
2877
3388
|
constructor(driver) {
|
|
2878
3389
|
super(driver);
|
|
2879
|
-
this.popupContainerCssSelector = `.popup
|
|
2880
|
-
this.
|
|
3390
|
+
this.popupContainerCssSelector = `.popup.form-report-${this.formName}`;
|
|
3391
|
+
this.saveButtonId = "#button-apply";
|
|
2881
3392
|
}
|
|
2882
3393
|
/**
|
|
2883
3394
|
* Знаходить поле/фільтр у формі репорту за ім'ям
|
|
@@ -2900,7 +3411,7 @@ init_FilterPanel();
|
|
|
2900
3411
|
|
|
2901
3412
|
// src/pageObjects/elements/Dialog.ts
|
|
2902
3413
|
init_AbstractElement();
|
|
2903
|
-
var
|
|
3414
|
+
var import_selenium_webdriver31 = require("selenium-webdriver");
|
|
2904
3415
|
init_AbstractButton();
|
|
2905
3416
|
var DIALOG_CLASS = ".d5-dialog";
|
|
2906
3417
|
var DIALOG_TITLE_CLASS = ".dialog__title";
|
|
@@ -2915,7 +3426,7 @@ var DialogButton = class extends AbstractButton {
|
|
|
2915
3426
|
}
|
|
2916
3427
|
async getElement() {
|
|
2917
3428
|
const panel = await super.getElement();
|
|
2918
|
-
return panel.findElement(
|
|
3429
|
+
return panel.findElement(import_selenium_webdriver31.By.xpath(buttonByTextXpath2(this.text)));
|
|
2919
3430
|
}
|
|
2920
3431
|
buttonNotDisplayedError() {
|
|
2921
3432
|
return `Dialog button ${this.text} cannot be clicked. It is not displayed or it is disabled`;
|
|
@@ -2935,11 +3446,11 @@ var Dialog = class extends AbstractElement {
|
|
|
2935
3446
|
return this.joinRelativeCssSelectors([DIALOG_CLASS, DIALOG_BUTTONS_PANEL_CLASS]);
|
|
2936
3447
|
}
|
|
2937
3448
|
async title() {
|
|
2938
|
-
const el = await this.driver.findElement(
|
|
3449
|
+
const el = await this.driver.findElement(import_selenium_webdriver31.By.css(this.titleSelector));
|
|
2939
3450
|
return await el.getText();
|
|
2940
3451
|
}
|
|
2941
3452
|
async text() {
|
|
2942
|
-
const el = await this.driver.findElement(
|
|
3453
|
+
const el = await this.driver.findElement(import_selenium_webdriver31.By.css(this.textSelector));
|
|
2943
3454
|
return await el.getText();
|
|
2944
3455
|
}
|
|
2945
3456
|
button(text) {
|