46 lines
1.3 KiB
TypeScript
46 lines
1.3 KiB
TypeScript
import { Locator, Page } from "@playwright/test";
|
|
|
|
export class BaseModal {
|
|
page: Page;
|
|
container: Locator;
|
|
mobileContainer: Locator;
|
|
closeModalButton: Locator;
|
|
mobileModalSlider: Locator;
|
|
|
|
constructor(page: Page) {
|
|
this.page = page;
|
|
this.container = page.getByTestId("modal-container");
|
|
this.mobileContainer = page.getByTestId("mobile-modal-container");
|
|
this.closeModalButton = this.container.getByTestId("close-modal-button");
|
|
this.mobileModalSlider = this.mobileContainer.getByTestId(
|
|
"mobile-modal-slider"
|
|
);
|
|
}
|
|
|
|
async close() {
|
|
if (await this.container.isVisible()) {
|
|
await this.closeModalButton.click();
|
|
}
|
|
if (await this.mobileContainer.isVisible()) {
|
|
const box = await this.mobileModalSlider.boundingBox();
|
|
if (!box) {
|
|
return;
|
|
}
|
|
const pageHeight = await this.page.evaluate(() => window.innerHeight);
|
|
const startX = box.x + box.width / 2;
|
|
const startY = box.y + box.height / 2;
|
|
await this.page.mouse.move(startX, startY);
|
|
await this.page.mouse.down();
|
|
await this.page.mouse.move(startX, startY + pageHeight / 2);
|
|
await this.page.mouse.up();
|
|
}
|
|
}
|
|
|
|
async isOpen() {
|
|
return (
|
|
(await this.container.isVisible()) ||
|
|
(await this.mobileContainer.isVisible())
|
|
);
|
|
}
|
|
}
|