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.
118 lines
3.5 KiB
118 lines
3.5 KiB
// 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(); |
|
} |
|
} |
|
}
|
|
|