Имеется ли возможность передать в декоратор self параметр объекта?
Имеется несколько классов, методы которых нужно декорировать. Декоратор принимает один параметр.
def handle_pop_up(driver):
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
original_window_handle = driver.current_window_handle
switch_to_pop_up(driver)
result = func(*args, **kwargs)
driver.switch_to.window(original_window_handle)
return result
return wrapper
return decorator
Параметр, который нужно передать в декоратор, должен получаться через значение текущего объекта, то есть через self.driver. Я попытался сделать следующим образом
@handle_pop_up(self.driver)
def connect(self) -> None:
driver = self.driver
WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//div[@data-testid="OAuth_Consent_Button"]'))).click()
Но IDE выдаёт ошибку Unresolved reference 'self', то есть на таком уровне передать параметр не получится.
Каким образом можно попробовать передать self-аттрибут, не прибегая к следующему решению?
def connect(self) -> None:
driver = self.driver
@handle_pop_up(driver)
def decorated():
WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//div[@data-testid="OAuth_Consent_Button"]'))).click()
decorated()
Источник: Stack Overflow на русском