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"))