我的装饰功能不起作用。装饰函数似乎不会自动接收装饰函数。
这是显示在终端中的错误:
TypeError: Browser.check_if_logged() missing 1 required positional argument: 'function'这是我的密码:
def check_if_logged(self, function) -> bool:
'''
Decorator class that verify if user is logged or not.\n
IF user IS NOT logged, then execute login on ERP\n
IF user IS logged, then pass.
"
'''
def wrapper():
try:
if self.browser.find_element(By.XPATH, '//*[text()="Login administrativo"]'):
function()
return True
else:
if self.browser.find_element(By.XPATH, '//*[text()="Selecione uma empresa"]'):
pass
except Exception as e:
print('Houve um erro ao validar login:', e)
return False
return wrapper()
@check_if_logged
def to_do_login_erp(self):
try:
input_login = self.browser.find_element(By.XPATH, ERP_INPUT_LOGIN_USERNAME)
input_login.send_keys(USER_NAME_LOGIN)
input_password = self.browser.find_element(By.XPATH, ERP_INPUT_LOGIN_PASSWORD)
input_password.send_keys(PASSWORD_LOGIN)
btn_login = self.browser.find_element(By.XPATH, ERP_BTN_LOGIN)
btn_login.click()
except Exception as e:
print('Erro ao realizar login: ', e)发布于 2022-03-19 16:06:21
问题并没有很清楚地说明,但我假设这两个函数属于某一类。
问题在于您在类中创建了一个包装器。包装器check_if_logged需要两个参数self和function。当您将它用作包装器@时,您只向函数check_if_logged提供一个参数(这个参数是to_do_login_erp)。它不会从类中获得self,即使它是在那里定义的。这就是为什么需要在类之外创建包装器的原因。
另一件可能稍后会出现的事情是:您的function需要返回而不是调用(所以不是function())。包装器通常如下所示:
def check_if_logged(function):
def wrapper():
check_something()
return function
return wrapper()出于您的目的,我不会使用包装器,只需在我想要调用的函数中直接创建一个check_if_logged,因为您还希望使用类的一些属性或函数来检查您是否已被记录。
希望这能帮上忙。
https://stackoverflow.com/questions/71539147
复制相似问题