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