Bosh sahifa Wiki Page Object

Page Object

Page Object — browser testlarida sahifa yoki uning mantiqiy qismini obyekt sifatida ifodalovchi dizayn patternidir. U locator va UI amallarini test ssenariysidan ajratadi. Testlogin formadagi submit selectorini bosish” o‘rniga loginPage.signIn(user) kabi domen ma’nosidagi amalni chaqiradi.

Tuzilishi

Page Object odatda sahifaga tegishli locatorlar, interaction metodlari va muhim holatlarni tekshiruvchi kichik yordamchilardan iborat. Constructor browser page yoki driver instance oladi. Navigation alohida metod bo‘lishi mumkin.

class LoginPage {
  constructor(private page: Page) {}

  async signIn(email: string, password: string) {
    await this.page.getByLabel('Email').fill(email)
    await this.page.getByLabel('Password').fill(password)
    await this.page.getByRole('button', { name: 'Kirish' }).click()
  }
}

Bu obyekt credentialni qayerdan olishni yoki login muvaffaqiyatining biznes talabini o‘zi hal qilmaydi; u UI bilan muloqot chegarasini ifodalaydi.

Abstraksiya darajasi

Metodlar foydalanuvchi maqsadini ifodalasa test o‘qilishi osonlashadi. clickThirdButton() DOM tartibiga, submitOrder() esa domen amaliga bog‘langan. Biroq barcha mumkin bo‘lgan actionni bitta ulkan page classga yig‘ish God Object hosil qiladi.

Navbar, date picker yoki product card kabi qayta ishlatiladigan qism component object sifatida ajratiladi. Bir page bir nechta componentni kompozitsiya qiladi. Inheritance orqali umumiy BasePage yaratish ko‘pincha keraksiz umumiy metodlarni tarqatadi; kichik helper va composition aniqroq bo‘ladi.

Assertion chegarasi

Page Object element topilganini yoki sahifa ochilganini tekshirishi mumkin. Biznes assertionlarini testda qoldirish qaysi natija talab qilinayotganini ko‘rsatadi. Masalan, orderPage.totalText() qiymatni qaytaradi, test esa kutilgan summani solishtiradi. Har metod ichida ko‘plab yashirin assertion bo‘lsa failure sababi va reuse qiyinlashadi.

Actiondan keyingi texnik kutish metod ichida bo‘lishi mumkin: modal ochish metodi modal ko‘rinishini kutadi. Ammo global sleep yoki har clickdan keyin bir xil kutish patternning vazifasi emas.

Lifecycle va parallel test

Page Object testga tegishli browser context yoki page bilan yaratiladi. Uni parallel testlar orasida global ulashish navigation, cookie va element holatini aralashtiradi. Obyekt DOM element referenceini uzoq saqlamasdan locatorni saqlashi ma’qul; zamonaviy UI qayta renderda eski element stale bo‘lishi mumkin.

Sahifa dizayni o‘zgarsa locator bir joyda yangilanadi, lekin pattern testni avtomatik barqaror qilmaydi. Noto‘g‘ri selector, shared data va asinxron holat baribir muammo tug‘diradi. Page Objectni faqat kod takrorini kamaytirish emas, test tili va UI chegarasini aniq qilish uchun ishlatiladi.

Variantlar

Screenplay pattern interactionni actor, task va questionlarga ajratadi. Application juda katta bo‘lsa u page classlarining o‘sishini boshqarishi mumkin, ammo oddiy loyiha uchun ko‘proq abstraksiya keltiradi. Page Object, component object yoki oddiy helper tanlovi test suite hajmi va UI qayta foydalanishiga bog‘liq.

Page Object metodi boshqa sahifaga olib o‘tsa yangi page object qaytarishi mumkin. Masalan, signIn muvaffaqiyatli holatda DashboardPage hosil qiladi. Login xatosida esa o‘sha sahifada qolish kutiladi; bitta metodning ikki turli yashirin natijasi API ni murakkablashtiradi. Action va natijani tekshirishni ajratish ko‘pincha aniqroq.

Modal, iframe va yangi tab alohida context talab qiladi. Iframe ichidagi locator frame scope bilan yaratiladi, popup esa event orqali olinadi. Ularni oddiy page locatoriga yashirish noto‘g‘ri timeout va chalkash ownership keltiradi. Har obyekt qaysi Page yoki Framega tegishli ekanini saqlaydi.

Bog‘liq tushunchalar

Browser automation, Locator, Component object, Screenplay pattern, Test fixture, Explicit wait, End-to-end testing