refactor: organize E2E tests with page objects
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user