Middle
Какво е декоратор в контекста на програмирането?
sobes.tech AI
Отговор от AI
Декораторът е структурен шаблон за дизайн, който позволява динамично добавяне на нови отговорности към обекти, като ги обвива в специални декораторски обекти. Той предлага по-гъвкава алтернатива на наследяването за разширяване на функционалността.
Основни идеи:
- Обвиване: Декораторът съдържа препратка към обвивания обект.
- Делегиране: Декораторът делегира извикванията на методи към обвивания обект и може да изпълнява допълнителна логика преди или след извикването.
- Разширяване на функционалността: Позволява добавяне на поведение към обекти без да се променя тяхната структура или използване на подкласове.
Приложение в QA автоматизация:
- Логване на действия: Добавяне на логване към методите за взаимодействие с елементи на страницата.
- Обработка на изключения: Добавяне на универсална обработка на изключения към извикванията на функции.
- Повторни опити: Реализиране на механизъм за повторни опити за изпълнение на flaky тестове или действия.
- Внедряване на преди/след условия: Изпълнение на определени действия преди или след основната стъпка на теста.
Пример на Python:
def log_method_call(func):
# Декоратор, който логва извикването на функция
def wrapper(*args, **kwargs):
print(f"Обаждане към функция: {func.__name__} с args: {args}, kwargs: {kwargs}")
result = func(*args, **kwargs)
print(f"Функцията {func.__name__} върна: {result}")
return result
return wrapper
class PageObject:
def __init__(self, driver):
self.driver = driver
@log_method_call
def click_button(self, locator):
# Метод, който използва декоратор
print(f"Кликане на елемент, локализиран от: {locator}")
# Симулация на действие на драйвера
# self.driver.find_element(*locator).click()
return "Бутонът е натиснат"
# Използване
# driver = ... # Инициализация на драйвера
# page = PageObject(driver)
# page.click_button(("ID", "submit_button"))