Untitled
javascript
a month ago
4.7 kB
2
Indexable
Never
import { expect } from "@playwright/test"; import { ProductsListPage } from "../pages/products-list-page"; export class ItemListTesting { constructor(page) { this.page = page; function randomNumber(min, max) { // min = Math.ceil(min); ir max = Math.floor(max); yra ko gero nereikalingi. Jie tau padėtų jei funkcija priimtų skaičius su kableliais, o natūralu, kad šita funkcija neskirta tokiems skaičiams ir čia tik vidiniam naudojimui. min = Math.ceil(min); max = Math.floor(max); return Math.floor(Math.random() * (max - min + 1)) + min; } //Trumpam laikui susikurti ir assigninti į "let itemId" nereikia, jokio benefit iš to negaunam. Užtektų vienos eilutės //this.itemId = randomNumber(1, 6); //Bendrai paėmus itemId, gal nėra tikslus pavadinimas, bes id įprastai nėra vienas skaitmuo. Čia jei gerai suprantu yra indeksas. Tai ir užvadinti galima "itemIndex". //Jei tai yra indeksas, tai jis turėtų prasidėti nuo 0, o ne nuo 1. Dabartiniu atveju tu imi skaičius nuo 2 iki 7, nes indeksai pradedami skaičiuoti nuo 0. //Nepamenu tiksliai dėl xpath selectorių, bet jei dėl indeksų yra tiesa, tada ir funkciją reikėtų naudoti randomNumber(0, 5), o ne randomNumber(1, 6). let itemId = randomNumber(1, 6); this.itemId = itemId; } async testingScopeValue(testingMethod) { if (testingMethod == "single") { //Čia perdarau kaip manau aiškiau skaityti ir apačioje palieku tavo versiją. const locateItemAddToCartButton = (itemIndex) => this.page.locator('xpath=(//div/button[contains(@id,"add-to-cart")])[' + itemIndex + "]"); const locateRemoveButton = () => this.page.locator('xpath=(//div/button[contains(@id,"remove")])'); const locateInventoryItem = (itemIndex) => this.page.locator('xpath=(//div[@class="inventory_item_name"])[' + itemIndex + "]"); const locateAddToCartButton = () => this.page.locator('xpath=(//div/button[contains(@id,"add-to-cart")])'); const locateBackButton = () => this.page.locator('xpath=//div/button[contains(@id,"back")]'); const locateShoppingCartBadge = () => this.page.locator('xpath=//span[@class="shopping_cart_badge"]'); const locateInventoryItems = () => this.page.locator('xpath=//div[@class="inventory_item_name"]'); //Jeigu viršuj keisi į itemIndex tai ir čia reikės await locateItemAddToCartButton(this.itemId).click(); expect(locateRemoveButton()).toHaveText("Remove"); await locateRemoveButton().click(); await locateInventoryItem(this.itemId).click(); await locateAddToCartButton().click(); expect(locateRemoveButton()).toHaveText("Remove"); await locateRemoveButton().click(); await locateBackButton().click(); await locateItemAddToCartButton(this.itemId).click(); expect(locateShoppingCartBadge()).toHaveText("1"); await locateShoppingCartBadge().click(); expect(locateInventoryItems()).toHaveCount(1); await locateRemoveButton().click(); expect(locateInventoryItems()).toHaveCount(0); //Suskaldžiau tavo testą į 3 sekcijas (atskirtas enter) dėl skaitomumo. Jei manai, kad neverta tai all good, apjunk. O gal ir dar galima suskaldyti. Jei yra testuojami nesusiję flowsai, tai iš esmės dažnai būtų skaitomiau juos išskirt į atskiras funkcijas. //Tavo versija await this.page.locator('xpath=(//div/button[contains(@id,"add-to-cart")])[' + this.itemId + "]").click(); await expect(this.page.locator('xpath=(//div/button[contains(@id,"remove")])')).toHaveText("Remove"); await this.page.locator('xpath=(//div/button[contains(@id,"remove")])').click(); await this.page.locator('xpath=(//div[@class="inventory_item_name"])[' + this.itemId + "]").click(); await this.page.locator('xpath=(//div/button[contains(@id,"add-to-cart")])').click(); await expect(this.page.locator('xpath=(//div/button[contains(@id,"remove")])')).toHaveText("Remove"); await this.page.locator('xpath=(//div/button[contains(@id,"remove")])').click(); await this.page.locator('xpath=//div/button[contains(@id,"back")]').click(); await this.page.locator('xpath=(//div/button[contains(@id,"add-to-cart")])[' + this.itemId + "]").click(); await expect(this.page.locator('xpath=//span[@class="shopping_cart_badge"]')).toHaveText("1"); await this.page.locator('xpath=//span[@class="shopping_cart_badge"]').click(); await expect(this.page.locator('xpath=//div[@class="inventory_item_name"]')).toHaveCount(1); await this.page.locator('xpath=(//div/button[contains(@id,"remove")])').click(); await expect(this.page.locator('xpath=//div[@class="inventory_item_name"]')).toHaveCount(0); } } }