@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uxf/e2e-playwright",
3
- "version": "11.120.0",
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.120.0",
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.120.0",
27
+ "@uxf/ui": "11.122.0",
28
28
  "dayjs": "^1.11.19"
29
29
  }
30
30
  }
package/ui/button.d.ts CHANGED
@@ -4,6 +4,7 @@ import { BaseModel } from "../utils/base-model";
4
4
  export interface ButtonFinder extends BaseFinder {
5
5
  text: string;
6
6
  nth?: number;
7
+ isExactText?: boolean;
7
8
  }
8
9
  export declare class ButtonModel extends BaseModel {
9
10
  protected readonly finder: ButtonFinder;
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 locator = root.locator("a.uxf-button", { hasText: (0, exact_text_1.exactText)(finder.text) }).nth((_b = finder.nth) !== null && _b !== void 0 ? _b : 0);
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;
@@ -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 change(value) {
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);
@@ -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;
@@ -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
+ });
@@ -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.locator.locator(".uxf-flash-message").filter({ hasText: (0, exact_text_1.exactText)(text) })).toHaveCount(1);
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;
@@ -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;
@@ -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
+ });
@@ -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
- // TODO implementovat odebrání předchozích hodnot (ideálně nějak kliknout na clear tlačítko)
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: (0, exact_text_1.exactText)(optionText) })
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);
@@ -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;
@@ -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 change(value) {
12
- const option = this.locator.locator(".uxf-radio-group__option").filter({ hasText: (0, exact_text_1.exactText)(value) });
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 change(optionText) {
12
+ async performChange(textFilter) {
13
13
  await this.buttonLocator.click();
14
- await this.page
15
- .locator(".uxf-dropdown__item")
16
- .filter({ hasText: (0, exact_text_1.exactText)(optionText) })
17
- .click();
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;