Sobes.tech
Middle

Dasturlash kontekstida dekorator nima?

sobes.tech AI

AIdan javob

Dekorator — bu tuzilma dizayn shabloni bo‘lib, u ob’ektlarga dinamik tarzda yangi mas’uliyatlar qo‘shishga imkon beradi, ularni maxsus dekorator ob’ektlariga o‘rab oladi. Bu funksionallikni kengaytirish uchun meros olishga nisbatan yanada moslashuvchan alternativani taqdim etadi.

Asosiy g‘oyalar:

  • O‘ralish: Dekorator o‘ralayotgan ob’ektga havola saqlaydi.
  • Delegatsiya: Dekorator o‘ralgan ob’ektga metod chaqiruvlarini delegatsiya qiladi va chaqirishdan oldin yoki keyin qo‘shimcha logika bajarishi mumkin.
  • Funksionallikni kengaytirish: Ob’ektlarning tuzilmasini o‘zgartirmasdan yoki subklasslardan foydalanmasdan xulq-atvor qo‘shishga imkon beradi.

QA Avtomatizatsiyasida qo‘llanilishi:

  • Harakatlarni log qilish: Sahifa elementlari bilan o‘zaro aloqalar metodlariga log qo‘shish.
  • Istisnolarni boshqarish: Funksiya chaqiruvlariga umumiy istisno boshqaruvini qo‘shish.
  • Takroriy urinishlar: Flaky testlar yoki harakatlarni takrorlash mexanizmini amalga oshirish.
  • Oldi/Keyingi shartlarni kiritish: Testning asosiy bosqichidan oldin yoki keyin ma’lum harakatlarni bajarish.

Python misoli:

def log_method_call(func):
    # Funksiya chaqiruvini log qiluvchi dekorator
    def wrapper(*args, **kwargs):
        print(f"Funksiya chaqirildi: {func.__name__} args bilan: {args}, kwargs bilan: {kwargs}")
        result = func(*args, **kwargs)
        print(f"{func.__name__} funksiyasi natija berdi: {result}")
        return result
    return wrapper

class PageObject:
    def __init__(self, driver):
        self.driver = driver

    @log_method_call
    def click_button(self, locator):
        # Dekoratordan foydalanadigan metod
        print(f"Elementga bosilmoqda: {locator}")
        # Driver harakatini simulyatsiya qilish
        # self.driver.find_element(*locator).click()
        return "Tugma bosildi"

# Foydalanish
# driver = ... # Driverni boshlash
# page = PageObject(driver)
# page.click_button(("ID", "submit_button"))