47 lines
1.5 KiB
TypeScript
47 lines
1.5 KiB
TypeScript
import { expect, Locator, Page } from '@playwright/test'
|
|
|
|
export class Toast {
|
|
static async expectSuccess(page: Page, message: string) {
|
|
const toast = page.locator(`.toast-success:has-text("${message}")`)
|
|
await expect(toast).toBeVisible({ timeout: 10000 })
|
|
}
|
|
|
|
static async expectError(page: Page, message: string) {
|
|
const toast = page.locator(`.toast-error:has-text("${message}")`)
|
|
await expect(toast).toBeVisible({ timeout: 10000 })
|
|
}
|
|
}
|
|
|
|
export class ConfirmationModal {
|
|
static async confirm(page: Page, modalSelector: string, buttonText: string) {
|
|
const confirmBtn = page.locator(`${modalSelector} button:has-text("${buttonText}")`)
|
|
await confirmBtn.click()
|
|
await page.locator(modalSelector).waitFor({ state: 'hidden' })
|
|
}
|
|
|
|
static async expectText(page: Page, modalSelector: string, text: string) {
|
|
const modal = page.locator(modalSelector)
|
|
await expect(modal).toHaveText(text)
|
|
}
|
|
}
|
|
|
|
export const prettify = (s: string) => (s.charAt(0).toUpperCase() + s.slice(1)).replace(/_/g, ' ')
|
|
|
|
export class Dropdown {
|
|
static getOption(page: Page, optionText: string, { exact = true } = {}) {
|
|
if (exact) return page.locator(`.select-dropdown-open li:has(:text-is("${optionText}"))`)
|
|
else return page.locator(`.select-dropdown-open li:has-text("${optionText}")`)
|
|
}
|
|
static async selectOption(
|
|
page: Page,
|
|
selectInput: Locator,
|
|
optionText: string,
|
|
{ exact = true } = {}
|
|
) {
|
|
await selectInput.click()
|
|
await selectInput.fill(optionText)
|
|
const option = this.getOption(page, optionText, { exact })
|
|
await option.click()
|
|
}
|
|
}
|