Middle
Czym jest dekorator w kontekście programowania?
sobes.tech AI
Odpowiedź od AI
Dekorator jest wzorcem strukturalnego projektowania, który umożliwia dynamiczne dodawanie nowych obowiązków obiektom, opakowując je w specjalne obiekty-dekoratory. Stanowi on bardziej elastyczną alternatywę dla dziedziczenia w celu rozszerzenia funkcjonalności.
Kluczowe idee:
- Otaczanie: Dekorator zawiera odniesienie do otaczanego obiektu.
- Delegacja: Dekorator deleguje wywołania metod do otaczanego obiektu, mogąc wykonywać dodatkową logikę przed lub po wywołaniu.
- Rozszerzanie funkcjonalności: Pozwala na dodanie zachowań do obiektów bez zmiany ich struktury lub użycia podklas.
Zastosowanie w QA Automation:
- Logowanie działań: Dodanie logowania do metod interakcji z elementami strony.
- Obsługa wyjątków: Dodanie uniwersalnej obsługi wyjątków do wywołań funkcji.
- Ponowne próby: Implementacja mechanizmu ponawiania wykonania flaky testów lub działań.
- Wstrzykiwanie warunków pre/post: Wykonywanie określonych działań przed lub po głównym kroku testu.
Przykład w Pythonie:
def log_method_call(func):
# Dekorator logujący wywołanie funkcji
def wrapper(*args, **kwargs):
print(f"Wywołanie funkcji: {func.__name__} z args: {args}, kwargs: {kwargs}")
result = func(*args, **kwargs)
print(f"Funkcja {func.__name__} zwróciła: {result}")
return result
return wrapper
class PageObject:
def __init__(self, driver):
self.driver = driver
@log_method_call
def click_button(self, locator):
# Metoda korzystająca z dekoratora
print(f"Kliknięcie elementu zlokalizowanego przez: {locator}")
# Symulacja działania drivera
# self.driver.find_element(*locator).click()
return "Przycisk kliknięty"
# Użycie
# driver = ... # Inicjalizacja drivera
# page = PageObject(driver)
# page.click_button(("ID", "submit_button"))