问答 方法加入装饰器后,调用不显示参数,且无法联想到后续方法

叶芜 · 2021年08月17日 · 最后由 叶芜 回复于 2021年08月18日 · 1715 次阅读

问题描述:

方法加入 自定义装饰器 后,调用时不显示参数,并且无法联想到后续的方法 ( click, sendkeys 等)

会报错,但用例正常运行
已尝试使用 @wraps(func),依然有该问题

装饰器 handle_black

import logging

from appium.webdriver.common.mobileby import MobileBy


def handle_black(func):
    def wrapper(*args, **kwargs):
        logging.basicConfig(level=logging.INFO)
        _black_list = [
            (MobileBy.ID, "mIvClose")
        ]
        _max_err_num = 3
        _error_num = 0
        from Oxygen_UI.page.base_page import BasePage
        instance: BasePage = args[0]
        try:
            logging.info("run " + func.__name__ + "\n args:" + repr(args[1:]) + "\n" + repr(kwargs))
            element = func(*args, **kwargs)
            _error_num = 0
            instance.set_implicitly_wait(5)
            return element

        except Exception as e:
            if _error_num > _max_err_num:
                _error_num = 0
                raise e
            _error_num += 1
            for ele in _black_list:
                eles = instance.finds(ele)
                if len(eles) > 0:
                    eles[0].click()
                    return wrapper(*args, **kwargs)
            raise ValueError("元素不在黑名单中")

    return wrapper

方法

@handle_black
    def find(self, by, locator=None) -> WebElement:
        if locator is None:
            result = self.driver.find_element(*by)
        else:
            result = self.driver.find_element(by, locator)
        return result

不显示参数

联想不到方法

报错信息

E       AttributeError: 'NoneType' object has no attribute 'click'
共收到 3 条回复 时间 点赞

是个好问题,要不给 jetbrains 提个 issue?😂
前提得是正版用户啊。

MarvinWu 回复

是正版用户

是最新版 Pycharm 的问题。。。

叶芜 关闭了讨论 08月18日 16:51
叶芜 关闭了讨论 08月18日 16:52
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册