d5-testing-library 1.8.0-alpha.0 → 1.8.0-alpha.2
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-PRX4TB67.mjs +7 -0
- package/dist/ListForm-N6QNZXQE.mjs +7 -0
- package/dist/TreeView-JOHAYS2S.mjs +8 -0
- package/dist/{chunk-Q67RHZDP.mjs → chunk-4PUDCQM6.mjs} +1 -1
- package/dist/{chunk-CKCSBNKD.mjs → chunk-H3M6VBPP.mjs} +1 -1
- package/dist/{chunk-WUPIBFH7.mjs → chunk-LTHDA5XH.mjs} +251 -15
- package/dist/{chunk-JITTN2NY.mjs → chunk-ZT3B7BQ2.mjs} +3 -3
- package/dist/cjs/d5-testing-library.cjs +285 -31
- package/dist/d5-testing-library.d.ts +80 -0
- package/dist/d5-testing-library.legacy-esm.js +4 -4
- package/dist/d5-testing-library.mjs +4 -4
- 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
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
wait,
|
|
17
17
|
waitElementIsClickable,
|
|
18
18
|
waitElementIsVisible
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-ZT3B7BQ2.mjs";
|
|
20
20
|
|
|
21
21
|
// src/pageObjects/elements/Table/Table.ts
|
|
22
22
|
import { By as By5 } from "selenium-webdriver";
|
|
@@ -463,10 +463,105 @@ var FormToolbar = class extends AbstractElementWithParent {
|
|
|
463
463
|
}
|
|
464
464
|
};
|
|
465
465
|
|
|
466
|
+
// src/pageObjects/elements/Filters/FilterOperation.ts
|
|
467
|
+
import { By as By7 } from "selenium-webdriver";
|
|
468
|
+
var FILTER_OPERATIONS = [
|
|
469
|
+
"=",
|
|
470
|
+
"<>",
|
|
471
|
+
"<",
|
|
472
|
+
">",
|
|
473
|
+
"<=",
|
|
474
|
+
">=",
|
|
475
|
+
"contains",
|
|
476
|
+
"between",
|
|
477
|
+
"isanyof",
|
|
478
|
+
"isnotanyof",
|
|
479
|
+
"isblank",
|
|
480
|
+
"isnotblank",
|
|
481
|
+
"startwith",
|
|
482
|
+
"bywords"
|
|
483
|
+
];
|
|
484
|
+
var BUTTON_OPERATION_WIDGET = "operation-widget";
|
|
485
|
+
var OPERATIONS_WIDGET_POPUP = "operation-type-widget-popup";
|
|
486
|
+
var getWidgetInPopupSelector = (operationName) => `.dx-list-item [data-operation="${operationName}"]`;
|
|
487
|
+
var FilterOperation = class extends AbstractElementWithParent {
|
|
488
|
+
_testId;
|
|
489
|
+
constructor({ parentCssSelector, filterTestID, driver }) {
|
|
490
|
+
super(parentCssSelector, `${byTestIdCssSelector(`${BUTTON_OPERATION_WIDGET}-${filterTestID}`)}`, driver);
|
|
491
|
+
this._testId = filterTestID;
|
|
492
|
+
}
|
|
493
|
+
async initOperationWidget() {
|
|
494
|
+
const widgetButtonEl = await this.getElement();
|
|
495
|
+
await waitElementIsClickable({
|
|
496
|
+
element: widgetButtonEl,
|
|
497
|
+
errorMessage: "Widget operation is not clickable",
|
|
498
|
+
driver: this.driver
|
|
499
|
+
});
|
|
500
|
+
const clickableElement = await widgetButtonEl.findElement(By7.className("dx-icon"));
|
|
501
|
+
await click(clickableElement, this.driver);
|
|
502
|
+
try {
|
|
503
|
+
const widgetPopupEl = await this.driver.findElement(By7.css(`${byTestIdCssSelector(`${OPERATIONS_WIDGET_POPUP}-${this._testId}`)}`));
|
|
504
|
+
await waitElementIsVisible({
|
|
505
|
+
element: widgetPopupEl,
|
|
506
|
+
errorMessage: `Operation widget popup is not visible`,
|
|
507
|
+
driver: this.driver
|
|
508
|
+
});
|
|
509
|
+
} catch (_) {
|
|
510
|
+
throw `Operation widget popup is not visible`;
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
async setOperation(operationName) {
|
|
514
|
+
if (!FILTER_OPERATIONS.includes(operationName)) {
|
|
515
|
+
throw new Error(`Operation with name "${operationName}" is not correct.`);
|
|
516
|
+
}
|
|
517
|
+
await this.initOperationWidget();
|
|
518
|
+
const operationEl = await fixElementStaleError(By7.css(`${byTestIdCssSelector(`${OPERATIONS_WIDGET_POPUP}-${this._testId}`)} ${getWidgetInPopupSelector(operationName)}`), this.driver);
|
|
519
|
+
await click(operationEl, this.driver);
|
|
520
|
+
await wait(
|
|
521
|
+
async () => {
|
|
522
|
+
const currOperationName = await this.getAttribute("data-operation");
|
|
523
|
+
if (operationName === "isblank")
|
|
524
|
+
return true;
|
|
525
|
+
return currOperationName === operationName;
|
|
526
|
+
},
|
|
527
|
+
this.driver,
|
|
528
|
+
"Operation is not changed"
|
|
529
|
+
);
|
|
530
|
+
}
|
|
531
|
+
async getOperation() {
|
|
532
|
+
const result = await this.getAttribute("data-operation");
|
|
533
|
+
if (!result)
|
|
534
|
+
throw new Error("Operation not found");
|
|
535
|
+
return result;
|
|
536
|
+
}
|
|
537
|
+
async setIsBlank(value) {
|
|
538
|
+
const currValue = await this.getIsBlank();
|
|
539
|
+
if (currValue !== value) {
|
|
540
|
+
await this.setOperation("isblank");
|
|
541
|
+
await wait(
|
|
542
|
+
async () => {
|
|
543
|
+
const currIsBlank = await this.getIsBlank();
|
|
544
|
+
return currIsBlank === value;
|
|
545
|
+
},
|
|
546
|
+
this.driver,
|
|
547
|
+
"Operation is not changed"
|
|
548
|
+
);
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
async getIsBlank() {
|
|
552
|
+
const result = await this.getAttribute("data-hasblank");
|
|
553
|
+
return result === "true";
|
|
554
|
+
}
|
|
555
|
+
};
|
|
556
|
+
|
|
466
557
|
// src/pageObjects/elements/Filters/FormFilterField.ts
|
|
467
558
|
var FormFilterField = class extends AbstractEditor {
|
|
559
|
+
formName;
|
|
560
|
+
name;
|
|
468
561
|
constructor(parentCssSelector, formName, name, driver) {
|
|
469
562
|
super(parentCssSelector, byTestIdCssSelector(createLayoutFilterTestId(formName, name)), driver);
|
|
563
|
+
this.formName = formName;
|
|
564
|
+
this.name = name;
|
|
470
565
|
}
|
|
471
566
|
/**
|
|
472
567
|
* Возвращает значение в поле
|
|
@@ -502,15 +597,64 @@ var FormFilterField = class extends AbstractEditor {
|
|
|
502
597
|
async remove(itemText) {
|
|
503
598
|
return super.remove(itemText);
|
|
504
599
|
}
|
|
600
|
+
/**
|
|
601
|
+
* Инициализация операции фильтра
|
|
602
|
+
*/
|
|
603
|
+
async initOperation() {
|
|
604
|
+
return new FilterOperation({
|
|
605
|
+
parentCssSelector: this.parentCssSelector,
|
|
606
|
+
filterTestID: createLayoutFilterTestId(this.formName, this.name)
|
|
607
|
+
});
|
|
608
|
+
}
|
|
609
|
+
/**
|
|
610
|
+
* Устанавливает операцию для фильтра
|
|
611
|
+
* @example
|
|
612
|
+
* await form.formFilter('TagBox').setOperation("=");
|
|
613
|
+
*/
|
|
614
|
+
async setOperation(operationName) {
|
|
615
|
+
const filterOperation = await this.initOperation();
|
|
616
|
+
await filterOperation.setOperation(operationName);
|
|
617
|
+
}
|
|
618
|
+
/**
|
|
619
|
+
* Возвращает операцию фильтра
|
|
620
|
+
* @example
|
|
621
|
+
* expect(await form.formFilter('NumberFld').getOperation()).toBe("=");
|
|
622
|
+
*/
|
|
623
|
+
async getOperation() {
|
|
624
|
+
const filterOperation = await this.initOperation();
|
|
625
|
+
return await filterOperation.getOperation();
|
|
626
|
+
}
|
|
627
|
+
/**
|
|
628
|
+
* Устанавливает операцию 'isblank' для фильтра
|
|
629
|
+
* @example
|
|
630
|
+
* await form.formFilter('TagBox').setIsBlank(true);
|
|
631
|
+
*/
|
|
632
|
+
async setIsBlank(value) {
|
|
633
|
+
const filterOperation = await this.initOperation();
|
|
634
|
+
await filterOperation.setIsBlank(value);
|
|
635
|
+
}
|
|
636
|
+
/**
|
|
637
|
+
* Возвращает true|false, если операция 'isblank' установлена для фильтра
|
|
638
|
+
* @example
|
|
639
|
+
* expect(await form.formFilter('NumberFld').getIsBlank()).toBe(false);
|
|
640
|
+
*/
|
|
641
|
+
async getIsBlank() {
|
|
642
|
+
const filterOperation = await this.initOperation();
|
|
643
|
+
return await filterOperation.getIsBlank();
|
|
644
|
+
}
|
|
505
645
|
};
|
|
506
646
|
|
|
507
647
|
// src/pageObjects/elements/Filters/FilterPanel.ts
|
|
508
|
-
import { By as
|
|
648
|
+
import { By as By8 } from "selenium-webdriver";
|
|
509
649
|
|
|
510
650
|
// src/pageObjects/elements/Filters/PanelFilterField.ts
|
|
511
651
|
var PanelFilterField = class extends AbstractEditor {
|
|
652
|
+
formName;
|
|
653
|
+
name;
|
|
512
654
|
constructor(parentCssSelector, formName, name, driver) {
|
|
513
655
|
super(parentCssSelector, byTestIdCssSelector(createDocFilterTestId(formName, name)), driver);
|
|
656
|
+
this.formName = formName;
|
|
657
|
+
this.name = name;
|
|
514
658
|
}
|
|
515
659
|
/**
|
|
516
660
|
* Возвращает значение в поле
|
|
@@ -546,6 +690,51 @@ var PanelFilterField = class extends AbstractEditor {
|
|
|
546
690
|
async remove(itemText) {
|
|
547
691
|
return super.remove(itemText);
|
|
548
692
|
}
|
|
693
|
+
/**
|
|
694
|
+
* Инициализация операции фильтра
|
|
695
|
+
*/
|
|
696
|
+
async initOperation() {
|
|
697
|
+
return new FilterOperation({
|
|
698
|
+
parentCssSelector: this.parentCssSelector,
|
|
699
|
+
filterTestID: createDocFilterTestId(this.formName, this.name)
|
|
700
|
+
});
|
|
701
|
+
}
|
|
702
|
+
/**
|
|
703
|
+
* Устанавливает операцию для фильтра
|
|
704
|
+
* @example
|
|
705
|
+
* await form.filterPanel.filterField('TagBox').setOperation("=");
|
|
706
|
+
*/
|
|
707
|
+
async setOperation(operationName) {
|
|
708
|
+
const filterOperation = await this.initOperation();
|
|
709
|
+
await filterOperation.setOperation(operationName);
|
|
710
|
+
}
|
|
711
|
+
/**
|
|
712
|
+
* Возвращает операцию фильтра
|
|
713
|
+
* @example
|
|
714
|
+
* expect(await form.filterPanel.filterField('NumberFld').getOperation()).toBe("=");
|
|
715
|
+
*/
|
|
716
|
+
async getOperation() {
|
|
717
|
+
const filterOperation = await this.initOperation();
|
|
718
|
+
return await filterOperation.getOperation();
|
|
719
|
+
}
|
|
720
|
+
/**
|
|
721
|
+
* Устанавливает операцию 'isblank' для фильтра
|
|
722
|
+
* @example
|
|
723
|
+
* await form.filterPanel.filterField('TagBox').setIsBlank(true);
|
|
724
|
+
*/
|
|
725
|
+
async setIsBlank(value) {
|
|
726
|
+
const filterOperation = await this.initOperation();
|
|
727
|
+
await filterOperation.setIsBlank(value);
|
|
728
|
+
}
|
|
729
|
+
/**
|
|
730
|
+
* Возвращает true|false, если операция 'isblank' установлена для фильтра
|
|
731
|
+
* @example
|
|
732
|
+
* expect(await form.filterPanel.filterField('NumberFld').getIsBlank()).toBe(false);
|
|
733
|
+
*/
|
|
734
|
+
async getIsBlank() {
|
|
735
|
+
const filterOperation = await this.initOperation();
|
|
736
|
+
return await filterOperation.getIsBlank();
|
|
737
|
+
}
|
|
549
738
|
};
|
|
550
739
|
|
|
551
740
|
// src/pageObjects/elements/Filters/FilterPanel.ts
|
|
@@ -560,7 +749,7 @@ var FilterPanel = class extends AbstractElement {
|
|
|
560
749
|
async filterPanelButtons() {
|
|
561
750
|
const selector = `${this.elementCssSelector} ${FILTER_PANEL_SELECTOR} .filter-panel__buttons-panel .dx-button-text`;
|
|
562
751
|
const el = await this.getElement();
|
|
563
|
-
return el.findElements(
|
|
752
|
+
return el.findElements(By8.css(selector));
|
|
564
753
|
}
|
|
565
754
|
constructor(formName, driver) {
|
|
566
755
|
super(driver, drawerSelector(formName));
|
|
@@ -593,13 +782,13 @@ var FilterPanel = class extends AbstractElement {
|
|
|
593
782
|
await this.driver.sleep(300);
|
|
594
783
|
}
|
|
595
784
|
async close() {
|
|
596
|
-
const btn = await this.driver.findElement(
|
|
785
|
+
const btn = await this.driver.findElement(By8.css(`${this.elementCssSelector} ${CLOSE_SELECTOR}`));
|
|
597
786
|
await click(btn, this.driver);
|
|
598
787
|
}
|
|
599
788
|
};
|
|
600
789
|
|
|
601
790
|
// src/pageObjects/elements/Filters/ColumnFilter.ts
|
|
602
|
-
import { By as
|
|
791
|
+
import { By as By9 } from "selenium-webdriver";
|
|
603
792
|
|
|
604
793
|
// src/pageObjects/elements/Filters/HeaderFilterField.ts
|
|
605
794
|
var HeaderFilterField = class extends AbstractEditor {
|
|
@@ -639,11 +828,11 @@ var ColumnFilter = class extends AbstractElement {
|
|
|
639
828
|
}
|
|
640
829
|
async getApplyButton() {
|
|
641
830
|
const selector = `${HEADER_FILTER_CONTAINER} ${HEADER_FILTER_BUTTONS} ${APPLY_SELECTOR}`;
|
|
642
|
-
return this.driver.findElement(
|
|
831
|
+
return this.driver.findElement(By9.css(selector));
|
|
643
832
|
}
|
|
644
833
|
async getCancelButton() {
|
|
645
834
|
const selector = `${HEADER_FILTER_CONTAINER} ${HEADER_FILTER_BUTTONS} ${CANCEL_SELECTOR}`;
|
|
646
|
-
return this.driver.findElement(
|
|
835
|
+
return this.driver.findElement(By9.css(selector));
|
|
647
836
|
}
|
|
648
837
|
async apply() {
|
|
649
838
|
const btn = await this.getApplyButton();
|
|
@@ -657,17 +846,34 @@ var ColumnFilter = class extends AbstractElement {
|
|
|
657
846
|
const columnEl = await this._column.getElement();
|
|
658
847
|
const actions = this.driver.actions({ async: true });
|
|
659
848
|
await actions.move({ origin: columnEl }).perform();
|
|
660
|
-
const elements = await columnEl.findElements(
|
|
661
|
-
|
|
662
|
-
await
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
849
|
+
const elements = await columnEl.findElements(By9.css(HEADER_FILTER_ICON));
|
|
850
|
+
let headerFilterIcon = null;
|
|
851
|
+
await wait(
|
|
852
|
+
async () => {
|
|
853
|
+
let result = false;
|
|
854
|
+
for (let element of elements) {
|
|
855
|
+
if (await element.isDisplayed()) {
|
|
856
|
+
headerFilterIcon = element;
|
|
857
|
+
result = true;
|
|
858
|
+
break;
|
|
859
|
+
}
|
|
860
|
+
}
|
|
861
|
+
return result;
|
|
862
|
+
},
|
|
863
|
+
this.driver,
|
|
864
|
+
`HeaderFilter "${this._name}" is not visible`
|
|
865
|
+
);
|
|
667
866
|
if (!headerFilterIcon)
|
|
668
867
|
throw new Error(`HeaderFilter "${this._name}" is not visible`);
|
|
669
868
|
await headerFilterIcon.click();
|
|
670
|
-
|
|
869
|
+
const filter = new HeaderFilterField("", this._formName, this._name, this.driver);
|
|
870
|
+
const filterEl = await filter.getElement();
|
|
871
|
+
await waitElementIsVisible({
|
|
872
|
+
element: filterEl,
|
|
873
|
+
driver: this.driver,
|
|
874
|
+
errorMessage: `Header filter is not visible`
|
|
875
|
+
});
|
|
876
|
+
return filter;
|
|
671
877
|
}
|
|
672
878
|
/**
|
|
673
879
|
* Возвращает значение в поле
|
|
@@ -712,6 +918,36 @@ var ColumnFilter = class extends AbstractElement {
|
|
|
712
918
|
await filter.remove(itemText);
|
|
713
919
|
return this.apply();
|
|
714
920
|
}
|
|
921
|
+
// ToDo: Треба доробити після того, як буде реалізована логіка з editor buttons
|
|
922
|
+
async initOperation() {
|
|
923
|
+
await this.initFilter();
|
|
924
|
+
return new FilterOperation({
|
|
925
|
+
parentCssSelector: HEADER_FILTER_CONTAINER,
|
|
926
|
+
filterTestID: createHeaderFilterTestId(this._formName, this._name)
|
|
927
|
+
});
|
|
928
|
+
}
|
|
929
|
+
// ToDo: Треба доробити після того, як буде реалізована логіка з editor buttons
|
|
930
|
+
async setOperation(operationName) {
|
|
931
|
+
const filterOperation = await this.initOperation();
|
|
932
|
+
await filterOperation.setOperation(operationName);
|
|
933
|
+
await this.apply();
|
|
934
|
+
}
|
|
935
|
+
// ToDo: Треба доробити після того, як буде реалізована логіка з editor buttons
|
|
936
|
+
async getOperation() {
|
|
937
|
+
const filterOperation = await this.initOperation();
|
|
938
|
+
return await filterOperation.getOperation();
|
|
939
|
+
}
|
|
940
|
+
// ToDo: Треба доробити після того, як буде реалізована логіка з editor buttons
|
|
941
|
+
async setIsBlank(value) {
|
|
942
|
+
const filterOperation = await this.initOperation();
|
|
943
|
+
await filterOperation.setIsBlank(value);
|
|
944
|
+
await this.apply();
|
|
945
|
+
}
|
|
946
|
+
// ToDo: Треба доробити після того, як буде реалізована логіка з editor buttons
|
|
947
|
+
async getIsBlank() {
|
|
948
|
+
const filterOperation = await this.initOperation();
|
|
949
|
+
return await filterOperation.getIsBlank();
|
|
950
|
+
}
|
|
715
951
|
};
|
|
716
952
|
|
|
717
953
|
// src/pageObjects/elements/Forms/ListForm.ts
|
|
@@ -1114,15 +1114,15 @@ async function classDependencyInjector(formType) {
|
|
|
1114
1114
|
let SubFormFactoryClass;
|
|
1115
1115
|
switch (formType) {
|
|
1116
1116
|
case "1" /* LIST */:
|
|
1117
|
-
SubFormFactoryClass = (await import("./ListForm-
|
|
1117
|
+
SubFormFactoryClass = (await import("./ListForm-N6QNZXQE.mjs")).default;
|
|
1118
1118
|
break;
|
|
1119
1119
|
case "3" /* TREE */:
|
|
1120
|
-
SubFormFactoryClass = (await import("./TreeView-
|
|
1120
|
+
SubFormFactoryClass = (await import("./TreeView-JOHAYS2S.mjs")).default;
|
|
1121
1121
|
break;
|
|
1122
1122
|
case "2" /* EDIT */:
|
|
1123
1123
|
case "99" /* FREE_FORM */:
|
|
1124
1124
|
case "4" /* REPORT */:
|
|
1125
|
-
SubFormFactoryClass = (await import("./FormEdit-
|
|
1125
|
+
SubFormFactoryClass = (await import("./FormEdit-PRX4TB67.mjs")).default;
|
|
1126
1126
|
break;
|
|
1127
1127
|
default:
|
|
1128
1128
|
throw new Error(`Unsupported form type ${formType}`);
|
|
@@ -2042,6 +2042,110 @@ var init_FormToolbar = __esm({
|
|
|
2042
2042
|
}
|
|
2043
2043
|
});
|
|
2044
2044
|
|
|
2045
|
+
// src/pageObjects/elements/Filters/FilterOperation.ts
|
|
2046
|
+
var import_selenium_webdriver25, FILTER_OPERATIONS, BUTTON_OPERATION_WIDGET, OPERATIONS_WIDGET_POPUP, getWidgetInPopupSelector, FilterOperation;
|
|
2047
|
+
var init_FilterOperation = __esm({
|
|
2048
|
+
"src/pageObjects/elements/Filters/FilterOperation.ts"() {
|
|
2049
|
+
"use strict";
|
|
2050
|
+
import_selenium_webdriver25 = require("selenium-webdriver");
|
|
2051
|
+
init_fixElementStaleError();
|
|
2052
|
+
init_AbstractElementWithParent();
|
|
2053
|
+
init_locators();
|
|
2054
|
+
init_actions();
|
|
2055
|
+
init_wait();
|
|
2056
|
+
init_waitElementIsClickable();
|
|
2057
|
+
init_waitElementIsVisible();
|
|
2058
|
+
FILTER_OPERATIONS = [
|
|
2059
|
+
"=",
|
|
2060
|
+
"<>",
|
|
2061
|
+
"<",
|
|
2062
|
+
">",
|
|
2063
|
+
"<=",
|
|
2064
|
+
">=",
|
|
2065
|
+
"contains",
|
|
2066
|
+
"between",
|
|
2067
|
+
"isanyof",
|
|
2068
|
+
"isnotanyof",
|
|
2069
|
+
"isblank",
|
|
2070
|
+
"isnotblank",
|
|
2071
|
+
"startwith",
|
|
2072
|
+
"bywords"
|
|
2073
|
+
];
|
|
2074
|
+
BUTTON_OPERATION_WIDGET = "operation-widget";
|
|
2075
|
+
OPERATIONS_WIDGET_POPUP = "operation-type-widget-popup";
|
|
2076
|
+
getWidgetInPopupSelector = (operationName) => `.dx-list-item [data-operation="${operationName}"]`;
|
|
2077
|
+
FilterOperation = class extends AbstractElementWithParent {
|
|
2078
|
+
_testId;
|
|
2079
|
+
constructor({ parentCssSelector, filterTestID, driver }) {
|
|
2080
|
+
super(parentCssSelector, `${byTestIdCssSelector(`${BUTTON_OPERATION_WIDGET}-${filterTestID}`)}`, driver);
|
|
2081
|
+
this._testId = filterTestID;
|
|
2082
|
+
}
|
|
2083
|
+
async initOperationWidget() {
|
|
2084
|
+
const widgetButtonEl = await this.getElement();
|
|
2085
|
+
await waitElementIsClickable({
|
|
2086
|
+
element: widgetButtonEl,
|
|
2087
|
+
errorMessage: "Widget operation is not clickable",
|
|
2088
|
+
driver: this.driver
|
|
2089
|
+
});
|
|
2090
|
+
const clickableElement = await widgetButtonEl.findElement(import_selenium_webdriver25.By.className("dx-icon"));
|
|
2091
|
+
await click(clickableElement, this.driver);
|
|
2092
|
+
try {
|
|
2093
|
+
const widgetPopupEl = await this.driver.findElement(import_selenium_webdriver25.By.css(`${byTestIdCssSelector(`${OPERATIONS_WIDGET_POPUP}-${this._testId}`)}`));
|
|
2094
|
+
await waitElementIsVisible({
|
|
2095
|
+
element: widgetPopupEl,
|
|
2096
|
+
errorMessage: `Operation widget popup is not visible`,
|
|
2097
|
+
driver: this.driver
|
|
2098
|
+
});
|
|
2099
|
+
} catch (_) {
|
|
2100
|
+
throw `Operation widget popup is not visible`;
|
|
2101
|
+
}
|
|
2102
|
+
}
|
|
2103
|
+
async setOperation(operationName) {
|
|
2104
|
+
if (!FILTER_OPERATIONS.includes(operationName)) {
|
|
2105
|
+
throw new Error(`Operation with name "${operationName}" is not correct.`);
|
|
2106
|
+
}
|
|
2107
|
+
await this.initOperationWidget();
|
|
2108
|
+
const operationEl = await fixElementStaleError(import_selenium_webdriver25.By.css(`${byTestIdCssSelector(`${OPERATIONS_WIDGET_POPUP}-${this._testId}`)} ${getWidgetInPopupSelector(operationName)}`), this.driver);
|
|
2109
|
+
await click(operationEl, this.driver);
|
|
2110
|
+
await wait(
|
|
2111
|
+
async () => {
|
|
2112
|
+
const currOperationName = await this.getAttribute("data-operation");
|
|
2113
|
+
if (operationName === "isblank")
|
|
2114
|
+
return true;
|
|
2115
|
+
return currOperationName === operationName;
|
|
2116
|
+
},
|
|
2117
|
+
this.driver,
|
|
2118
|
+
"Operation is not changed"
|
|
2119
|
+
);
|
|
2120
|
+
}
|
|
2121
|
+
async getOperation() {
|
|
2122
|
+
const result = await this.getAttribute("data-operation");
|
|
2123
|
+
if (!result)
|
|
2124
|
+
throw new Error("Operation not found");
|
|
2125
|
+
return result;
|
|
2126
|
+
}
|
|
2127
|
+
async setIsBlank(value) {
|
|
2128
|
+
const currValue = await this.getIsBlank();
|
|
2129
|
+
if (currValue !== value) {
|
|
2130
|
+
await this.setOperation("isblank");
|
|
2131
|
+
await wait(
|
|
2132
|
+
async () => {
|
|
2133
|
+
const currIsBlank = await this.getIsBlank();
|
|
2134
|
+
return currIsBlank === value;
|
|
2135
|
+
},
|
|
2136
|
+
this.driver,
|
|
2137
|
+
"Operation is not changed"
|
|
2138
|
+
);
|
|
2139
|
+
}
|
|
2140
|
+
}
|
|
2141
|
+
async getIsBlank() {
|
|
2142
|
+
const result = await this.getAttribute("data-hasblank");
|
|
2143
|
+
return result === "true";
|
|
2144
|
+
}
|
|
2145
|
+
};
|
|
2146
|
+
}
|
|
2147
|
+
});
|
|
2148
|
+
|
|
2045
2149
|
// src/pageObjects/elements/Filters/FormFilterField.ts
|
|
2046
2150
|
var FormFilterField;
|
|
2047
2151
|
var init_FormFilterField = __esm({
|
|
@@ -2050,9 +2154,14 @@ var init_FormFilterField = __esm({
|
|
|
2050
2154
|
init_locators();
|
|
2051
2155
|
init_createDataTestId();
|
|
2052
2156
|
init_AbstractEditor2();
|
|
2157
|
+
init_FilterOperation();
|
|
2053
2158
|
FormFilterField = class extends AbstractEditor {
|
|
2159
|
+
formName;
|
|
2160
|
+
name;
|
|
2054
2161
|
constructor(parentCssSelector, formName, name, driver) {
|
|
2055
2162
|
super(parentCssSelector, byTestIdCssSelector(createLayoutFilterTestId(formName, name)), driver);
|
|
2163
|
+
this.formName = formName;
|
|
2164
|
+
this.name = name;
|
|
2056
2165
|
}
|
|
2057
2166
|
/**
|
|
2058
2167
|
* Возвращает значение в поле
|
|
@@ -2088,6 +2197,51 @@ var init_FormFilterField = __esm({
|
|
|
2088
2197
|
async remove(itemText) {
|
|
2089
2198
|
return super.remove(itemText);
|
|
2090
2199
|
}
|
|
2200
|
+
/**
|
|
2201
|
+
* Инициализация операции фильтра
|
|
2202
|
+
*/
|
|
2203
|
+
async initOperation() {
|
|
2204
|
+
return new FilterOperation({
|
|
2205
|
+
parentCssSelector: this.parentCssSelector,
|
|
2206
|
+
filterTestID: createLayoutFilterTestId(this.formName, this.name)
|
|
2207
|
+
});
|
|
2208
|
+
}
|
|
2209
|
+
/**
|
|
2210
|
+
* Устанавливает операцию для фильтра
|
|
2211
|
+
* @example
|
|
2212
|
+
* await form.formFilter('TagBox').setOperation("=");
|
|
2213
|
+
*/
|
|
2214
|
+
async setOperation(operationName) {
|
|
2215
|
+
const filterOperation = await this.initOperation();
|
|
2216
|
+
await filterOperation.setOperation(operationName);
|
|
2217
|
+
}
|
|
2218
|
+
/**
|
|
2219
|
+
* Возвращает операцию фильтра
|
|
2220
|
+
* @example
|
|
2221
|
+
* expect(await form.formFilter('NumberFld').getOperation()).toBe("=");
|
|
2222
|
+
*/
|
|
2223
|
+
async getOperation() {
|
|
2224
|
+
const filterOperation = await this.initOperation();
|
|
2225
|
+
return await filterOperation.getOperation();
|
|
2226
|
+
}
|
|
2227
|
+
/**
|
|
2228
|
+
* Устанавливает операцию 'isblank' для фильтра
|
|
2229
|
+
* @example
|
|
2230
|
+
* await form.formFilter('TagBox').setIsBlank(true);
|
|
2231
|
+
*/
|
|
2232
|
+
async setIsBlank(value) {
|
|
2233
|
+
const filterOperation = await this.initOperation();
|
|
2234
|
+
await filterOperation.setIsBlank(value);
|
|
2235
|
+
}
|
|
2236
|
+
/**
|
|
2237
|
+
* Возвращает true|false, если операция 'isblank' установлена для фильтра
|
|
2238
|
+
* @example
|
|
2239
|
+
* expect(await form.formFilter('NumberFld').getIsBlank()).toBe(false);
|
|
2240
|
+
*/
|
|
2241
|
+
async getIsBlank() {
|
|
2242
|
+
const filterOperation = await this.initOperation();
|
|
2243
|
+
return await filterOperation.getIsBlank();
|
|
2244
|
+
}
|
|
2091
2245
|
};
|
|
2092
2246
|
}
|
|
2093
2247
|
});
|
|
@@ -2100,9 +2254,14 @@ var init_PanelFilterField = __esm({
|
|
|
2100
2254
|
init_locators();
|
|
2101
2255
|
init_createDataTestId();
|
|
2102
2256
|
init_AbstractEditor2();
|
|
2257
|
+
init_FilterOperation();
|
|
2103
2258
|
PanelFilterField = class extends AbstractEditor {
|
|
2259
|
+
formName;
|
|
2260
|
+
name;
|
|
2104
2261
|
constructor(parentCssSelector, formName, name, driver) {
|
|
2105
2262
|
super(parentCssSelector, byTestIdCssSelector(createDocFilterTestId(formName, name)), driver);
|
|
2263
|
+
this.formName = formName;
|
|
2264
|
+
this.name = name;
|
|
2106
2265
|
}
|
|
2107
2266
|
/**
|
|
2108
2267
|
* Возвращает значение в поле
|
|
@@ -2138,16 +2297,61 @@ var init_PanelFilterField = __esm({
|
|
|
2138
2297
|
async remove(itemText) {
|
|
2139
2298
|
return super.remove(itemText);
|
|
2140
2299
|
}
|
|
2300
|
+
/**
|
|
2301
|
+
* Инициализация операции фильтра
|
|
2302
|
+
*/
|
|
2303
|
+
async initOperation() {
|
|
2304
|
+
return new FilterOperation({
|
|
2305
|
+
parentCssSelector: this.parentCssSelector,
|
|
2306
|
+
filterTestID: createDocFilterTestId(this.formName, this.name)
|
|
2307
|
+
});
|
|
2308
|
+
}
|
|
2309
|
+
/**
|
|
2310
|
+
* Устанавливает операцию для фильтра
|
|
2311
|
+
* @example
|
|
2312
|
+
* await form.filterPanel.filterField('TagBox').setOperation("=");
|
|
2313
|
+
*/
|
|
2314
|
+
async setOperation(operationName) {
|
|
2315
|
+
const filterOperation = await this.initOperation();
|
|
2316
|
+
await filterOperation.setOperation(operationName);
|
|
2317
|
+
}
|
|
2318
|
+
/**
|
|
2319
|
+
* Возвращает операцию фильтра
|
|
2320
|
+
* @example
|
|
2321
|
+
* expect(await form.filterPanel.filterField('NumberFld').getOperation()).toBe("=");
|
|
2322
|
+
*/
|
|
2323
|
+
async getOperation() {
|
|
2324
|
+
const filterOperation = await this.initOperation();
|
|
2325
|
+
return await filterOperation.getOperation();
|
|
2326
|
+
}
|
|
2327
|
+
/**
|
|
2328
|
+
* Устанавливает операцию 'isblank' для фильтра
|
|
2329
|
+
* @example
|
|
2330
|
+
* await form.filterPanel.filterField('TagBox').setIsBlank(true);
|
|
2331
|
+
*/
|
|
2332
|
+
async setIsBlank(value) {
|
|
2333
|
+
const filterOperation = await this.initOperation();
|
|
2334
|
+
await filterOperation.setIsBlank(value);
|
|
2335
|
+
}
|
|
2336
|
+
/**
|
|
2337
|
+
* Возвращает true|false, если операция 'isblank' установлена для фильтра
|
|
2338
|
+
* @example
|
|
2339
|
+
* expect(await form.filterPanel.filterField('NumberFld').getIsBlank()).toBe(false);
|
|
2340
|
+
*/
|
|
2341
|
+
async getIsBlank() {
|
|
2342
|
+
const filterOperation = await this.initOperation();
|
|
2343
|
+
return await filterOperation.getIsBlank();
|
|
2344
|
+
}
|
|
2141
2345
|
};
|
|
2142
2346
|
}
|
|
2143
2347
|
});
|
|
2144
2348
|
|
|
2145
2349
|
// src/pageObjects/elements/Filters/FilterPanel.ts
|
|
2146
|
-
var
|
|
2350
|
+
var import_selenium_webdriver26, drawerSelector, FILTER_PANEL_SELECTOR, CLOSE_SELECTOR, FilterPanel;
|
|
2147
2351
|
var init_FilterPanel = __esm({
|
|
2148
2352
|
"src/pageObjects/elements/Filters/FilterPanel.ts"() {
|
|
2149
2353
|
"use strict";
|
|
2150
|
-
|
|
2354
|
+
import_selenium_webdriver26 = require("selenium-webdriver");
|
|
2151
2355
|
init_AbstractElement();
|
|
2152
2356
|
init_PanelFilterField();
|
|
2153
2357
|
init_actions();
|
|
@@ -2162,7 +2366,7 @@ var init_FilterPanel = __esm({
|
|
|
2162
2366
|
async filterPanelButtons() {
|
|
2163
2367
|
const selector = `${this.elementCssSelector} ${FILTER_PANEL_SELECTOR} .filter-panel__buttons-panel .dx-button-text`;
|
|
2164
2368
|
const el = await this.getElement();
|
|
2165
|
-
return el.findElements(
|
|
2369
|
+
return el.findElements(import_selenium_webdriver26.By.css(selector));
|
|
2166
2370
|
}
|
|
2167
2371
|
constructor(formName, driver) {
|
|
2168
2372
|
super(driver, drawerSelector(formName));
|
|
@@ -2195,7 +2399,7 @@ var init_FilterPanel = __esm({
|
|
|
2195
2399
|
await this.driver.sleep(300);
|
|
2196
2400
|
}
|
|
2197
2401
|
async close() {
|
|
2198
|
-
const btn = await this.driver.findElement(
|
|
2402
|
+
const btn = await this.driver.findElement(import_selenium_webdriver26.By.css(`${this.elementCssSelector} ${CLOSE_SELECTOR}`));
|
|
2199
2403
|
await click(btn, this.driver);
|
|
2200
2404
|
}
|
|
2201
2405
|
};
|
|
@@ -2231,15 +2435,18 @@ var init_HeaderFilterField = __esm({
|
|
|
2231
2435
|
});
|
|
2232
2436
|
|
|
2233
2437
|
// src/pageObjects/elements/Filters/ColumnFilter.ts
|
|
2234
|
-
var
|
|
2438
|
+
var import_selenium_webdriver27, APPLY_SELECTOR, CANCEL_SELECTOR, HEADER_FILTER_ICON, HEADER_FILTER_CONTAINER, HEADER_FILTER_BUTTONS, ColumnFilter;
|
|
2235
2439
|
var init_ColumnFilter = __esm({
|
|
2236
2440
|
"src/pageObjects/elements/Filters/ColumnFilter.ts"() {
|
|
2237
2441
|
"use strict";
|
|
2238
2442
|
init_actions();
|
|
2239
|
-
|
|
2443
|
+
import_selenium_webdriver27 = require("selenium-webdriver");
|
|
2240
2444
|
init_HeaderFilterField();
|
|
2241
2445
|
init_waitElementIsVisible();
|
|
2242
2446
|
init_AbstractElement();
|
|
2447
|
+
init_FilterOperation();
|
|
2448
|
+
init_createDataTestId();
|
|
2449
|
+
init_wait();
|
|
2243
2450
|
APPLY_SELECTOR = ".apply-button";
|
|
2244
2451
|
CANCEL_SELECTOR = ".cancel-button";
|
|
2245
2452
|
HEADER_FILTER_ICON = ".dx-column-indicators .dx-header-filter";
|
|
@@ -2258,11 +2465,11 @@ var init_ColumnFilter = __esm({
|
|
|
2258
2465
|
}
|
|
2259
2466
|
async getApplyButton() {
|
|
2260
2467
|
const selector = `${HEADER_FILTER_CONTAINER} ${HEADER_FILTER_BUTTONS} ${APPLY_SELECTOR}`;
|
|
2261
|
-
return this.driver.findElement(
|
|
2468
|
+
return this.driver.findElement(import_selenium_webdriver27.By.css(selector));
|
|
2262
2469
|
}
|
|
2263
2470
|
async getCancelButton() {
|
|
2264
2471
|
const selector = `${HEADER_FILTER_CONTAINER} ${HEADER_FILTER_BUTTONS} ${CANCEL_SELECTOR}`;
|
|
2265
|
-
return this.driver.findElement(
|
|
2472
|
+
return this.driver.findElement(import_selenium_webdriver27.By.css(selector));
|
|
2266
2473
|
}
|
|
2267
2474
|
async apply() {
|
|
2268
2475
|
const btn = await this.getApplyButton();
|
|
@@ -2276,17 +2483,34 @@ var init_ColumnFilter = __esm({
|
|
|
2276
2483
|
const columnEl = await this._column.getElement();
|
|
2277
2484
|
const actions = this.driver.actions({ async: true });
|
|
2278
2485
|
await actions.move({ origin: columnEl }).perform();
|
|
2279
|
-
const elements = await columnEl.findElements(
|
|
2280
|
-
|
|
2281
|
-
await
|
|
2282
|
-
|
|
2283
|
-
|
|
2284
|
-
|
|
2285
|
-
|
|
2486
|
+
const elements = await columnEl.findElements(import_selenium_webdriver27.By.css(HEADER_FILTER_ICON));
|
|
2487
|
+
let headerFilterIcon = null;
|
|
2488
|
+
await wait(
|
|
2489
|
+
async () => {
|
|
2490
|
+
let result = false;
|
|
2491
|
+
for (let element of elements) {
|
|
2492
|
+
if (await element.isDisplayed()) {
|
|
2493
|
+
headerFilterIcon = element;
|
|
2494
|
+
result = true;
|
|
2495
|
+
break;
|
|
2496
|
+
}
|
|
2497
|
+
}
|
|
2498
|
+
return result;
|
|
2499
|
+
},
|
|
2500
|
+
this.driver,
|
|
2501
|
+
`HeaderFilter "${this._name}" is not visible`
|
|
2502
|
+
);
|
|
2286
2503
|
if (!headerFilterIcon)
|
|
2287
2504
|
throw new Error(`HeaderFilter "${this._name}" is not visible`);
|
|
2288
2505
|
await headerFilterIcon.click();
|
|
2289
|
-
|
|
2506
|
+
const filter = new HeaderFilterField("", this._formName, this._name, this.driver);
|
|
2507
|
+
const filterEl = await filter.getElement();
|
|
2508
|
+
await waitElementIsVisible({
|
|
2509
|
+
element: filterEl,
|
|
2510
|
+
driver: this.driver,
|
|
2511
|
+
errorMessage: `Header filter is not visible`
|
|
2512
|
+
});
|
|
2513
|
+
return filter;
|
|
2290
2514
|
}
|
|
2291
2515
|
/**
|
|
2292
2516
|
* Возвращает значение в поле
|
|
@@ -2331,6 +2555,36 @@ var init_ColumnFilter = __esm({
|
|
|
2331
2555
|
await filter.remove(itemText);
|
|
2332
2556
|
return this.apply();
|
|
2333
2557
|
}
|
|
2558
|
+
// ToDo: Треба доробити після того, як буде реалізована логіка з editor buttons
|
|
2559
|
+
async initOperation() {
|
|
2560
|
+
await this.initFilter();
|
|
2561
|
+
return new FilterOperation({
|
|
2562
|
+
parentCssSelector: HEADER_FILTER_CONTAINER,
|
|
2563
|
+
filterTestID: createHeaderFilterTestId(this._formName, this._name)
|
|
2564
|
+
});
|
|
2565
|
+
}
|
|
2566
|
+
// ToDo: Треба доробити після того, як буде реалізована логіка з editor buttons
|
|
2567
|
+
async setOperation(operationName) {
|
|
2568
|
+
const filterOperation = await this.initOperation();
|
|
2569
|
+
await filterOperation.setOperation(operationName);
|
|
2570
|
+
await this.apply();
|
|
2571
|
+
}
|
|
2572
|
+
// ToDo: Треба доробити після того, як буде реалізована логіка з editor buttons
|
|
2573
|
+
async getOperation() {
|
|
2574
|
+
const filterOperation = await this.initOperation();
|
|
2575
|
+
return await filterOperation.getOperation();
|
|
2576
|
+
}
|
|
2577
|
+
// ToDo: Треба доробити після того, як буде реалізована логіка з editor buttons
|
|
2578
|
+
async setIsBlank(value) {
|
|
2579
|
+
const filterOperation = await this.initOperation();
|
|
2580
|
+
await filterOperation.setIsBlank(value);
|
|
2581
|
+
await this.apply();
|
|
2582
|
+
}
|
|
2583
|
+
// ToDo: Треба доробити після того, як буде реалізована логіка з editor buttons
|
|
2584
|
+
async getIsBlank() {
|
|
2585
|
+
const filterOperation = await this.initOperation();
|
|
2586
|
+
return await filterOperation.getIsBlank();
|
|
2587
|
+
}
|
|
2334
2588
|
};
|
|
2335
2589
|
}
|
|
2336
2590
|
});
|
|
@@ -2463,12 +2717,12 @@ var init_createSubFormInstance = __esm({
|
|
|
2463
2717
|
});
|
|
2464
2718
|
|
|
2465
2719
|
// src/pageObjects/elements/Forms/Form.ts
|
|
2466
|
-
var
|
|
2720
|
+
var import_selenium_webdriver28, formTestId, Form;
|
|
2467
2721
|
var init_Form = __esm({
|
|
2468
2722
|
"src/pageObjects/elements/Forms/Form.ts"() {
|
|
2469
2723
|
"use strict";
|
|
2470
2724
|
init_locators();
|
|
2471
|
-
|
|
2725
|
+
import_selenium_webdriver28 = require("selenium-webdriver");
|
|
2472
2726
|
init_AbstractForm();
|
|
2473
2727
|
init_waitElementIsVisible();
|
|
2474
2728
|
init_createSubFormInstance();
|
|
@@ -2493,10 +2747,10 @@ var init_Form = __esm({
|
|
|
2493
2747
|
*/
|
|
2494
2748
|
async getTitleText() {
|
|
2495
2749
|
if (await this.isModal()) {
|
|
2496
|
-
const titleEl2 = await this.driver.findElement(
|
|
2750
|
+
const titleEl2 = await this.driver.findElement(import_selenium_webdriver28.By.css(`${this.popupContainerCssSelector} .popup-title`));
|
|
2497
2751
|
return titleEl2.getText();
|
|
2498
2752
|
}
|
|
2499
|
-
let titleEl = await this.driver.findElement(
|
|
2753
|
+
let titleEl = await this.driver.findElement(import_selenium_webdriver28.By.className("main-toolbar-form-title"));
|
|
2500
2754
|
return titleEl.getText();
|
|
2501
2755
|
}
|
|
2502
2756
|
setSubFormMode() {
|
|
@@ -2514,7 +2768,7 @@ var init_Form = __esm({
|
|
|
2514
2768
|
*/
|
|
2515
2769
|
async subForm(name) {
|
|
2516
2770
|
const cssSelector = subformCssSelector(this.containerCssSelector, subFormTestId(name));
|
|
2517
|
-
const byCssSelector =
|
|
2771
|
+
const byCssSelector = import_selenium_webdriver28.By.css(cssSelector);
|
|
2518
2772
|
const subFormEl = await this.driver.findElement(byCssSelector);
|
|
2519
2773
|
await waitElementIsVisible({
|
|
2520
2774
|
element: subFormEl,
|
|
@@ -2544,18 +2798,18 @@ var FormEdit_exports = {};
|
|
|
2544
2798
|
__export(FormEdit_exports, {
|
|
2545
2799
|
default: () => FormEdit
|
|
2546
2800
|
});
|
|
2547
|
-
var
|
|
2801
|
+
var import_selenium_webdriver29, FormEdit;
|
|
2548
2802
|
var init_FormEdit = __esm({
|
|
2549
2803
|
"src/pageObjects/elements/Forms/FormEdit.ts"() {
|
|
2550
2804
|
"use strict";
|
|
2551
2805
|
init_Form();
|
|
2552
|
-
|
|
2806
|
+
import_selenium_webdriver29 = require("selenium-webdriver");
|
|
2553
2807
|
init_FormField();
|
|
2554
2808
|
init_actions();
|
|
2555
2809
|
init_wait();
|
|
2556
2810
|
FormEdit = class extends Form {
|
|
2557
|
-
saveButtonBy =
|
|
2558
|
-
closeButtonBy =
|
|
2811
|
+
saveButtonBy = import_selenium_webdriver29.By.id("button-save");
|
|
2812
|
+
closeButtonBy = import_selenium_webdriver29.By.id("button-cancel");
|
|
2559
2813
|
constructor(driver) {
|
|
2560
2814
|
super(driver);
|
|
2561
2815
|
this.popupContainerCssSelector = `.popup .form-edit-${this.formName}`;
|
|
@@ -2871,13 +3125,13 @@ init_ListForm();
|
|
|
2871
3125
|
init_TreeView();
|
|
2872
3126
|
|
|
2873
3127
|
// src/pageObjects/elements/Forms/ReportForm.ts
|
|
2874
|
-
var
|
|
3128
|
+
var import_selenium_webdriver30 = require("selenium-webdriver");
|
|
2875
3129
|
init_FormEdit();
|
|
2876
3130
|
var ReportForm = class extends FormEdit {
|
|
2877
3131
|
constructor(driver) {
|
|
2878
3132
|
super(driver);
|
|
2879
3133
|
this.popupContainerCssSelector = `.popup .form-report-${this.formName}`;
|
|
2880
|
-
this.saveButtonBy =
|
|
3134
|
+
this.saveButtonBy = import_selenium_webdriver30.By.id("button-apply");
|
|
2881
3135
|
}
|
|
2882
3136
|
/**
|
|
2883
3137
|
* Знаходить поле/фільтр у формі репорту за ім'ям
|
|
@@ -2900,7 +3154,7 @@ init_FilterPanel();
|
|
|
2900
3154
|
|
|
2901
3155
|
// src/pageObjects/elements/Dialog.ts
|
|
2902
3156
|
init_AbstractElement();
|
|
2903
|
-
var
|
|
3157
|
+
var import_selenium_webdriver31 = require("selenium-webdriver");
|
|
2904
3158
|
init_AbstractButton();
|
|
2905
3159
|
var DIALOG_CLASS = ".d5-dialog";
|
|
2906
3160
|
var DIALOG_TITLE_CLASS = ".dialog__title";
|
|
@@ -2915,7 +3169,7 @@ var DialogButton = class extends AbstractButton {
|
|
|
2915
3169
|
}
|
|
2916
3170
|
async getElement() {
|
|
2917
3171
|
const panel = await super.getElement();
|
|
2918
|
-
return panel.findElement(
|
|
3172
|
+
return panel.findElement(import_selenium_webdriver31.By.xpath(buttonByTextXpath2(this.text)));
|
|
2919
3173
|
}
|
|
2920
3174
|
buttonNotDisplayedError() {
|
|
2921
3175
|
return `Dialog button ${this.text} cannot be clicked. It is not displayed or it is disabled`;
|
|
@@ -2935,11 +3189,11 @@ var Dialog = class extends AbstractElement {
|
|
|
2935
3189
|
return this.joinRelativeCssSelectors([DIALOG_CLASS, DIALOG_BUTTONS_PANEL_CLASS]);
|
|
2936
3190
|
}
|
|
2937
3191
|
async title() {
|
|
2938
|
-
const el = await this.driver.findElement(
|
|
3192
|
+
const el = await this.driver.findElement(import_selenium_webdriver31.By.css(this.titleSelector));
|
|
2939
3193
|
return await el.getText();
|
|
2940
3194
|
}
|
|
2941
3195
|
async text() {
|
|
2942
|
-
const el = await this.driver.findElement(
|
|
3196
|
+
const el = await this.driver.findElement(import_selenium_webdriver31.By.css(this.textSelector));
|
|
2943
3197
|
return await el.getText();
|
|
2944
3198
|
}
|
|
2945
3199
|
button(text) {
|
|
@@ -538,6 +538,8 @@ declare class Table extends AbstractElementWithParent {
|
|
|
538
538
|
}
|
|
539
539
|
|
|
540
540
|
declare class FormFilterField extends AbstractEditor {
|
|
541
|
+
private readonly formName;
|
|
542
|
+
private readonly name;
|
|
541
543
|
constructor(parentCssSelector: string, formName: string, name: string, driver?: WebDriver);
|
|
542
544
|
/**
|
|
543
545
|
* Возвращает значение в поле
|
|
@@ -565,9 +567,39 @@ declare class FormFilterField extends AbstractEditor {
|
|
|
565
567
|
* await form.formFilter('TagBox').remove('test');
|
|
566
568
|
*/
|
|
567
569
|
remove(itemText: string): Promise<void>;
|
|
570
|
+
/**
|
|
571
|
+
* Инициализация операции фильтра
|
|
572
|
+
*/
|
|
573
|
+
private initOperation;
|
|
574
|
+
/**
|
|
575
|
+
* Устанавливает операцию для фильтра
|
|
576
|
+
* @example
|
|
577
|
+
* await form.formFilter('TagBox').setOperation("=");
|
|
578
|
+
*/
|
|
579
|
+
setOperation(operationName: string): Promise<void>;
|
|
580
|
+
/**
|
|
581
|
+
* Возвращает операцию фильтра
|
|
582
|
+
* @example
|
|
583
|
+
* expect(await form.formFilter('NumberFld').getOperation()).toBe("=");
|
|
584
|
+
*/
|
|
585
|
+
getOperation(): Promise<any>;
|
|
586
|
+
/**
|
|
587
|
+
* Устанавливает операцию 'isblank' для фильтра
|
|
588
|
+
* @example
|
|
589
|
+
* await form.formFilter('TagBox').setIsBlank(true);
|
|
590
|
+
*/
|
|
591
|
+
setIsBlank(value: boolean): Promise<void>;
|
|
592
|
+
/**
|
|
593
|
+
* Возвращает true|false, если операция 'isblank' установлена для фильтра
|
|
594
|
+
* @example
|
|
595
|
+
* expect(await form.formFilter('NumberFld').getIsBlank()).toBe(false);
|
|
596
|
+
*/
|
|
597
|
+
getIsBlank(): Promise<boolean>;
|
|
568
598
|
}
|
|
569
599
|
|
|
570
600
|
declare class PanelFilterField extends AbstractEditor {
|
|
601
|
+
private readonly formName;
|
|
602
|
+
private readonly name;
|
|
571
603
|
constructor(parentCssSelector: string, formName: string, name: string, driver?: WebDriver);
|
|
572
604
|
/**
|
|
573
605
|
* Возвращает значение в поле
|
|
@@ -595,6 +627,34 @@ declare class PanelFilterField extends AbstractEditor {
|
|
|
595
627
|
* await form.filterPanel.filterField('TagBox').remove('test');
|
|
596
628
|
*/
|
|
597
629
|
remove(itemText: string): Promise<void>;
|
|
630
|
+
/**
|
|
631
|
+
* Инициализация операции фильтра
|
|
632
|
+
*/
|
|
633
|
+
private initOperation;
|
|
634
|
+
/**
|
|
635
|
+
* Устанавливает операцию для фильтра
|
|
636
|
+
* @example
|
|
637
|
+
* await form.filterPanel.filterField('TagBox').setOperation("=");
|
|
638
|
+
*/
|
|
639
|
+
setOperation(operationName: string): Promise<void>;
|
|
640
|
+
/**
|
|
641
|
+
* Возвращает операцию фильтра
|
|
642
|
+
* @example
|
|
643
|
+
* expect(await form.filterPanel.filterField('NumberFld').getOperation()).toBe("=");
|
|
644
|
+
*/
|
|
645
|
+
getOperation(): Promise<any>;
|
|
646
|
+
/**
|
|
647
|
+
* Устанавливает операцию 'isblank' для фильтра
|
|
648
|
+
* @example
|
|
649
|
+
* await form.filterPanel.filterField('TagBox').setIsBlank(true);
|
|
650
|
+
*/
|
|
651
|
+
setIsBlank(value: boolean): Promise<void>;
|
|
652
|
+
/**
|
|
653
|
+
* Возвращает true|false, если операция 'isblank' установлена для фильтра
|
|
654
|
+
* @example
|
|
655
|
+
* expect(await form.filterPanel.filterField('NumberFld').getIsBlank()).toBe(false);
|
|
656
|
+
*/
|
|
657
|
+
getIsBlank(): Promise<boolean>;
|
|
598
658
|
}
|
|
599
659
|
|
|
600
660
|
declare class FilterPanel extends AbstractElement {
|
|
@@ -623,6 +683,21 @@ declare class HeaderFilterField extends AbstractEditor {
|
|
|
623
683
|
remove(itemText: string): Promise<void>;
|
|
624
684
|
}
|
|
625
685
|
|
|
686
|
+
interface IFilterOperations {
|
|
687
|
+
parentCssSelector: string;
|
|
688
|
+
filterTestID: string;
|
|
689
|
+
driver?: WebDriver;
|
|
690
|
+
}
|
|
691
|
+
declare class FilterOperation extends AbstractElementWithParent {
|
|
692
|
+
private readonly _testId;
|
|
693
|
+
constructor({ parentCssSelector, filterTestID, driver, }: IFilterOperations);
|
|
694
|
+
private initOperationWidget;
|
|
695
|
+
setOperation(operationName: string): Promise<void>;
|
|
696
|
+
getOperation(): Promise<any>;
|
|
697
|
+
setIsBlank(value: boolean): Promise<void>;
|
|
698
|
+
getIsBlank(): Promise<boolean>;
|
|
699
|
+
}
|
|
700
|
+
|
|
626
701
|
declare class ColumnFilter extends AbstractElement {
|
|
627
702
|
private readonly _formName;
|
|
628
703
|
private readonly _name;
|
|
@@ -659,6 +734,11 @@ declare class ColumnFilter extends AbstractElement {
|
|
|
659
734
|
* await form.columnFilter('TagBox').remove('test');
|
|
660
735
|
*/
|
|
661
736
|
remove(itemText: string): Promise<void>;
|
|
737
|
+
initOperation(): Promise<FilterOperation>;
|
|
738
|
+
setOperation(operationName: string): Promise<void>;
|
|
739
|
+
getOperation(): Promise<any>;
|
|
740
|
+
setIsBlank(value: boolean): Promise<void>;
|
|
741
|
+
getIsBlank(): Promise<boolean>;
|
|
662
742
|
}
|
|
663
743
|
|
|
664
744
|
declare class ListForm extends Form {
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
2
|
TreeView
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-4PUDCQM6.mjs";
|
|
4
4
|
import {
|
|
5
5
|
FilterPanel,
|
|
6
6
|
FormFilterField,
|
|
7
7
|
ListForm,
|
|
8
8
|
PanelFilterField
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-LTHDA5XH.mjs";
|
|
10
10
|
import {
|
|
11
11
|
FormEdit
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-H3M6VBPP.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-ZT3B7BQ2.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-4PUDCQM6.mjs";
|
|
4
4
|
import {
|
|
5
5
|
FilterPanel,
|
|
6
6
|
FormFilterField,
|
|
7
7
|
ListForm,
|
|
8
8
|
PanelFilterField
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-LTHDA5XH.mjs";
|
|
10
10
|
import {
|
|
11
11
|
FormEdit
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-H3M6VBPP.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-ZT3B7BQ2.mjs";
|
|
34
34
|
|
|
35
35
|
// src/pageObjects/pages/LoginPage.ts
|
|
36
36
|
var LOGIN_PATH = "/login";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "d5-testing-library",
|
|
3
|
-
"version": "1.8.0-alpha.
|
|
3
|
+
"version": "1.8.0-alpha.2",
|
|
4
4
|
"description": "e2e testing D5 projects",
|
|
5
5
|
"main": "dist/cjs/d5-testing-library.cjs",
|
|
6
6
|
"module": "dist/d5-testing-library.legacy-esm.js",
|
|
@@ -32,19 +32,19 @@
|
|
|
32
32
|
"author": "",
|
|
33
33
|
"license": "ISC",
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"selenium-webdriver": "
|
|
35
|
+
"selenium-webdriver": "4.25.0",
|
|
36
36
|
"typescript": "5.3.3"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"@babel/core": "^7.23.9",
|
|
40
40
|
"@types/node": "^20.11.16",
|
|
41
|
-
"@types/selenium-webdriver": "
|
|
41
|
+
"@types/selenium-webdriver": "4.1.26",
|
|
42
42
|
"commander": "12.0.0",
|
|
43
43
|
"esbuild-extra": "^0.3.1",
|
|
44
44
|
"rimraf": "^5.0.5",
|
|
45
45
|
"tsup": "7.0.0"
|
|
46
46
|
},
|
|
47
47
|
"peerDependencies": {
|
|
48
|
-
"selenium-webdriver": "
|
|
48
|
+
"selenium-webdriver": "4.25.0"
|
|
49
49
|
}
|
|
50
50
|
}
|