d5-testing-library 1.6.0 → 1.7.0-alpha.1
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-XOCYARDX.mjs +7 -0
- package/dist/ListForm-R7WQIGBI.mjs +7 -0
- package/dist/TreeView-STUAAR65.mjs +8 -0
- package/dist/{chunk-PNSQQKEY.mjs → chunk-CKCSBNKD.mjs} +1 -1
- package/dist/{chunk-4VLJL7OZ.mjs → chunk-JITTN2NY.mjs} +35 -13
- package/dist/{chunk-CFJ5JWM7.mjs → chunk-Q67RHZDP.mjs} +1 -1
- package/dist/{chunk-3EQV252X.mjs → chunk-WUPIBFH7.mjs} +127 -4
- package/dist/cjs/d5-testing-library.cjs +1365 -1093
- package/dist/d5-testing-library.d.ts +158 -56
- package/dist/d5-testing-library.legacy-esm.js +118 -10
- package/dist/d5-testing-library.mjs +118 -10
- package/package.json +4 -2
- package/dist/FormEdit-Z2QDWFFG.mjs +0 -7
- package/dist/ListForm-JAFTOUFG.mjs +0 -7
- package/dist/TreeView-YUECOEFI.mjs +0 -8
|
@@ -721,6 +721,9 @@ function createFilterTestId(formName, itemName, layout) {
|
|
|
721
721
|
function createDocFilterTestId(formName, itemName) {
|
|
722
722
|
return createFilterTestId(formName, itemName, "dock-panel-filter" /* DOCK_PANEL */);
|
|
723
723
|
}
|
|
724
|
+
function createHeaderFilterTestId(formName, itemName) {
|
|
725
|
+
return createFilterTestId(formName, itemName, "header-filter" /* HEADER_FILTER */);
|
|
726
|
+
}
|
|
724
727
|
function createLayoutFilterTestId(formName, itemName) {
|
|
725
728
|
return createFilterTestId(formName, itemName, "layout-filter" /* LAYOUT */);
|
|
726
729
|
}
|
|
@@ -730,6 +733,9 @@ function createTableId(formName) {
|
|
|
730
733
|
function createFormButtonTestId(formName, itemName) {
|
|
731
734
|
return createDataTestId(formName, "button" /* BUTTON */, itemName);
|
|
732
735
|
}
|
|
736
|
+
function createSubSystemTestId(itemName) {
|
|
737
|
+
return `${"subsystem-item" /* SUBSYSTEM_ITEM */}-${itemName}`;
|
|
738
|
+
}
|
|
733
739
|
|
|
734
740
|
// src/pageObjects/elements/AbstractEditor.ts
|
|
735
741
|
var AbstractEditor = class extends AbstractElementWithParent {
|
|
@@ -806,7 +812,7 @@ var FormField = class extends AbstractEditor {
|
|
|
806
812
|
};
|
|
807
813
|
|
|
808
814
|
// src/pageObjects/elements/Forms/Form.ts
|
|
809
|
-
import { By as
|
|
815
|
+
import { By as By14 } from "selenium-webdriver";
|
|
810
816
|
|
|
811
817
|
// src/utils/waitElementIsClickable.ts
|
|
812
818
|
async function waitElementIsClickable({
|
|
@@ -881,6 +887,7 @@ var Panel = class extends AbstractGroup {
|
|
|
881
887
|
};
|
|
882
888
|
|
|
883
889
|
// src/pageObjects/elements/Groups/TabPanel.ts
|
|
890
|
+
import { By as By12 } from "selenium-webdriver";
|
|
884
891
|
var TabPanelItem = class extends AbstractGroup {
|
|
885
892
|
constructor(parentCssSelector, elementCssSelector, driver) {
|
|
886
893
|
super(parentCssSelector, elementCssSelector, driver);
|
|
@@ -888,6 +895,11 @@ var TabPanelItem = class extends AbstractGroup {
|
|
|
888
895
|
async click() {
|
|
889
896
|
await click(await this.getElement(), this.driver);
|
|
890
897
|
}
|
|
898
|
+
async isActive() {
|
|
899
|
+
const tabPanelItemElement = await this.getElement();
|
|
900
|
+
const grandparentTab = await tabPanelItemElement.findElement(By12.xpath('ancestor::div[@role="tab"][1]'));
|
|
901
|
+
return await grandparentTab.getAttribute("aria-selected") === "true";
|
|
902
|
+
}
|
|
891
903
|
async getTitle() {
|
|
892
904
|
return "";
|
|
893
905
|
}
|
|
@@ -902,7 +914,7 @@ var TabPanel = class extends AbstractGroup {
|
|
|
902
914
|
};
|
|
903
915
|
|
|
904
916
|
// src/pageObjects/elements/Groups/Accordion/AccordionItem.ts
|
|
905
|
-
import { By as
|
|
917
|
+
import { By as By13 } from "selenium-webdriver";
|
|
906
918
|
var ACCORDION_TITLE_CONTAINER = "accordion-title-container";
|
|
907
919
|
var AccordionItem = class extends AbstractGroup {
|
|
908
920
|
constructor(parentCssSelector, elementCssSelector, driver) {
|
|
@@ -914,7 +926,7 @@ var AccordionItem = class extends AbstractGroup {
|
|
|
914
926
|
}
|
|
915
927
|
async clickAccordionItemTitle() {
|
|
916
928
|
const accordionElement = await this.getElement();
|
|
917
|
-
const accordTitleElement = await accordionElement.findElement(
|
|
929
|
+
const accordTitleElement = await accordionElement.findElement(By13.className(ACCORDION_TITLE_CONTAINER));
|
|
918
930
|
await accordTitleElement.click();
|
|
919
931
|
}
|
|
920
932
|
async click() {
|
|
@@ -1039,6 +1051,13 @@ var FormGroup = class extends AbstractElementWithParent {
|
|
|
1039
1051
|
}
|
|
1040
1052
|
return false;
|
|
1041
1053
|
}
|
|
1054
|
+
async isActive() {
|
|
1055
|
+
await this.initInstance();
|
|
1056
|
+
if (this.groupInstance instanceof TabPanelItem) {
|
|
1057
|
+
return await this.groupInstance.isActive();
|
|
1058
|
+
}
|
|
1059
|
+
return false;
|
|
1060
|
+
}
|
|
1042
1061
|
};
|
|
1043
1062
|
|
|
1044
1063
|
// src/pageObjects/elements/Forms/AbstractForm.ts
|
|
@@ -1095,15 +1114,15 @@ async function classDependencyInjector(formType) {
|
|
|
1095
1114
|
let SubFormFactoryClass;
|
|
1096
1115
|
switch (formType) {
|
|
1097
1116
|
case "1" /* LIST */:
|
|
1098
|
-
SubFormFactoryClass = (await import("./ListForm-
|
|
1117
|
+
SubFormFactoryClass = (await import("./ListForm-R7WQIGBI.mjs")).default;
|
|
1099
1118
|
break;
|
|
1100
1119
|
case "3" /* TREE */:
|
|
1101
|
-
SubFormFactoryClass = (await import("./TreeView-
|
|
1120
|
+
SubFormFactoryClass = (await import("./TreeView-STUAAR65.mjs")).default;
|
|
1102
1121
|
break;
|
|
1103
1122
|
case "2" /* EDIT */:
|
|
1104
1123
|
case "99" /* FREE_FORM */:
|
|
1105
1124
|
case "4" /* REPORT */:
|
|
1106
|
-
SubFormFactoryClass = (await import("./FormEdit-
|
|
1125
|
+
SubFormFactoryClass = (await import("./FormEdit-XOCYARDX.mjs")).default;
|
|
1107
1126
|
break;
|
|
1108
1127
|
default:
|
|
1109
1128
|
throw new Error(`Unsupported form type ${formType}`);
|
|
@@ -1133,10 +1152,10 @@ var Form = class extends AbstractForm {
|
|
|
1133
1152
|
*/
|
|
1134
1153
|
async getTitleText() {
|
|
1135
1154
|
if (await this.isModal()) {
|
|
1136
|
-
const titleEl2 = await this.driver.findElement(
|
|
1155
|
+
const titleEl2 = await this.driver.findElement(By14.css(`${this.popupContainerCssSelector} .popup-title`));
|
|
1137
1156
|
return titleEl2.getText();
|
|
1138
1157
|
}
|
|
1139
|
-
let titleEl = await this.driver.findElement(
|
|
1158
|
+
let titleEl = await this.driver.findElement(By14.className("main-toolbar-form-title"));
|
|
1140
1159
|
return titleEl.getText();
|
|
1141
1160
|
}
|
|
1142
1161
|
setSubFormMode() {
|
|
@@ -1154,7 +1173,7 @@ var Form = class extends AbstractForm {
|
|
|
1154
1173
|
*/
|
|
1155
1174
|
async subForm(name) {
|
|
1156
1175
|
const cssSelector = subformCssSelector(this.containerCssSelector, subFormTestId(name));
|
|
1157
|
-
const byCssSelector =
|
|
1176
|
+
const byCssSelector = By14.css(cssSelector);
|
|
1158
1177
|
const subFormEl = await this.driver.findElement(byCssSelector);
|
|
1159
1178
|
await waitElementIsVisible({
|
|
1160
1179
|
element: subFormEl,
|
|
@@ -1189,15 +1208,18 @@ export {
|
|
|
1189
1208
|
byTestId,
|
|
1190
1209
|
readonlyLocator,
|
|
1191
1210
|
AbstractElementWithParent,
|
|
1211
|
+
TextEditor,
|
|
1212
|
+
NumberEditor,
|
|
1213
|
+
ControlClass,
|
|
1214
|
+
DX_CLEAR_BUTTON_AREA,
|
|
1215
|
+
editorFactory,
|
|
1192
1216
|
createDocFilterTestId,
|
|
1217
|
+
createHeaderFilterTestId,
|
|
1193
1218
|
createLayoutFilterTestId,
|
|
1194
1219
|
createTableId,
|
|
1220
|
+
createSubSystemTestId,
|
|
1195
1221
|
waitElementIsClickable,
|
|
1196
1222
|
AbstractButton,
|
|
1197
|
-
TextEditor,
|
|
1198
|
-
NumberEditor,
|
|
1199
|
-
ControlClass,
|
|
1200
|
-
editorFactory,
|
|
1201
1223
|
AbstractEditor,
|
|
1202
1224
|
FormField,
|
|
1203
1225
|
Form
|
|
@@ -9,12 +9,14 @@ import {
|
|
|
9
9
|
byTestIdCssSelector,
|
|
10
10
|
click,
|
|
11
11
|
createDocFilterTestId,
|
|
12
|
+
createHeaderFilterTestId,
|
|
12
13
|
createLayoutFilterTestId,
|
|
13
14
|
createTableId,
|
|
14
15
|
fixElementStaleError,
|
|
15
16
|
wait,
|
|
16
|
-
waitElementIsClickable
|
|
17
|
-
|
|
17
|
+
waitElementIsClickable,
|
|
18
|
+
waitElementIsVisible
|
|
19
|
+
} from "./chunk-JITTN2NY.mjs";
|
|
18
20
|
|
|
19
21
|
// src/pageObjects/elements/Table/Table.ts
|
|
20
22
|
import { By as By5 } from "selenium-webdriver";
|
|
@@ -149,8 +151,9 @@ var Row = class extends AbstractElementWithParent {
|
|
|
149
151
|
const buttonCssSelector = `.${DX_DATA_ROW_CLASS}[aria-rowindex="${transformInputIndex(
|
|
150
152
|
this.index
|
|
151
153
|
)}"] .${buttonClass}`;
|
|
152
|
-
const button = await
|
|
153
|
-
By3.css(`${this.parentCssSelector} ${FIXED_TABLE_CSS_SELECTOR} ${buttonCssSelector}`)
|
|
154
|
+
const button = await fixElementStaleError(
|
|
155
|
+
By3.css(`${this.parentCssSelector} ${FIXED_TABLE_CSS_SELECTOR} ${buttonCssSelector}`),
|
|
156
|
+
this.driver
|
|
154
157
|
);
|
|
155
158
|
return click(button, this.driver);
|
|
156
159
|
}
|
|
@@ -595,6 +598,122 @@ var FilterPanel = class extends AbstractElement {
|
|
|
595
598
|
}
|
|
596
599
|
};
|
|
597
600
|
|
|
601
|
+
// src/pageObjects/elements/Filters/ColumnFilter.ts
|
|
602
|
+
import { By as By8 } from "selenium-webdriver";
|
|
603
|
+
|
|
604
|
+
// src/pageObjects/elements/Filters/HeaderFilterField.ts
|
|
605
|
+
var HeaderFilterField = class extends AbstractEditor {
|
|
606
|
+
constructor(parentCssSelector, formName, name, driver) {
|
|
607
|
+
super(parentCssSelector, byTestIdCssSelector(createHeaderFilterTestId(formName, name)), driver);
|
|
608
|
+
}
|
|
609
|
+
async getValue() {
|
|
610
|
+
return super.getValue();
|
|
611
|
+
}
|
|
612
|
+
async setValue(value) {
|
|
613
|
+
return super.setValue(value);
|
|
614
|
+
}
|
|
615
|
+
async clear() {
|
|
616
|
+
return super.clear();
|
|
617
|
+
}
|
|
618
|
+
async remove(itemText) {
|
|
619
|
+
return super.remove(itemText);
|
|
620
|
+
}
|
|
621
|
+
};
|
|
622
|
+
|
|
623
|
+
// src/pageObjects/elements/Filters/ColumnFilter.ts
|
|
624
|
+
var APPLY_SELECTOR = ".apply-button";
|
|
625
|
+
var CANCEL_SELECTOR = ".cancel-button";
|
|
626
|
+
var HEADER_FILTER_ICON = ".dx-column-indicators .dx-header-filter";
|
|
627
|
+
var HEADER_FILTER_CONTAINER = ".header-filter";
|
|
628
|
+
var HEADER_FILTER_BUTTONS = ".header-filter-buttons";
|
|
629
|
+
var ColumnFilter = class extends AbstractElement {
|
|
630
|
+
_formName;
|
|
631
|
+
_name;
|
|
632
|
+
_column;
|
|
633
|
+
constructor(formName, name, column, driver) {
|
|
634
|
+
super(driver, HEADER_FILTER_CONTAINER);
|
|
635
|
+
this._formName = formName;
|
|
636
|
+
this._name = name;
|
|
637
|
+
this._column = column;
|
|
638
|
+
this.driver = driver;
|
|
639
|
+
}
|
|
640
|
+
async getApplyButton() {
|
|
641
|
+
const selector = `${HEADER_FILTER_CONTAINER} ${HEADER_FILTER_BUTTONS} ${APPLY_SELECTOR}`;
|
|
642
|
+
return this.driver.findElement(By8.css(selector));
|
|
643
|
+
}
|
|
644
|
+
async getCancelButton() {
|
|
645
|
+
const selector = `${HEADER_FILTER_CONTAINER} ${HEADER_FILTER_BUTTONS} ${CANCEL_SELECTOR}`;
|
|
646
|
+
return this.driver.findElement(By8.css(selector));
|
|
647
|
+
}
|
|
648
|
+
async apply() {
|
|
649
|
+
const btn = await this.getApplyButton();
|
|
650
|
+
await click(btn, this.driver);
|
|
651
|
+
}
|
|
652
|
+
async cancel() {
|
|
653
|
+
const btn = await this.getCancelButton();
|
|
654
|
+
await click(btn, this.driver);
|
|
655
|
+
}
|
|
656
|
+
async initFilter() {
|
|
657
|
+
const columnEl = await this._column.getElement();
|
|
658
|
+
const actions = this.driver.actions({ async: true });
|
|
659
|
+
await actions.move({ origin: columnEl }).perform();
|
|
660
|
+
const elements = await columnEl.findElements(By8.css(HEADER_FILTER_ICON));
|
|
661
|
+
const headerFilterIcon = elements[1];
|
|
662
|
+
await waitElementIsVisible({
|
|
663
|
+
element: headerFilterIcon,
|
|
664
|
+
driver: this.driver,
|
|
665
|
+
errorMessage: `HeaderFilter "${this._name}" is not visible`
|
|
666
|
+
});
|
|
667
|
+
if (!headerFilterIcon)
|
|
668
|
+
throw new Error(`HeaderFilter "${this._name}" is not visible`);
|
|
669
|
+
await headerFilterIcon.click();
|
|
670
|
+
return new HeaderFilterField("", this._formName, this._name, this.driver);
|
|
671
|
+
}
|
|
672
|
+
/**
|
|
673
|
+
* Возвращает значение в поле
|
|
674
|
+
* @example
|
|
675
|
+
* expect(await form.columnFilter('NumberFld').getValue()).toBe(10);
|
|
676
|
+
* expect(await form.columnFilter('TextFld').getValue()).toBe('TestValue');
|
|
677
|
+
*/
|
|
678
|
+
async getValue() {
|
|
679
|
+
const filter = await this.initFilter();
|
|
680
|
+
const result = await filter.getValue();
|
|
681
|
+
await this.cancel();
|
|
682
|
+
return result;
|
|
683
|
+
}
|
|
684
|
+
/**
|
|
685
|
+
* Устанавливает значение в поле
|
|
686
|
+
* @example
|
|
687
|
+
* await form.columnFilter('NumberFld').setValue(123);
|
|
688
|
+
* await form.columnFilter('TextFld').setValue('TestValue');
|
|
689
|
+
*/
|
|
690
|
+
async setValue(value) {
|
|
691
|
+
const filter = await this.initFilter();
|
|
692
|
+
await filter.setValue(value);
|
|
693
|
+
return this.apply();
|
|
694
|
+
}
|
|
695
|
+
/**
|
|
696
|
+
* Очищает значение в поле
|
|
697
|
+
* @example
|
|
698
|
+
* await form.columnFilter('NumberFld').clear();
|
|
699
|
+
*/
|
|
700
|
+
async clear() {
|
|
701
|
+
const filter = await this.initFilter();
|
|
702
|
+
await filter.clear();
|
|
703
|
+
return this.apply();
|
|
704
|
+
}
|
|
705
|
+
/**
|
|
706
|
+
* Удаляет тег по переданному тексту
|
|
707
|
+
* @example
|
|
708
|
+
* await form.columnFilter('TagBox').remove('test');
|
|
709
|
+
*/
|
|
710
|
+
async remove(itemText) {
|
|
711
|
+
const filter = await this.initFilter();
|
|
712
|
+
await filter.remove(itemText);
|
|
713
|
+
return this.apply();
|
|
714
|
+
}
|
|
715
|
+
};
|
|
716
|
+
|
|
598
717
|
// src/pageObjects/elements/Forms/ListForm.ts
|
|
599
718
|
var DATAGRID_HEADER_CSS_SELECTOR = ".dx-datagrid-headers .dx-datagrid-content:not(.dx-datagrid-content-fixed)";
|
|
600
719
|
var ListForm = class extends Form {
|
|
@@ -635,6 +754,10 @@ var ListForm = class extends Form {
|
|
|
635
754
|
formFilter(name) {
|
|
636
755
|
return new FormFilterField(this.containerCssSelector, this.formName, name, this.driver);
|
|
637
756
|
}
|
|
757
|
+
columnFilter(name) {
|
|
758
|
+
const column = this.table().getColumnByName(name);
|
|
759
|
+
return new ColumnFilter(this.formName, name, column, this.driver);
|
|
760
|
+
}
|
|
638
761
|
/**
|
|
639
762
|
* Модель панели фильтрации
|
|
640
763
|
* @returns {FilterPanel}
|