Sobes.tech
Middle

Ce este un decorator în contextul programării?

sobes.tech AI

Răspuns de la AI

Decoratoarele sunt un pattern structural de proiectare care permite adăugarea dinamică a responsabilităților noi obiectelor, învelindu-le în obiecte decorator speciale. Oferă o alternativă mai flexibilă la moștenire pentru extinderea funcționalității.

Idei cheie:

  • Împachetare: Decoratorul conține o referință la obiectul învelit.
  • Delegare: Decoratorul delegă apelurile de metode către obiectul învelit, putând executa logică suplimentară înainte sau după apel.
  • Extinderea funcționalității: Permite adăugarea de comportamente obiectelor fără a modifica structura lor sau a folosi subclase.

Aplicare în QA Automation:

  • Logare acțiuni: Adăugarea de logare la metodele de interacțiune cu elementele paginii.
  • Gestionarea excepțiilor: Adăugarea unei gestionări universale a excepțiilor la apelurile de funcții.
  • Încercări repetate: Implementarea unui mecanism de reîncercări pentru rularea testelor flaky sau a acțiunilor.
  • Injecție de pre/post-condiții: Executarea unor acțiuni specifice înainte sau după pasul principal al testului.

Exemplu în Python:

def log_method_call(func):
    # Decorator care înregistrează apelul funcției
    def wrapper(*args, **kwargs):
        print(f"Apelare funcție: {func.__name__} cu args: {args}, kwargs: {kwargs}")
        result = func(*args, **kwargs)
        print(f"Funcția {func.__name__} a returnat: {result}")
        return result
    return wrapper

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

    @log_method_call
    def click_button(self, locator):
        # Metodă care folosește decorator
        print(f"Fac clic pe elementul localizat de: {locator}")
        # Simulare acțiune driver
        # self.driver.find_element(*locator).click()
        return "Buton apăsat"

# Utilizare
# driver = ... # Inițializarea driverului
# page = PageObject(driver)
# page.click_button(("ID", "submit_button"))