Sobes.tech
Middle

O que é um decorador no contexto da programação?

sobes.tech IA

Resposta da IA

O decorador é um padrão de design estrutural que permite adicionar dinamicamente novas responsabilidades aos objetos, envolvendo-os em objetos decoradores especiais. Oferece uma alternativa mais flexível à herança para expandir a funcionalidade.

Ideias-chave:

  • Envolvimento: O decorador contém uma referência ao objeto envolvido.
  • Delegação: O decorador delega as chamadas de métodos ao objeto envolvido, podendo realizar lógica adicional antes ou depois da chamada.
  • Expansão de funcionalidade: Permite adicionar comportamentos aos objetos sem alterar sua estrutura ou usar subclasses.

Aplicação em QA Automation:

  • Registro de ações: Adicionar registros aos métodos de interação com os elementos da página.
  • Tratamento de exceções: Adicionar tratamento universal de exceções às chamadas de funções.
  • Tentativas: Implementar um mecanismo de re-tentativas para executar testes flaky ou ações.
  • Injeção de pré/pós-condições: Executar ações específicas antes ou depois do passo principal do teste.

Exemplo em Python:

def log_method_call(func):
    # Decorador que registra a chamada da função
    def wrapper(*args, **kwargs):
        print(f"Chamando função: {func.__name__} com args: {args}, kwargs: {kwargs}")
        result = func(*args, **kwargs)
        print(f"Função {func.__name__} retornou: {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"Clicando no elemento localizado por: {locator}")
        # Simulação de ação do driver
        # self.driver.find_element(*locator).click()
        return "Botão Clicado"

# Uso
# driver = ... # Inicialização do driver
# page = PageObject(driver)
# page.click_button(("ID", "submit_button"))