Sobes.tech
Middle

¿Qué es un decorador en el contexto de la programación?

sobes.tech AI

Respuesta de la IA

El decorador es un patrón de diseño estructural que permite agregar dinámicamente nuevas responsabilidades a los objetos, envolviéndolos en objetos decoradores especiales. Ofrece una alternativa más flexible a la herencia para ampliar la funcionalidad.

Ideas clave:

  • Envolvimiento: El decorador contiene una referencia al objeto envuelto.
  • Delegación: El decorador delega las llamadas a los métodos del objeto envuelto, pudiendo realizar lógica adicional antes o después de la llamada.
  • Ampliación de funcionalidad: Permite agregar comportamientos a los objetos sin modificar su estructura ni usar subclases.

Aplicación en QA Automation:

  • Registro de acciones: Añadir registros a los métodos de interacción con los elementos de la página.
  • Manejo de excepciones: Añadir manejo universal de excepciones a las llamadas de funciones.
  • Reintentos: Implementar un mecanismo de reintentos para ejecutar pruebas flaky o acciones.
  • Inyección de pre/post-condiciones: Realizar acciones específicas antes o después del paso principal de la prueba.

Ejemplo en Python:

def log_method_call(func):
    # Decorador que registra la llamada a la función
    def wrapper(*args, **kwargs):
        print(f"Llamando a la función: {func.__name__} con args: {args}, kwargs: {kwargs}")
        result = func(*args, **kwargs)
        print(f"La función {func.__name__} devolvió: {result}")
        return result
    return wrapper

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

    @log_method_call
    def click_button(self, locator):
        # Método que usa decorador
        print(f"Haciendo clic en el elemento localizado por: {locator}")
        # Simulación de acción del driver
        # self.driver.find_element(*locator).click()
        return "Botón clickeado"

# Uso
# driver = ... # Inicialización del driver
# page = PageObject(driver)
# page.click_button(("ID", "submit_button"))