@uxf/e2e-playwright 11.120.0 → 11.122.0
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/package.json +3 -3
- package/ui/button.d.ts +1 -0
- package/ui/button.e2e.js +6 -0
- package/ui/button.js +3 -2
- package/ui/combobox.d.ts +2 -0
- package/ui/combobox.e2e.js +6 -0
- package/ui/combobox.js +8 -5
- package/ui/flash-messages.d.ts +2 -0
- package/ui/flash-messages.e2e.js +6 -0
- package/ui/flash-messages.js +7 -1
- package/ui/multi-select.d.ts +2 -0
- package/ui/multi-select.e2e.js +6 -0
- package/ui/multi-select.js +9 -3
- package/ui/radio-group.d.ts +2 -0
- package/ui/radio-group.e2e.js +6 -0
- package/ui/radio-group.js +8 -2
- package/ui/select.d.ts +2 -0
- package/ui/select.e2e.js +6 -0
- package/ui/select.js +8 -5
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@uxf/e2e-playwright",
|
|
3
|
-
"version": "11.
|
|
3
|
+
"version": "11.122.0",
|
|
4
4
|
"description": "UXF Playwright helpers",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -18,13 +18,13 @@
|
|
|
18
18
|
"devDependencies": {
|
|
19
19
|
"@playwright/test": "1.57.0",
|
|
20
20
|
"@uxf/core": "11.114.0",
|
|
21
|
-
"@uxf/ui": "11.
|
|
21
|
+
"@uxf/ui": "11.122.0",
|
|
22
22
|
"dayjs": "^1.11.19"
|
|
23
23
|
},
|
|
24
24
|
"peerDependencies": {
|
|
25
25
|
"@playwright/test": "1.57.0",
|
|
26
26
|
"@uxf/core": "11.114.0",
|
|
27
|
-
"@uxf/ui": "11.
|
|
27
|
+
"@uxf/ui": "11.122.0",
|
|
28
28
|
"dayjs": "^1.11.19"
|
|
29
29
|
}
|
|
30
30
|
}
|
package/ui/button.d.ts
CHANGED
package/ui/button.e2e.js
CHANGED
|
@@ -24,3 +24,9 @@ const components_1 = require("../components");
|
|
|
24
24
|
await ui.button({ text: "Vyřešené" }).click();
|
|
25
25
|
await (0, test_1.expect)(page.getByTestId("last-clicked")).toHaveText("Vyřešené");
|
|
26
26
|
});
|
|
27
|
+
(0, test_1.test)("UI Button - partial text match", async ({ page }) => {
|
|
28
|
+
await page.goto("/examples/ui/button/OnlyForE2ETests");
|
|
29
|
+
const ui = (0, components_1.createUi)(page);
|
|
30
|
+
await ui.button({ isExactText: false, text: "Odeslat" }).click();
|
|
31
|
+
await (0, test_1.expect)(page.getByTestId("last-clicked")).toHaveText("Odeslat formulář");
|
|
32
|
+
});
|
package/ui/button.js
CHANGED
|
@@ -5,9 +5,10 @@ const base_model_1 = require("../utils/base-model");
|
|
|
5
5
|
const exact_text_1 = require("../utils/exact-text");
|
|
6
6
|
class ButtonModel extends base_model_1.BaseModel {
|
|
7
7
|
constructor(page, finder) {
|
|
8
|
-
var _a, _b;
|
|
8
|
+
var _a, _b, _c;
|
|
9
9
|
const root = (_a = finder.parent) !== null && _a !== void 0 ? _a : page;
|
|
10
|
-
const
|
|
10
|
+
const textFilter = ((_b = finder.isExactText) !== null && _b !== void 0 ? _b : true) ? (0, exact_text_1.exactText)(finder.text) : finder.text;
|
|
11
|
+
const locator = root.locator("a.uxf-button", { hasText: textFilter }).nth((_c = finder.nth) !== null && _c !== void 0 ? _c : 0);
|
|
11
12
|
super(page, locator);
|
|
12
13
|
this.finder = finder;
|
|
13
14
|
}
|
package/ui/combobox.d.ts
CHANGED
|
@@ -5,6 +5,8 @@ export type ComboboxFinder = FormComponentFinder;
|
|
|
5
5
|
export declare class ComboboxModel extends FormComponentModel<string> {
|
|
6
6
|
private readonly inputLocator;
|
|
7
7
|
constructor(page: Page, finder: FormComponentFinder);
|
|
8
|
+
private performChange;
|
|
8
9
|
change(value: string): Promise<void>;
|
|
10
|
+
changeContainingText(value: string): Promise<void>;
|
|
9
11
|
}
|
|
10
12
|
export declare const combobox: (page: Page) => (finder: ComboboxFinder) => ComboboxModel;
|
package/ui/combobox.e2e.js
CHANGED
|
@@ -22,3 +22,9 @@ const components_1 = require("../components");
|
|
|
22
22
|
await ui.combobox({ $name: "stav" }).change("Vyřešené");
|
|
23
23
|
await (0, test_1.expect)(page.getByTestId("selected-stav")).toHaveText("vyresene");
|
|
24
24
|
});
|
|
25
|
+
(0, test_1.test)("Combobox - partial option match", async ({ page }) => {
|
|
26
|
+
const ui = (0, components_1.createUi)(page);
|
|
27
|
+
await page.goto("/examples/ui/combobox/OnlyForE2ETests");
|
|
28
|
+
await ui.combobox({ $name: "stav-partial" }).changeContainingText("Otevřené");
|
|
29
|
+
await (0, test_1.expect)(page.getByTestId("selected-stav-partial")).toHaveText("otevrene");
|
|
30
|
+
});
|
package/ui/combobox.js
CHANGED
|
@@ -9,16 +9,19 @@ class ComboboxModel extends form_component_model_1.FormComponentModel {
|
|
|
9
9
|
super(combobox_1.COMBOBOX_COMPONENT_NAME, page, finder);
|
|
10
10
|
this.inputLocator = this.locator.locator(".uxf-input__element");
|
|
11
11
|
}
|
|
12
|
-
async
|
|
12
|
+
async performChange(value, textFilter) {
|
|
13
13
|
await this.inputLocator.fill(value);
|
|
14
|
-
const item = this.page
|
|
15
|
-
.locator("li.uxf-dropdown__item")
|
|
16
|
-
.filter({ hasText: (0, exact_text_1.exactText)(value) })
|
|
17
|
-
.first();
|
|
14
|
+
const item = this.page.locator("li.uxf-dropdown__item").filter({ hasText: textFilter }).first();
|
|
18
15
|
await item.waitFor({ state: "visible" });
|
|
19
16
|
await item.click();
|
|
20
17
|
await item.waitFor({ state: "hidden" });
|
|
21
18
|
}
|
|
19
|
+
async change(value) {
|
|
20
|
+
await this.performChange(value, (0, exact_text_1.exactText)(value));
|
|
21
|
+
}
|
|
22
|
+
async changeContainingText(value) {
|
|
23
|
+
await this.performChange(value, value);
|
|
24
|
+
}
|
|
22
25
|
}
|
|
23
26
|
exports.ComboboxModel = ComboboxModel;
|
|
24
27
|
const combobox = (page) => (finder) => new ComboboxModel(page, finder);
|
package/ui/flash-messages.d.ts
CHANGED
|
@@ -2,6 +2,8 @@ import { Page } from "@playwright/test";
|
|
|
2
2
|
import { BaseModel } from "../utils/base-model";
|
|
3
3
|
export declare class FlashMessagesModel extends BaseModel {
|
|
4
4
|
constructor(page: Page);
|
|
5
|
+
private flashMessageLocator;
|
|
5
6
|
shouldExistMessage(text: string): Promise<void>;
|
|
7
|
+
shouldExistMessageContainingText(text: string): Promise<void>;
|
|
6
8
|
}
|
|
7
9
|
export declare const flashMessages: (page: Page) => () => FlashMessagesModel;
|
package/ui/flash-messages.e2e.js
CHANGED
|
@@ -17,3 +17,9 @@ const components_1 = require("../components");
|
|
|
17
17
|
await ui.button({ text: "Zobrazit Nevyřešené" }).click();
|
|
18
18
|
await ui.flashMessages().shouldExistMessage("Vyřešené");
|
|
19
19
|
});
|
|
20
|
+
(0, test_1.test)("FlashMessages - partial message match", async ({ page }) => {
|
|
21
|
+
await page.goto("/examples/ui/flash-messages/OnlyForE2ETests");
|
|
22
|
+
const ui = (0, components_1.createUi)(page);
|
|
23
|
+
await ui.button({ text: "Zobrazit Vyřešené (partial)" }).click();
|
|
24
|
+
await ui.flashMessages().shouldExistMessageContainingText("Vyřešené");
|
|
25
|
+
});
|
package/ui/flash-messages.js
CHANGED
|
@@ -9,8 +9,14 @@ class FlashMessagesModel extends base_model_1.BaseModel {
|
|
|
9
9
|
constructor(page) {
|
|
10
10
|
super(page, page.locator(`[data-component=${flash_messages_1.FLASH_MESSAGES_COMPONENT_NAME}]`));
|
|
11
11
|
}
|
|
12
|
+
flashMessageLocator(textFilter) {
|
|
13
|
+
return this.locator.locator(".uxf-flash-message").filter({ hasText: textFilter });
|
|
14
|
+
}
|
|
12
15
|
async shouldExistMessage(text) {
|
|
13
|
-
await (0, test_1.expect)(this.
|
|
16
|
+
await (0, test_1.expect)(this.flashMessageLocator((0, exact_text_1.exactText)(text))).toHaveCount(1);
|
|
17
|
+
}
|
|
18
|
+
async shouldExistMessageContainingText(text) {
|
|
19
|
+
await (0, test_1.expect)(this.flashMessageLocator(text)).toHaveCount(1);
|
|
14
20
|
}
|
|
15
21
|
}
|
|
16
22
|
exports.FlashMessagesModel = FlashMessagesModel;
|
package/ui/multi-select.d.ts
CHANGED
|
@@ -5,6 +5,8 @@ export type MultiSelectFinder = FormComponentFinder;
|
|
|
5
5
|
export declare class MultiSelectModel extends FormComponentModel<string[]> {
|
|
6
6
|
private readonly buttonLocator;
|
|
7
7
|
constructor(page: Page, finder: FormComponentFinder);
|
|
8
|
+
private performChange;
|
|
8
9
|
change(optionTexts: string[]): Promise<void>;
|
|
10
|
+
changeContainingText(optionTexts: string[]): Promise<void>;
|
|
9
11
|
}
|
|
10
12
|
export declare const multiSelect: (page: Page) => (finder: MultiSelectFinder) => MultiSelectModel;
|
package/ui/multi-select.e2e.js
CHANGED
|
@@ -13,3 +13,9 @@ const components_1 = require("../components");
|
|
|
13
13
|
await ui.multiSelect({ $name: "stav" }).change(["Vyřešené"]);
|
|
14
14
|
await (0, test_1.expect)(page.getByTestId("selected-value")).toHaveText("vyresene");
|
|
15
15
|
});
|
|
16
|
+
(0, test_1.test)("MultiSelect - partial option match", async ({ page }) => {
|
|
17
|
+
const ui = (0, components_1.createUi)(page);
|
|
18
|
+
await page.goto("/examples/ui/multi-select/OnlyForE2ETests");
|
|
19
|
+
await ui.multiSelect({ $name: "stav-partial" }).changeContainingText(["Otevřené"]);
|
|
20
|
+
await (0, test_1.expect)(page.getByTestId("selected-partial-value")).toHaveText("otevrene");
|
|
21
|
+
});
|
package/ui/multi-select.js
CHANGED
|
@@ -9,18 +9,24 @@ class MultiSelectModel extends form_component_model_1.FormComponentModel {
|
|
|
9
9
|
super(multi_select_1.MULTI_SELECT_COMPONENT_NAME, page, finder);
|
|
10
10
|
this.buttonLocator = this.locator.locator(".uxf-multi-select__button");
|
|
11
11
|
}
|
|
12
|
-
|
|
13
|
-
async change(optionTexts) {
|
|
12
|
+
async performChange(optionTexts, textFilter) {
|
|
14
13
|
await this.buttonLocator.click();
|
|
15
14
|
for (const optionText of optionTexts) {
|
|
16
15
|
// eslint-disable-next-line no-await-in-loop
|
|
17
16
|
await this.page
|
|
18
17
|
.locator(".uxf-dropdown__item")
|
|
19
|
-
.filter({ hasText: (
|
|
18
|
+
.filter({ hasText: textFilter(optionText) })
|
|
20
19
|
.click();
|
|
21
20
|
}
|
|
22
21
|
await this.buttonLocator.click();
|
|
23
22
|
}
|
|
23
|
+
// TODO implementovat odebrání předchozích hodnot (ideálně nějak kliknout na clear tlačítko)
|
|
24
|
+
async change(optionTexts) {
|
|
25
|
+
await this.performChange(optionTexts, exact_text_1.exactText);
|
|
26
|
+
}
|
|
27
|
+
async changeContainingText(optionTexts) {
|
|
28
|
+
await this.performChange(optionTexts, (text) => text);
|
|
29
|
+
}
|
|
24
30
|
}
|
|
25
31
|
exports.MultiSelectModel = MultiSelectModel;
|
|
26
32
|
const multiSelect = (page) => (finder) => new MultiSelectModel(page, finder);
|
package/ui/radio-group.d.ts
CHANGED
|
@@ -4,6 +4,8 @@ import { FormComponentModel } from "../utils/form-component-model";
|
|
|
4
4
|
export type RadioGroupFinder = FormComponentFinder;
|
|
5
5
|
export declare class RadioGroupModel extends FormComponentModel<string> {
|
|
6
6
|
constructor(page: Page, finder: FormComponentFinder);
|
|
7
|
+
private performChange;
|
|
7
8
|
change(value: string): Promise<void>;
|
|
9
|
+
changeContainingText(value: string): Promise<void>;
|
|
8
10
|
}
|
|
9
11
|
export declare const radioGroup: (page: Page) => (finder: RadioGroupFinder) => RadioGroupModel;
|
package/ui/radio-group.e2e.js
CHANGED
|
@@ -14,3 +14,9 @@ const components_1 = require("../components");
|
|
|
14
14
|
await ui.radioGroup({ $name: "stav" }).change("Vyřešené");
|
|
15
15
|
await (0, test_1.expect)(page.getByTestId("selected-value")).toHaveText("vyresene");
|
|
16
16
|
});
|
|
17
|
+
(0, test_1.test)("RadioGroup - partial option match", async ({ page }) => {
|
|
18
|
+
const ui = (0, components_1.createUi)(page);
|
|
19
|
+
await page.goto("/examples/ui/radio-group/OnlyForE2ETests");
|
|
20
|
+
await ui.radioGroup({ $name: "stav-partial" }).changeContainingText("Otevřené");
|
|
21
|
+
await (0, test_1.expect)(page.getByTestId("selected-partial-value")).toHaveText("otevrene");
|
|
22
|
+
});
|
package/ui/radio-group.js
CHANGED
|
@@ -8,10 +8,16 @@ class RadioGroupModel extends form_component_model_1.FormComponentModel {
|
|
|
8
8
|
constructor(page, finder) {
|
|
9
9
|
super(radio_group_1.RADIO_GROUP_COMPONENT_NAME, page, finder);
|
|
10
10
|
}
|
|
11
|
-
async
|
|
12
|
-
const option = this.locator.locator(".uxf-radio-group__option").filter({ hasText:
|
|
11
|
+
async performChange(textFilter) {
|
|
12
|
+
const option = this.locator.locator(".uxf-radio-group__option").filter({ hasText: textFilter });
|
|
13
13
|
await option.click();
|
|
14
14
|
}
|
|
15
|
+
async change(value) {
|
|
16
|
+
await this.performChange((0, exact_text_1.exactText)(value));
|
|
17
|
+
}
|
|
18
|
+
async changeContainingText(value) {
|
|
19
|
+
await this.performChange(value);
|
|
20
|
+
}
|
|
15
21
|
}
|
|
16
22
|
exports.RadioGroupModel = RadioGroupModel;
|
|
17
23
|
const radioGroup = (page) => (finder) => new RadioGroupModel(page, finder);
|
package/ui/select.d.ts
CHANGED
|
@@ -5,6 +5,8 @@ export type SelectFinder = FormComponentFinder;
|
|
|
5
5
|
export declare class SelectModel extends FormComponentModel<string> {
|
|
6
6
|
private readonly buttonLocator;
|
|
7
7
|
constructor(page: Page, finder: FormComponentFinder);
|
|
8
|
+
private performChange;
|
|
8
9
|
change(optionText: string): Promise<void>;
|
|
10
|
+
changeContainingText(optionText: string): Promise<void>;
|
|
9
11
|
}
|
|
10
12
|
export declare const select: (page: Page) => (finder: SelectFinder) => SelectModel;
|
package/ui/select.e2e.js
CHANGED
|
@@ -14,3 +14,9 @@ const components_1 = require("../components");
|
|
|
14
14
|
await ui.select({ $name: "stav" }).change("Vyřešené");
|
|
15
15
|
await (0, test_1.expect)(page.getByTestId("selected-value")).toHaveText("vyresene");
|
|
16
16
|
});
|
|
17
|
+
(0, test_1.test)("Select - partial option match", async ({ page }) => {
|
|
18
|
+
const ui = (0, components_1.createUi)(page);
|
|
19
|
+
await page.goto("/examples/ui/select/OnlyForE2ETests");
|
|
20
|
+
await ui.select({ $name: "stav-partial" }).changeContainingText("Otevřené");
|
|
21
|
+
await (0, test_1.expect)(page.getByTestId("selected-partial-value")).toHaveText("otevrene");
|
|
22
|
+
});
|
package/ui/select.js
CHANGED
|
@@ -9,12 +9,15 @@ class SelectModel extends form_component_model_1.FormComponentModel {
|
|
|
9
9
|
super(select_1.SELECT_COMPONENT_NAME, page, finder);
|
|
10
10
|
this.buttonLocator = this.locator.locator("div.uxf-input__element");
|
|
11
11
|
}
|
|
12
|
-
async
|
|
12
|
+
async performChange(textFilter) {
|
|
13
13
|
await this.buttonLocator.click();
|
|
14
|
-
await this.page
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
await this.page.locator(".uxf-dropdown__item").filter({ hasText: textFilter }).click();
|
|
15
|
+
}
|
|
16
|
+
async change(optionText) {
|
|
17
|
+
await this.performChange((0, exact_text_1.exactText)(optionText));
|
|
18
|
+
}
|
|
19
|
+
async changeContainingText(optionText) {
|
|
20
|
+
await this.performChange(optionText);
|
|
18
21
|
}
|
|
19
22
|
}
|
|
20
23
|
exports.SelectModel = SelectModel;
|