From 253ef633dc7aa924dd0e758e78296327a7e52731 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Thu, 16 Oct 2025 08:24:51 +0300 Subject: [PATCH] refactor(e2e): wrapper class for dropdown locator --- apps/server-e2e/src/i18n.spec.ts | 8 +++----- apps/server-e2e/src/support/app.ts | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/apps/server-e2e/src/i18n.spec.ts b/apps/server-e2e/src/i18n.spec.ts index ccfd927ca..ef4b810b0 100644 --- a/apps/server-e2e/src/i18n.spec.ts +++ b/apps/server-e2e/src/i18n.spec.ts @@ -42,20 +42,18 @@ test("User can change language from settings", async ({ page, context }) => { // Check that the default value (English) is set. await expect(app.currentNoteSplit).toContainText("First day of the week"); - const languageCombobox = app.currentNoteSplit.locator(".options-section .dropdown").first(); + const languageCombobox = app.dropdown(app.currentNoteSplit.locator(".options-section .dropdown").first()); await expect(languageCombobox).toContainText("English"); // Select Chinese and ensure the translation is set. - await languageCombobox.locator(".dropdown-toggle").click(); - await languageCombobox.locator(".dropdown-item", { hasText: "简体中文" }).click(); + await languageCombobox.selectOptionByText("简体中文"); await app.currentNoteSplit.locator("button[name=restart-app-button]").click(); await expect(app.currentNoteSplit).toContainText("一周的第一天", { timeout: 15000 }); await expect(languageCombobox).toContainText("简体中文"); // Select English again. - await languageCombobox.locator(".dropdown-toggle").click(); - await languageCombobox.locator(".dropdown-item", { hasText: "English" }).click(); + await languageCombobox.selectOptionByText("English"); await app.currentNoteSplit.locator("button[name=restart-app-button]").click(); await expect(app.currentNoteSplit).toContainText("Language", { timeout: 15000 }); await expect(languageCombobox).toContainText("English"); diff --git a/apps/server-e2e/src/support/app.ts b/apps/server-e2e/src/support/app.ts index 391d458c5..a0c3ca1ad 100644 --- a/apps/server-e2e/src/support/app.ts +++ b/apps/server-e2e/src/support/app.ts @@ -9,6 +9,10 @@ interface GotoOpts { const BASE_URL = "http://127.0.0.1:8082"; +interface DropdownLocator extends Locator { + selectOptionByText: (text: string) => Promise; +} + export default class App { readonly page: Page; readonly context: BrowserContext; @@ -157,4 +161,14 @@ export default class App { }) ).toBeOK(); } + + dropdown(_locator: Locator): DropdownLocator { + let locator = _locator as DropdownLocator; + locator.selectOptionByText = async (text: string) => { + await locator.locator(".dropdown-toggle").click(); + await locator.locator(".dropdown-item", { hasText: text }).click(); + }; + return locator; + } + }