mirror of https://github.com/nocodb/nocodb
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
119 lines
3.5 KiB
119 lines
3.5 KiB
2 years ago
|
// playwright-dev-page.ts
|
||
|
import { Page, expect, Locator } from "@playwright/test";
|
||
|
import BasePage from "../../Base";
|
||
|
|
||
|
export class SurveyFormPage extends BasePage {
|
||
|
readonly formHeading: Locator;
|
||
|
readonly formSubHeading: Locator;
|
||
|
readonly submitButton: Locator;
|
||
|
readonly nextButton: Locator;
|
||
|
readonly nextSlideButton: Locator;
|
||
|
readonly prevSlideButton: Locator;
|
||
|
readonly darkModeButton: Locator;
|
||
|
readonly formFooter: Locator;
|
||
|
|
||
|
constructor(rootPage: Page) {
|
||
|
super(rootPage);
|
||
|
this.formHeading = this.get().locator(
|
||
|
'[data-pw="nc-survey-form__heading"]'
|
||
|
);
|
||
|
this.formSubHeading = this.get().locator(
|
||
|
'[data-pw="nc-survey-form__sub-heading"]'
|
||
|
);
|
||
|
this.submitButton = this.get().locator(
|
||
|
'[data-pw="nc-survey-form__btn-submit"]'
|
||
|
);
|
||
|
this.nextButton = this.get().locator(
|
||
|
'[data-pw="nc-survey-form__btn-next"]'
|
||
|
);
|
||
|
this.nextSlideButton = this.get().locator(
|
||
|
'[data-pw="nc-survey-form__icon-next"]'
|
||
|
);
|
||
|
this.prevSlideButton = this.get().locator(
|
||
|
'[data-pw="nc-survey-form__icon-prev"]'
|
||
|
);
|
||
|
this.darkModeButton = this.get().locator('[data-pw="nc-form-dark-mode"]');
|
||
|
this.formFooter = this.get().locator('[data-pw="nc-survey-form__footer"]');
|
||
|
}
|
||
|
|
||
|
get() {
|
||
|
return this.rootPage.locator("html >> .nc-form-view");
|
||
|
}
|
||
|
|
||
|
async validate({
|
||
|
heading,
|
||
|
subHeading,
|
||
|
fieldLabel,
|
||
|
footer,
|
||
|
}: {
|
||
|
heading: string;
|
||
|
subHeading: string;
|
||
|
fieldLabel: string;
|
||
|
footer: string;
|
||
|
}) {
|
||
|
await expect(this.get()).toBeVisible();
|
||
|
await expect(this.formHeading).toHaveText(heading);
|
||
|
await expect(this.formSubHeading).toHaveText(subHeading);
|
||
|
await expect(this.formFooter).toHaveText(footer);
|
||
|
await expect(
|
||
|
this.get().locator(`[data-pw="nc-form-column-label"]`)
|
||
|
).toHaveText(fieldLabel);
|
||
|
|
||
|
// parse footer text ("1 / 3") to identify if last slide
|
||
|
let isLastSlide = false;
|
||
|
const footerText = await this.formFooter.innerText();
|
||
|
const slideNumber = footerText.split(" / ")[0];
|
||
|
const totalSlides = footerText.split(" / ")[1];
|
||
|
if (slideNumber === totalSlides) {
|
||
|
isLastSlide = true;
|
||
|
}
|
||
|
if (isLastSlide) {
|
||
|
await expect(this.submitButton).toBeVisible();
|
||
|
} else {
|
||
|
await expect(this.nextButton).toBeVisible();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
async fill(param: { fieldLabel: string; type?: string; value?: string }) {
|
||
|
await this.get()
|
||
|
.locator(`[data-pw="nc-survey-form__input-${param.fieldLabel}"]`)
|
||
|
.click();
|
||
|
if (param.type === "SingleLineText") {
|
||
|
await this.get()
|
||
|
.locator(
|
||
|
`[data-pw="nc-survey-form__input-${param.fieldLabel}"] >> input`
|
||
|
)
|
||
|
.fill(param.value);
|
||
|
// press enter key
|
||
|
await this.get()
|
||
|
.locator(
|
||
|
`[data-pw="nc-survey-form__input-${param.fieldLabel}"] >> input`
|
||
|
)
|
||
|
.press("Enter");
|
||
|
} else if (param.type === "DateTime") {
|
||
|
const modal = await this.rootPage.locator(".nc-picker-datetime");
|
||
|
await expect(modal).toBeVisible();
|
||
|
await modal.locator(".ant-picker-now-btn").click();
|
||
|
await modal.locator(".ant-picker-ok").click();
|
||
|
await this.nextButton.click();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
async validateSuccessMessage(param: {
|
||
|
message: string;
|
||
|
showAnotherForm?: boolean;
|
||
|
}) {
|
||
|
await expect(
|
||
|
this.get().locator(
|
||
|
`[data-pw="nc-survey-form__success-msg"]:has-text("${param.message}")`
|
||
|
)
|
||
|
).toBeVisible();
|
||
|
|
||
|
if (param.showAnotherForm) {
|
||
|
await expect(
|
||
|
this.get().locator(`button:has-text("Submit Another Form")`)
|
||
|
).toBeVisible();
|
||
|
}
|
||
|
}
|
||
|
}
|