Appium Python 装饰器使用报错求助

小阿飞 · 2017年12月28日 · 最后由 edsion 回复于 2017年12月28日 · 2108 次阅读
class take_screen_shot():  #这个类将在下面作为装饰器使用
    def __init__(self, func):
        self.func = func
        self.name = func.__name__ + ' (error).png'  #拼接截图文件名

    def __call__(self, *args):   #对每次调用的函数都做截图操作
        try:
            self.func(self, *args)
        except Exception as msg:
            self.driver.get_screenshot_as_file('C:\\Users\\zhengtao\\Desktop\\pic\\'+self.name) 
            raise msg

我使用@take_screen_shot调用装饰器的时候,总是报错
AttributeError: 'take_screen_shot' object has no attribute 'driver'

这是为何,不解!

共收到 8 条回复 时间 点赞
仅楼主可见

self.driver.get_screenshot_as_file

你定义的 take screenshot 这个类里没有 driver 属性

Jerry li 回复

哥,你只是翻译了一下

小阿飞 回复

你要调用 self.driver , 就首先得定义有 driver 这个属性啊
比如上面的 self.name、 self.func 都已经定义好了,就不会报错。

解决:
方法 1 : 加上 self.driver 的定义
方法 2: 从其他类把 driver 拿过来用

应该还会有其他问题 建议看看这个

Jerry li 回复
global driver
self.driver=webdriver.Remote('http://localhost:4723/wd/hub',desired_caps)

只是截取了我代码的部分,那些都是定义过的

小阿飞 回复

你现在是在类内部调用 self ,是不会找到上面的定义吧?

小阿飞 回复

你这个有点搞了吧
声明 driver 是全局变量,然后用的是 self.driver。。。。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册