@uxf/e2e-playwright 11.119.1 → 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/components.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { Page } from "@playwright/test";
2
2
  export declare function createUi(page: Page): {
3
3
  button: (finder: import("./ui/button").ButtonFinder) => import("./ui/button").ButtonModel;
4
+ iconButton: (finder: import("./ui/icon-button").IconButtonFinder) => import("./ui/icon-button").IconButtonModel;
4
5
  checkboxInput: (finder: import("./ui/checkbox-input").CheckboxInputFinder) => import("./ui/checkbox-input").CheckboxInputModel;
5
6
  combobox: (finder: import("./ui/combobox").ComboboxFinder) => import("./ui/combobox").ComboboxModel;
6
7
  dataGridTable: (finder: import("./data-grid/table").DataGridTableFinder) => import("./data-grid/table").DataGridTableModel;
package/components.js CHANGED
@@ -10,6 +10,7 @@ const datetime_picker_input_1 = require("./ui/datetime-picker-input");
10
10
  const dropzone_1 = require("./ui/dropzone");
11
11
  const flash_messages_1 = require("./ui/flash-messages");
12
12
  const h1_1 = require("./ui/h1");
13
+ const icon_button_1 = require("./ui/icon-button");
13
14
  const multi_combobox_1 = require("./ui/multi-combobox");
14
15
  const multi_select_1 = require("./ui/multi-select");
15
16
  const radio_group_1 = require("./ui/radio-group");
@@ -21,6 +22,7 @@ const toggle_1 = require("./ui/toggle");
21
22
  function createUi(page) {
22
23
  return {
23
24
  button: (0, button_1.button)(page),
25
+ iconButton: (0, icon_button_1.iconButton)(page),
24
26
  checkboxInput: (0, checkbox_input_1.checkboxInput)(page),
25
27
  combobox: (0, combobox_1.combobox)(page),
26
28
  dataGridTable: (0, table_1.dataGridTable)(page),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uxf/e2e-playwright",
3
- "version": "11.119.1",
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.119.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.119.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
@@ -18,3 +18,15 @@ const components_1 = require("../components");
18
18
  await ui.button({ parent: cardA, text: "Confirm" }).click();
19
19
  await ui.button({ parent: cardB, text: "Confirm" }).click();
20
20
  });
21
+ (0, test_1.test)("UI Button - icon with text (exact match)", async ({ page }) => {
22
+ await page.goto("/examples/ui/button/OnlyForE2ETests");
23
+ const ui = (0, components_1.createUi)(page);
24
+ await ui.button({ text: "Vyřešené" }).click();
25
+ await (0, test_1.expect)(page.getByTestId("last-clicked")).toHaveText("Vyřešené");
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
@@ -2,11 +2,13 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.button = exports.ButtonModel = void 0;
4
4
  const base_model_1 = require("../utils/base-model");
5
+ const exact_text_1 = require("../utils/exact-text");
5
6
  class ButtonModel extends base_model_1.BaseModel {
6
7
  constructor(page, finder) {
7
- var _a, _b;
8
+ var _a, _b, _c;
8
9
  const root = (_a = finder.parent) !== null && _a !== void 0 ? _a : page;
9
- const locator = root.locator("a.uxf-button", { hasText: 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);
10
12
  super(page, locator);
11
13
  this.finder = finder;
12
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;
@@ -16,3 +16,15 @@ const components_1 = require("../components");
16
16
  await ui.combobox({ $name: "color" }).change("Blue");
17
17
  await ui.combobox({ $name: "size" }).change("Medium");
18
18
  });
19
+ (0, test_1.test)("Combobox - exact option match", async ({ page }) => {
20
+ const ui = (0, components_1.createUi)(page);
21
+ await page.goto("/examples/ui/combobox/OnlyForE2ETests");
22
+ await ui.combobox({ $name: "stav" }).change("Vyřešené");
23
+ await (0, test_1.expect)(page.getByTestId("selected-stav")).toHaveText("vyresene");
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
@@ -2,19 +2,26 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.combobox = exports.ComboboxModel = void 0;
4
4
  const combobox_1 = require("@uxf/ui/combobox/combobox");
5
+ const exact_text_1 = require("../utils/exact-text");
5
6
  const form_component_model_1 = require("../utils/form-component-model");
6
7
  class ComboboxModel extends form_component_model_1.FormComponentModel {
7
8
  constructor(page, finder) {
8
9
  super(combobox_1.COMBOBOX_COMPONENT_NAME, page, finder);
9
10
  this.inputLocator = this.locator.locator(".uxf-input__element");
10
11
  }
11
- async change(value) {
12
+ async performChange(value, textFilter) {
12
13
  await this.inputLocator.fill(value);
13
- const item = this.page.locator("li.uxf-dropdown__item").filter({ hasText: value }).first();
14
+ const item = this.page.locator("li.uxf-dropdown__item").filter({ hasText: textFilter }).first();
14
15
  await item.waitFor({ state: "visible" });
15
16
  await item.click();
16
17
  await item.waitFor({ state: "hidden" });
17
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
+ }
18
25
  }
19
26
  exports.ComboboxModel = ComboboxModel;
20
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;
@@ -10,3 +10,16 @@ const components_1 = require("../components");
10
10
  await ui.button({ text: "Error" }).click();
11
11
  await ui.flashMessages().shouldExistMessage("Error message");
12
12
  });
13
+ (0, test_1.test)("FlashMessages - exact message match", async ({ page }) => {
14
+ await page.goto("/examples/ui/flash-messages/OnlyForE2ETests");
15
+ const ui = (0, components_1.createUi)(page);
16
+ await ui.button({ text: "Zobrazit Vyřešené" }).click();
17
+ await ui.button({ text: "Zobrazit Nevyřešené" }).click();
18
+ await ui.flashMessages().shouldExistMessage("Vyřešené");
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
+ });
@@ -4,12 +4,19 @@ exports.flashMessages = exports.FlashMessagesModel = void 0;
4
4
  const test_1 = require("@playwright/test");
5
5
  const flash_messages_1 = require("@uxf/ui/flash-messages/flash-messages");
6
6
  const base_model_1 = require("../utils/base-model");
7
+ const exact_text_1 = require("../utils/exact-text");
7
8
  class FlashMessagesModel extends base_model_1.BaseModel {
8
9
  constructor(page) {
9
10
  super(page, page.locator(`[data-component=${flash_messages_1.FLASH_MESSAGES_COMPONENT_NAME}]`));
10
11
  }
12
+ flashMessageLocator(textFilter) {
13
+ return this.locator.locator(".uxf-flash-message").filter({ hasText: textFilter });
14
+ }
11
15
  async shouldExistMessage(text) {
12
- await (0, test_1.expect)(this.locator.locator(".uxf-flash-message").filter({ hasText: 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);
13
20
  }
14
21
  }
15
22
  exports.FlashMessagesModel = FlashMessagesModel;
package/ui/h1.e2e.js CHANGED
@@ -8,3 +8,10 @@ const components_1 = require("../components");
8
8
  await ui.h1().shouldHaveText("UXF Frontend monorepo");
9
9
  await ui.h1().shouldHaveText("uxf Frontend monorepo");
10
10
  });
11
+ (0, test_1.test)("H1 - space and nbsp match interchangeably", async ({ page }) => {
12
+ await page.goto("/examples/ui/typography/OnlyForE2ETests");
13
+ const ui = (0, components_1.createUi)(page);
14
+ await ui.h1().shouldHaveText("Text bez pevné mezery");
15
+ await ui.h1().shouldHaveText("Text s pevnou mezerou");
16
+ await ui.h1().shouldHaveText("Text s\u00a0pevnou mezerou");
17
+ });
package/ui/h1.js CHANGED
@@ -3,12 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.h1 = exports.H1Model = void 0;
4
4
  const test_1 = require("@playwright/test");
5
5
  const base_model_1 = require("../utils/base-model");
6
+ const exact_text_1 = require("../utils/exact-text");
6
7
  class H1Model extends base_model_1.BaseModel {
7
8
  constructor(page) {
8
9
  super(page, page.locator("h1"));
9
10
  }
10
11
  shouldHaveText(text) {
11
- return (0, test_1.expect)(this.locator.filter({ hasText: new RegExp(`^${text}$`, "i") })).toHaveCount(1);
12
+ return (0, test_1.expect)(this.locator.filter({ hasText: (0, exact_text_1.exactText)(text) })).toHaveCount(1);
12
13
  }
13
14
  }
14
15
  exports.H1Model = H1Model;
@@ -0,0 +1,13 @@
1
+ import { Page } from "@playwright/test";
2
+ import { BaseFinder } from "../utils/base-finder";
3
+ import { BaseModel } from "../utils/base-model";
4
+ export interface IconButtonFinder extends BaseFinder {
5
+ title: string;
6
+ nth?: number;
7
+ }
8
+ export declare class IconButtonModel extends BaseModel {
9
+ protected readonly finder: IconButtonFinder;
10
+ constructor(page: Page, finder: IconButtonFinder);
11
+ click(): Promise<void>;
12
+ }
13
+ export declare const iconButton: (page: Page) => (finder: IconButtonFinder) => IconButtonModel;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const test_1 = require("@playwright/test");
4
+ const components_1 = require("../components");
5
+ (0, test_1.test)("UI IconButton - IconButton component", async ({ page }) => {
6
+ await page.goto("/examples/ui/icon-button/OnlyForE2ETests");
7
+ const ui = (0, components_1.createUi)(page);
8
+ await ui.iconButton({ title: "Potvrdit" }).shouldExist();
9
+ await ui.iconButton({ title: "Potvrdit" }).click();
10
+ await (0, test_1.expect)(page.getByTestId("last-clicked")).toHaveText("Potvrdit");
11
+ });
12
+ (0, test_1.test)("UI IconButton - deprecated Button with isIconButton", async ({ page }) => {
13
+ await page.goto("/examples/ui/icon-button/OnlyForE2ETests");
14
+ const ui = (0, components_1.createUi)(page);
15
+ await ui.iconButton({ title: "Smazat" }).shouldExist();
16
+ await ui.iconButton({ title: "Smazat" }).click();
17
+ await (0, test_1.expect)(page.getByTestId("last-clicked")).toHaveText("Smazat");
18
+ });
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.iconButton = exports.IconButtonModel = void 0;
4
+ const base_model_1 = require("../utils/base-model");
5
+ class IconButtonModel extends base_model_1.BaseModel {
6
+ constructor(page, finder) {
7
+ var _a, _b;
8
+ const root = (_a = finder.parent) !== null && _a !== void 0 ? _a : page;
9
+ // uxf-icon-button = IconButton component, uxf-button--icon-button = deprecated Button with isIconButton prop
10
+ const locator = root
11
+ .locator(":is(a.uxf-icon-button, a.uxf-button--icon-button)")
12
+ .and(root.getByTitle(finder.title))
13
+ .nth((_b = finder.nth) !== null && _b !== void 0 ? _b : 0);
14
+ super(page, locator);
15
+ this.finder = finder;
16
+ }
17
+ click() {
18
+ return this.locator.click();
19
+ }
20
+ }
21
+ exports.IconButtonModel = IconButtonModel;
22
+ const iconButton = (page) => (finder) => new IconButtonModel(page, finder);
23
+ exports.iconButton = iconButton;
@@ -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;
@@ -7,3 +7,15 @@ const components_1 = require("../components");
7
7
  await page.goto("/examples/ui/multi-select/Default");
8
8
  await ui.multiSelect({ $name: "default" }).change(["Option red", "Option green"]);
9
9
  });
10
+ (0, test_1.test)("MultiSelect - exact option match", async ({ page }) => {
11
+ const ui = (0, components_1.createUi)(page);
12
+ await page.goto("/examples/ui/multi-select/OnlyForE2ETests");
13
+ await ui.multiSelect({ $name: "stav" }).change(["Vyřešené"]);
14
+ await (0, test_1.expect)(page.getByTestId("selected-value")).toHaveText("vyresene");
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
+ });
@@ -2,21 +2,31 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.multiSelect = exports.MultiSelectModel = void 0;
4
4
  const multi_select_1 = require("@uxf/ui/multi-select/multi-select");
5
+ const exact_text_1 = require("../utils/exact-text");
5
6
  const form_component_model_1 = require("../utils/form-component-model");
6
7
  class MultiSelectModel extends form_component_model_1.FormComponentModel {
7
8
  constructor(page, finder) {
8
9
  super(multi_select_1.MULTI_SELECT_COMPONENT_NAME, page, finder);
9
10
  this.buttonLocator = this.locator.locator(".uxf-multi-select__button");
10
11
  }
11
- // TODO implementovat odebrání předchozích hodnot (ideálně nějak kliknout na clear tlačítko)
12
- async change(optionTexts) {
12
+ async performChange(optionTexts, textFilter) {
13
13
  await this.buttonLocator.click();
14
14
  for (const optionText of optionTexts) {
15
15
  // eslint-disable-next-line no-await-in-loop
16
- await this.page.locator(".uxf-dropdown__item").filter({ hasText: optionText }).click();
16
+ await this.page
17
+ .locator(".uxf-dropdown__item")
18
+ .filter({ hasText: textFilter(optionText) })
19
+ .click();
17
20
  }
18
21
  await this.buttonLocator.click();
19
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
+ }
20
30
  }
21
31
  exports.MultiSelectModel = MultiSelectModel;
22
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;
@@ -6,5 +6,17 @@ const components_1 = require("../components");
6
6
  const ui = (0, components_1.createUi)(page);
7
7
  await page.goto("/examples/ui/radio-group/Default");
8
8
  await ui.radioGroup({ $name: "radio-group" }).change("Radio two");
9
- await ui.radioGroup({ $name: "radio-group" }).change("Radio three");
9
+ await ui.radioGroup({ $name: "radio-group" }).change("Radio three-sixty");
10
+ });
11
+ (0, test_1.test)("RadioGroup - exact option match", async ({ page }) => {
12
+ const ui = (0, components_1.createUi)(page);
13
+ await page.goto("/examples/ui/radio-group/OnlyForE2ETests");
14
+ await ui.radioGroup({ $name: "stav" }).change("Vyřešené");
15
+ await (0, test_1.expect)(page.getByTestId("selected-value")).toHaveText("vyresene");
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");
10
22
  });
package/ui/radio-group.js CHANGED
@@ -2,15 +2,22 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.radioGroup = exports.RadioGroupModel = void 0;
4
4
  const radio_group_1 = require("@uxf/ui/radio-group/radio-group");
5
+ const exact_text_1 = require("../utils/exact-text");
5
6
  const form_component_model_1 = require("../utils/form-component-model");
6
7
  class RadioGroupModel extends form_component_model_1.FormComponentModel {
7
8
  constructor(page, finder) {
8
9
  super(radio_group_1.RADIO_GROUP_COMPONENT_NAME, page, finder);
9
10
  }
10
- async change(value) {
11
- const option = this.locator.locator(".uxf-radio-group__option").filter({ hasText: value });
11
+ async performChange(textFilter) {
12
+ const option = this.locator.locator(".uxf-radio-group__option").filter({ hasText: textFilter });
12
13
  await option.click();
13
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
+ }
14
21
  }
15
22
  exports.RadioGroupModel = RadioGroupModel;
16
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
@@ -8,3 +8,15 @@ const components_1 = require("../components");
8
8
  await ui.select({ $name: "select" }).change("Option six");
9
9
  await ui.select({ $name: "select" }).change("Option nine");
10
10
  });
11
+ (0, test_1.test)("Select - exact option match", async ({ page }) => {
12
+ const ui = (0, components_1.createUi)(page);
13
+ await page.goto("/examples/ui/select/OnlyForE2ETests");
14
+ await ui.select({ $name: "stav" }).change("Vyřešené");
15
+ await (0, test_1.expect)(page.getByTestId("selected-value")).toHaveText("vyresene");
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
@@ -2,15 +2,22 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.select = exports.SelectModel = void 0;
4
4
  const select_1 = require("@uxf/ui/select/select");
5
+ const exact_text_1 = require("../utils/exact-text");
5
6
  const form_component_model_1 = require("../utils/form-component-model");
6
7
  class SelectModel extends form_component_model_1.FormComponentModel {
7
8
  constructor(page, finder) {
8
9
  super(select_1.SELECT_COMPONENT_NAME, page, finder);
9
10
  this.buttonLocator = this.locator.locator("div.uxf-input__element");
10
11
  }
11
- async change(optionText) {
12
+ async performChange(textFilter) {
12
13
  await this.buttonLocator.click();
13
- await this.page.locator(".uxf-dropdown__item").filter({ hasText: optionText }).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);
14
21
  }
15
22
  }
16
23
  exports.SelectModel = SelectModel;
@@ -0,0 +1 @@
1
+ export declare function exactText(text: string): RegExp;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.exactText = exactText;
4
+ function exactText(text) {
5
+ const escaped = text.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
6
+ const normalized = escaped.replace(/[ \u00a0]/g, "[ \u00a0]");
7
+ return new RegExp(`^${normalized}$`, "i");
8
+ }