d5-testing-library 1.8.0-alpha.13 → 1.8.0-alpha.14
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-6DS2QEWW.mjs +7 -0
- package/dist/ListForm-MS7U6ME7.mjs +7 -0
- package/dist/TreeView-DGKYMM67.mjs +8 -0
- package/dist/{chunk-D7226XWY.mjs → chunk-I42Z72TQ.mjs} +66 -60
- package/dist/{chunk-YSGDK2Y2.mjs → chunk-JLEBXO5Q.mjs} +240 -76
- package/dist/{chunk-E3O6YV4X.mjs → chunk-SR3FJAYB.mjs} +1 -1
- package/dist/{chunk-7IHH2VP3.mjs → chunk-WYLPCDA5.mjs} +2 -1
- package/dist/cjs/d5-testing-library.cjs +357 -144
- package/dist/d5-testing-library.d.ts +98 -11
- package/dist/d5-testing-library.legacy-esm.js +6 -4
- package/dist/d5-testing-library.mjs +6 -4
- package/package.json +18 -6
- package/dist/FormEdit-NZEL6BMH.mjs +0 -7
- package/dist/ListForm-P36U2E2W.mjs +0 -7
- package/dist/TreeView-NY7F4AKZ.mjs +0 -8
|
@@ -150,6 +150,14 @@ var click = async (webElement, driver) => {
|
|
|
150
150
|
const actions = driver.actions({ async: true });
|
|
151
151
|
await actions.move({ origin: webElement }).click().perform();
|
|
152
152
|
};
|
|
153
|
+
var contextMenu = async (webElement, driver) => {
|
|
154
|
+
driver = driver ?? config().driver;
|
|
155
|
+
if (!await webElement.isDisplayed()) {
|
|
156
|
+
await driver.executeScript("arguments[0].scrollIntoView(true);", webElement);
|
|
157
|
+
}
|
|
158
|
+
const actions = driver.actions({ async: true });
|
|
159
|
+
await actions.move({ origin: webElement }).contextClick().perform();
|
|
160
|
+
};
|
|
153
161
|
|
|
154
162
|
// src/utils/locators.ts
|
|
155
163
|
import { By as By2 } from "selenium-webdriver";
|
|
@@ -548,37 +556,44 @@ var BaseDateEditor = class extends AbstractDXEditorWithInput {
|
|
|
548
556
|
super(parentCssSelector, elementCssSelector, driver);
|
|
549
557
|
this.setClearStrategy(new InputClearStrategy());
|
|
550
558
|
}
|
|
551
|
-
async
|
|
559
|
+
async setArrayValue(value) {
|
|
552
560
|
const actions = this.driver.actions({ async: true });
|
|
553
561
|
const dateField = await this.driver.findElement(By8.css(`${this.getFullCssSelector()}`));
|
|
562
|
+
const dateInputEl = await this.getInputElement();
|
|
554
563
|
const dateFieldDataTestID = await this.getDataTestId();
|
|
555
|
-
const
|
|
564
|
+
const formattedDates = value.map(formatDMYDate);
|
|
565
|
+
const button = await dateField.findElement(By8.css(`.${BTN_CALENDAR_POPOVER_OPEN_SELECTOR}`));
|
|
566
|
+
await click(button, this.driver);
|
|
567
|
+
const calendarPopoverElement = await this.driver.findElement(By8.css(byTestIdCssSelector(`${dateFieldDataTestID}-calendar-popover`)));
|
|
568
|
+
const dateFromInput = await calendarPopoverElement.findElement(
|
|
569
|
+
By8.css(`.${BTN_CALENDAR_POPOVER_DATE_FROM_INPUT_SELECTOR} .dx-texteditor-input`)
|
|
570
|
+
);
|
|
571
|
+
const dateToInput = await calendarPopoverElement.findElement(
|
|
572
|
+
By8.css(`.${BTN_CALENDAR_POPOVER_DATE_TO_INPUT_SELECTOR} .dx-texteditor-input`)
|
|
573
|
+
);
|
|
574
|
+
await click(dateFromInput, this.driver);
|
|
575
|
+
await dateFromInput.sendKeys(formattedDates[0]);
|
|
576
|
+
await click(dateToInput, this.driver);
|
|
577
|
+
await actions.move({ origin: dateInputEl }).sendKeys(Key3.HOME).perform();
|
|
578
|
+
await dateToInput.sendKeys(formattedDates[1]);
|
|
579
|
+
await actions.move({ origin: dateInputEl }).sendKeys(Key3.ENTER).perform();
|
|
580
|
+
const btnOk = await this.driver.findElement(By8.css(`.${BTN_SAVE_SELECTOR}`));
|
|
581
|
+
await click(btnOk, this.driver);
|
|
582
|
+
}
|
|
583
|
+
async setSingleValue(value) {
|
|
584
|
+
const actions = this.driver.actions({ async: true });
|
|
585
|
+
const formattedDate = formatDMYDate(value);
|
|
556
586
|
const dateInputEl = await this.getInputElement();
|
|
557
|
-
await dateInputEl.
|
|
587
|
+
await click(dateInputEl, this.driver);
|
|
588
|
+
await actions.move({ origin: dateInputEl }).sendKeys(Key3.HOME).perform();
|
|
589
|
+
await actions.move({ origin: dateInputEl }).sendKeys(formattedDate, Key3.ENTER).perform();
|
|
590
|
+
}
|
|
591
|
+
async setDateValue(value) {
|
|
592
|
+
await this.clear();
|
|
558
593
|
if (Array.isArray(value)) {
|
|
559
|
-
|
|
560
|
-
const button = await dateField.findElement(By8.css(`.${BTN_CALENDAR_POPOVER_OPEN_SELECTOR}`));
|
|
561
|
-
await button.click();
|
|
562
|
-
const calendarPopoverElement = await this.driver.findElement(By8.css(calendarPopoverSelector));
|
|
563
|
-
const dateFromInput = await calendarPopoverElement.findElement(
|
|
564
|
-
By8.css(`.${BTN_CALENDAR_POPOVER_DATE_FROM_INPUT_SELECTOR} .dx-texteditor-input`)
|
|
565
|
-
);
|
|
566
|
-
const dateToInput = await calendarPopoverElement.findElement(
|
|
567
|
-
By8.css(`.${BTN_CALENDAR_POPOVER_DATE_TO_INPUT_SELECTOR} .dx-texteditor-input`)
|
|
568
|
-
);
|
|
569
|
-
await dateFromInput.click();
|
|
570
|
-
await dateFromInput.sendKeys(formattedDates[0]);
|
|
571
|
-
await dateToInput.click();
|
|
572
|
-
await actions.move({ origin: dateInputEl }).sendKeys(Key3.HOME).perform();
|
|
573
|
-
await dateToInput.sendKeys(formattedDates[1]);
|
|
574
|
-
await actions.move({ origin: dateInputEl }).sendKeys(Key3.ENTER).perform();
|
|
575
|
-
const btnOk = await this.driver.findElement(By8.css(`.${BTN_SAVE_SELECTOR}`));
|
|
576
|
-
await btnOk.click();
|
|
594
|
+
await this.setArrayValue(value);
|
|
577
595
|
} else {
|
|
578
|
-
|
|
579
|
-
await click(dateInputEl, this.driver);
|
|
580
|
-
await actions.move({ origin: dateInputEl }).sendKeys(Key3.HOME).perform();
|
|
581
|
-
await actions.move({ origin: dateInputEl }).sendKeys(formattedDate, Key3.ENTER).perform();
|
|
596
|
+
await this.setSingleValue(value);
|
|
582
597
|
}
|
|
583
598
|
}
|
|
584
599
|
};
|
|
@@ -641,15 +656,14 @@ var DateRangeEditor = class extends BaseDateEditor {
|
|
|
641
656
|
// src/pageObjects/elements/Editors/Date/DateEditor.ts
|
|
642
657
|
var DateEditor = class extends AbstractDXEditorWithInput {
|
|
643
658
|
editorInstance = null;
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
async init(parentCssSelector, elementCssSelector, driver) {
|
|
650
|
-
await this.updateEditorInstance(parentCssSelector, elementCssSelector, driver);
|
|
659
|
+
async init() {
|
|
660
|
+
if (this.editorInstance) {
|
|
661
|
+
return this.editorInstance;
|
|
662
|
+
}
|
|
663
|
+
await this.setEditorInstance();
|
|
651
664
|
}
|
|
652
|
-
async
|
|
665
|
+
async setEditorInstance() {
|
|
666
|
+
const { parentCssSelector, elementCssSelector, driver } = this;
|
|
653
667
|
const elementInstance = new AbstractFormElement(parentCssSelector, elementCssSelector, driver);
|
|
654
668
|
const classString = await elementInstance.getClasses();
|
|
655
669
|
switch (true) {
|
|
@@ -663,25 +677,14 @@ var DateEditor = class extends AbstractDXEditorWithInput {
|
|
|
663
677
|
this.editorInstance = new SingleDateEditor(parentCssSelector, elementCssSelector, driver);
|
|
664
678
|
}
|
|
665
679
|
}
|
|
666
|
-
async ensureInitialized() {
|
|
667
|
-
if (!this.editorInstance) {
|
|
668
|
-
await this.initPromise;
|
|
669
|
-
}
|
|
670
|
-
}
|
|
671
680
|
async setValue(value) {
|
|
672
|
-
await this.
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
return await this.updateEditorInstance(this.parentCssSelector, this.elementCssSelector, this.driver);
|
|
676
|
-
}
|
|
677
|
-
throw new Error("Editor instance is not initialized.");
|
|
681
|
+
await this.init();
|
|
682
|
+
await this.editorInstance.setValue(value);
|
|
683
|
+
await this.setEditorInstance();
|
|
678
684
|
}
|
|
679
685
|
async getValue() {
|
|
680
|
-
await this.
|
|
681
|
-
|
|
682
|
-
return this.editorInstance.getValue();
|
|
683
|
-
}
|
|
684
|
-
throw new Error("Editor instance is not initialized.");
|
|
686
|
+
await this.init();
|
|
687
|
+
return this.editorInstance.getValue();
|
|
685
688
|
}
|
|
686
689
|
};
|
|
687
690
|
|
|
@@ -841,17 +844,19 @@ function createEditorButtonTestId(itemName) {
|
|
|
841
844
|
|
|
842
845
|
// src/utils/waitElementIsClickable.ts
|
|
843
846
|
async function waitElementIsClickable({
|
|
844
|
-
element,
|
|
845
847
|
timeout,
|
|
846
848
|
errorMessage,
|
|
847
|
-
driver
|
|
849
|
+
driver,
|
|
850
|
+
...rest
|
|
848
851
|
}) {
|
|
849
852
|
driver = driver ?? config().driver;
|
|
850
853
|
await wait(async () => {
|
|
851
|
-
const
|
|
852
|
-
|
|
854
|
+
const searchedElement = "by" in rest ? await fixElementStaleError(rest.by, driver) : rest.element;
|
|
855
|
+
const isDisabled = await searchedElement.getCssValue("pointer-events") === "none";
|
|
856
|
+
return await searchedElement.isDisplayed() && !isDisabled;
|
|
853
857
|
}, driver, errorMessage, timeout ?? config().timeout);
|
|
854
858
|
}
|
|
859
|
+
var waitElementIsClickable_default = waitElementIsClickable;
|
|
855
860
|
|
|
856
861
|
// src/pageObjects/elements/EditorButton.ts
|
|
857
862
|
var EditorButton = class extends AbstractElementWithParent {
|
|
@@ -865,7 +870,7 @@ var EditorButton = class extends AbstractElementWithParent {
|
|
|
865
870
|
}
|
|
866
871
|
async click() {
|
|
867
872
|
const button = await this.getElement();
|
|
868
|
-
await
|
|
873
|
+
await waitElementIsClickable_default({
|
|
869
874
|
element: button,
|
|
870
875
|
errorMessage: this.buttonNotDisplayedError(),
|
|
871
876
|
driver: this.driver
|
|
@@ -969,14 +974,14 @@ var FormField = class extends AbstractEditor {
|
|
|
969
974
|
// src/pageObjects/elements/Forms/Form.ts
|
|
970
975
|
import { By as By15 } from "selenium-webdriver";
|
|
971
976
|
|
|
972
|
-
// src/pageObjects/elements/
|
|
977
|
+
// src/pageObjects/elements/AbstractButton.ts
|
|
973
978
|
var AbstractButton = class extends AbstractElementWithParent {
|
|
974
979
|
constructor(parentCssSelector, elementCssSelector, driver) {
|
|
975
980
|
super(parentCssSelector, elementCssSelector, driver);
|
|
976
981
|
}
|
|
977
982
|
async click() {
|
|
978
983
|
const button = await this.getElement();
|
|
979
|
-
await
|
|
984
|
+
await waitElementIsClickable_default({
|
|
980
985
|
element: button,
|
|
981
986
|
errorMessage: this.buttonNotDisplayedError(),
|
|
982
987
|
driver: this.driver
|
|
@@ -1259,15 +1264,15 @@ async function classDependencyInjector(formType) {
|
|
|
1259
1264
|
let SubFormFactoryClass;
|
|
1260
1265
|
switch (formType) {
|
|
1261
1266
|
case "1" /* LIST */:
|
|
1262
|
-
SubFormFactoryClass = (await import("./ListForm-
|
|
1267
|
+
SubFormFactoryClass = (await import("./ListForm-MS7U6ME7.mjs")).default;
|
|
1263
1268
|
break;
|
|
1264
1269
|
case "3" /* TREE */:
|
|
1265
|
-
SubFormFactoryClass = (await import("./TreeView-
|
|
1270
|
+
SubFormFactoryClass = (await import("./TreeView-DGKYMM67.mjs")).default;
|
|
1266
1271
|
break;
|
|
1267
1272
|
case "2" /* EDIT */:
|
|
1268
1273
|
case "99" /* FREE_FORM */:
|
|
1269
1274
|
case "4" /* REPORT */:
|
|
1270
|
-
SubFormFactoryClass = (await import("./FormEdit-
|
|
1275
|
+
SubFormFactoryClass = (await import("./FormEdit-6DS2QEWW.mjs")).default;
|
|
1271
1276
|
break;
|
|
1272
1277
|
default:
|
|
1273
1278
|
throw new Error(`Unsupported form type ${formType}`);
|
|
@@ -1349,6 +1354,7 @@ export {
|
|
|
1349
1354
|
wait,
|
|
1350
1355
|
waitElementIsVisible,
|
|
1351
1356
|
click,
|
|
1357
|
+
contextMenu,
|
|
1352
1358
|
byTestIdCssSelector,
|
|
1353
1359
|
byTestId,
|
|
1354
1360
|
readonlyLocator,
|
|
@@ -1363,7 +1369,7 @@ export {
|
|
|
1363
1369
|
createLayoutFilterTestId,
|
|
1364
1370
|
createTableId,
|
|
1365
1371
|
createSubSystemTestId,
|
|
1366
|
-
|
|
1372
|
+
waitElementIsClickable_default,
|
|
1367
1373
|
AbstractButton,
|
|
1368
1374
|
AbstractEditor,
|
|
1369
1375
|
FormField,
|