Sparround

Class-lar və OOP əsasları

Class — data (sahələr) və davranışı (metodlar) bir yerdə saxlayan şablondur. Test avtomatlaşdırmasında class-ların əsas istifadə yeri Page Object Model-dir: hər səhifə bir class, locator-lar sahələr, istifadəçi əməliyyatları isə metodlar kimi.

Əsas elementlər:

  • class LoginPage { ... } — elan
  • constructor(page) — obyekt yaradılanda bir dəfə işləyən quraşdırma; new LoginPage(page) çağırışında icra olunur
  • Metodlar — async login(user, pass) { ... }
  • Sahələr — this.email = ...
  • Private sahə#token (JavaScript-in özündə) və ya private token (TypeScript-də): xaricdən müraciət qadağandır
  • static üzvlər — instansiya olmadan class üzərindən çağırılır: TestData.defaultUser()
KonstruksiyaNə edirPOM-da nümunə
constructor(page)obyekt yaradılanda locator-ları hazırlayırthis.submit = page.getByRole('button')
extends / super()başqa class-dan miras alır; super() valideyn constructor-u çağırırclass LoginPage extends BasePage
#privateFieldyalnız class daxilində görünür#baseUrl — testlər ona toxuna bilmir
static metodinstansiya olmadan çağırılırTestUser.random()
arrow class fieldthis-i həmişəlik instansiyaya bağlayırget = (path) => fetch(...)

Miras (inheritance) və ya kompozisiya?

Miras — "X bir növ Y-dir" münasibəti: LoginPage extends BasePage. Faydası açıqdır (ümumi open(), waitForLoad() metodları bir yerdə), amma dərin iyerarxiya (3+ səviyyə) POM-u ağırlaşdırır: metodun harada təyin olunduğunu tapmaq çətinləşir, valideyndəki dəyişiklik gözlənilmədən bütün səhifələri sındırır.

Kompozisiya — "X-in içində Y var" münasibəti: LoginPage daxilində this.header = new HeaderComponent(page). Təkrar istifadə olunan UI komponentləri (header, modal, cədvəl, filtr paneli) üçün məhz kompozisiya düzgün seçimdir.

Praktik qayda: bir səviyyə BasePage mirası + qalan hər şey kompozisiya. Bu, əksər komandalarda işləyən balansdır.

`this` tələsi — interview-də çox verilən mövzu. Metodu obyektindən ayırıb callback kimi ötürəndə (items.map(api.get)) this itir və undefined olur. Üç həll: arrow ilə bürümək (p => api.get(p)), api.get.bind(api) və ya class field-i arrow kimi yazmaq (get = (p) => ...).

POM üçün ikinci vacib qayda: page object metodları assertion yox, əməliyyat qaytarmalıdır. Assertion-lar test faylında qalsın — belə olanda test nə yoxladığını oxuyanda görünür.

📚 Mənbələr və sənədlər