Playwright_Java_Web_Testing/page-objects/ProductsPage.js

56 lines
1.7 KiB
JavaScript

import { expect } from "@playwright/test"
import { Navigation } from "./Navigation.js"
import { isDesktopViewPort } from "../Utils/isDesktopViewport.js"
export class ProductsPage {
constructor(page) {
this.page = page
this.addButtons = page.locator('[data-qa="product-button"]')
this.sortDropdown = page.locator('[data-qa="sort-dropdown"]')
this.productTitle = page.locator('[data-qa="product-title"]')
}
visit = async () => {
await this.page.goto("/")
}
addProductToBasket = async (productIndex) => {
const specificAddButton = this.addButtons.nth(productIndex)
await specificAddButton.waitFor()
await expect(specificAddButton).toHaveText("Add to Basket")
const navigation = new Navigation(this.page)
// only desktop viewport
let basketCountBefore
if (isDesktopViewPort(this.page)) {
basketCountBefore = await navigation.getBasketCount()
}
await specificAddButton.click()
await expect(specificAddButton).toHaveText("Remove from Basket")
// only desktop viewport
if(isDesktopViewPort(this.page)) {
const basketCountAfter = await navigation.getBasketCount()
expect(basketCountAfter).toBeGreaterThan(basketCountBefore)
}
}
sortByCheapest = async () => {
await this.sortDropdown.waitFor()
await this.productTitle.first().waitFor()
const productTitleBefore = await this.productTitle.allInnerTexts()
await this.sortDropdown.selectOption("price-asc")
const productTitleAfter = await this.productTitle.allInnerTexts()
expect(productTitleAfter).not.toEqual(productTitleBefore)
}
}