refactor: organize E2E tests with page objects

This commit is contained in:
2026-10-07 21:13:40 +09:00
parent 1e03e8f4ff
commit 48ef396ec1
28 changed files with 1494 additions and 834 deletions
+67
View File
@@ -0,0 +1,67 @@
import type { Locator, Page } from "@playwright/test";
export class HomePage {
readonly page: Page;
readonly input: Locator;
readonly previewAction: Locator;
readonly applyAction: Locator;
readonly morningRoutine: Locator;
readonly finishRoutine: Locator;
readonly recordWeight: Locator;
readonly weight: Locator;
readonly saveMeasurement: Locator;
readonly todayPlan: Locator;
readonly dailyBrief: Locator;
readonly flowTitles: Locator;
constructor(page: Page) {
this.page = page;
this.input = page.getByRole("textbox", { name: "Home input" });
this.previewAction = page.getByRole("button", { name: "Preview action" });
this.applyAction = page.getByRole("button", { name: "Apply", exact: true });
this.morningRoutine = page.getByRole("button", { name: /Morning routine 0 of 3/ });
this.finishRoutine = page.getByRole("button", { name: "Finish routine" });
this.recordWeight = page.getByRole("button", { name: /Record weight A quick check-in/ });
this.weight = page.getByRole("spinbutton", { name: "Weight", exact: true });
this.saveMeasurement = page.getByRole("button", { name: "Save measurement" });
this.todayPlan = page.getByRole("region", { name: "Today’s plan" });
this.dailyBrief = page.getByRole("region", { name: "Daily brief" });
this.flowTitles = page.getByTestId("execution-flow-title");
}
recordedWeight(weight: string) {
return this.page.getByRole("button", { name: `Record weight Recorded · ${weight} kg` });
}
greeting(name: string) {
return this.page.getByRole("heading", { name: `Good morning, ${name}` });
}
async goTo(search = "") {
await this.page.goto(`/${search}`);
}
routineStep(name: string | RegExp) {
return this.page.getByRole("checkbox", { name });
}
completeTask(name: string) {
return this.page.getByRole("button", { name: `Complete ${name}`, exact: true });
}
restoreTask(name: string) {
return this.page.getByRole("button", { name: `Restore ${name}`, exact: true });
}
completedTask(name: string) {
return this.page.getByRole("button", { name: `${name} Completed`, exact: true });
}
conversation(name: string) {
return this.page.getByRole("link", { name: `Open conversation with ${name}` });
}
async openBriefConversation(name: string) {
await this.dailyBrief.getByRole("button", { name: `Reply to ${name}` }).click();
}
async previewCommand(command: string) {
await this.input.fill(command);
await this.previewAction.click();
}
async recordMeasurement(weight: string) {
await this.recordWeight.click();
await this.weight.fill(weight);
await this.saveMeasurement.click();
}
}