javascript - Používanie static v page object (Cypress)


Pri prezeraní rôznych príkladov implementácie e2e testov v Cypress som narazil na fakt, že mnoho ľudí používa spôsob vytvárania nového objektu namiesto použitia static. Prečo to robia? Prečo nepoužiť static pre metódy page-object, keďže nemeníme žiadne údaje priamo v triede a teda ani nekomunikujeme s this, a nepotrebujeme mať viacero inštancií tej istej stránky (alebo nevidím scenár, kde by to bolo potrebné). Chápem, že Selenium používa page factory a preto je nutné vytvoriť nový objekt, ale v Cypress som nenašiel analógiu.

Príklad vytvorenia nového objektu:

import { BasePage } from './BasePageClass'
import { navMenu } from './NavigationMenuClass';
import { queryPage } from './QueryPageClass';

export class MainPage extends BasePage  {
  constructor() {
    super();
    this.mainElement = 'body > .banner';
  }

  verifyElements() {
    super.verifyElements();
    cy.get(this.mainElement).find('.container h1').should('be.visible');
  }

  switchToQueryingPage() {
    navMenu.switchToQueryingPage();
    queryPage.verifyElements();
  }
};

export const mainPage = new MainPage();

Príklad použitia static:

import { BasePage } from './BasePageClass'
import { navMenu } from './NavigationMenuClass';
import { queryPage } from './QueryPageClass';

export default class MainPage extends BasePage  {
  static mainElement = 'body > .banner';

  constructor() {
    super();
  }

  static verifyElements() {
    super.verifyElements();
    cy.get(MainPage.mainElement).find('.container h1').should('be.visible');
  }

  static switchToQueryingPage() {
    navMenu.switchToQueryingPage();
    queryPage.verifyElements();
  }
};

Odpoveď č. 1

Tu je príklad kompozície príkazov, ktoré ma naučili používať moji starší. Mám funkciu buyProduct, ale vyžaduje si niekoľko krokov a ja som ich rozdelil do rôznych príkazov, ktoré možno použiť v rôznych prípadoch:

it('buyProductAsCustomer', ()=>{
    cy.login(customer)
    cy.shopFe_openProductByName(product.name)
    cy.shopFe_addProductToCart()
    cy.shopFe_openCheckoutFromCart()
    cy.shopFe_selectPaymentMethod("payWithCreditCardMethod")
    cy.shopFe_fillCheckoutFormAsCustomer(customer)
    cy.shopFe_checkoutPageGetOrderData()
    cy.shopFe_submitCheckoutForm()
    cy.shopFe_completePaymentWithCreditCard()
});
it('buyProductAsGuest', ()=>{
    cy.shopFe_openProductByName(product.name)
    cy.shopFe_addProductToCart()
    cy.shopFe_openCheckoutFromCart()
    cy.shopFe_selectPaymentMethod("payWithCashMethod")
    cy.shopFe_fillCheckoutFormAsGuest(guest)
    cy.shopFe_checkoutPageGetOrderData()
    cy.shopFe_submitCheckoutForm()
    cy.shopFe_completePaymentWithCreditCard()
});

Tieto 2 prípady sa dajú vykonať v príkaze s niekoľkými premennými, ale s časom sa tieto premenné majú tendenciu zvyšovať desaťnásobne. Preto ich rozdeľujeme do menších opakovateľných častí, ktoré je možné kombinovať rôznymi spôsobmi.