Untitled

mail@pastecode.io avatarunknown
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);
    }
  }
}