Sobes.tech
Middle

Šta je dekorator u kontekstu programiranja?

sobes.tech АИ

Одговор од АИ

Dekorator je strukturni obrazac dizajna koji omogućava dinamičko dodavanje novih odgovornosti objektima, obavijajući ih u posebne dekoratorske objekte. On pruža fleksibilniju alternativu nasleđivanju za proširenje funkcionalnosti.

Ključne ideje:

  • Obavijanje: Dekorator sadrži referencu na obavijeni objekat.
  • Delegiranje: Dekorator delegira pozive metoda na obavijeni objekat i može izvršiti dodatnu logiku pre ili posle poziva.
  • Proširenje funkcionalnosti: Omogućava dodavanje ponašanja objektima bez promene njihove strukture ili korišćenja podklasa.

Primena u QA Automatizaciji:

  • Logovanje akcija: Dodavanje logovanja metodama interakcije sa elementima stranice.
  • Rukovanje izuzecima: Dodavanje univerzalnog rukovanja izuzecima na pozive funkcija.
  • Ponavljajući pokušaji: Implementacija mehanizma za ponovljene pokušaje izvršavanja flaky testova ili akcija.
  • Umetanje pre/post uslova: Izvršavanje određenih radnji pre ili posle glavnog koraka testa.

Primer u Pythonu:

def log_method_call(func):
    # Dekorator koji beleži poziv funkcije
    def wrapper(*args, **kwargs):
        print(f"Poziv funkcije: {func.__name__} sa args: {args}, kwargs: {kwargs}")
        result = func(*args, **kwargs)
        print(f"Funkcija {func.__name__} vratila: {result}")
        return result
    return wrapper

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

    @log_method_call
    def click_button(self, locator):
        # Metod koji koristi dekorator
        print(f"Klik na element lociran po: {locator}")
        # Simulacija akcije drajvera
        # self.driver.find_element(*locator).click()
        return "Dugme kliknuto"

# Upotreba
# driver = ... # Inicijalizacija drajvera
# page = PageObject(driver)
# page.click_button(("ID", "submit_button"))