解决UI自动化开多浏览器的痛点--单例模式

为什么会使用单例模式:

问题:有几个页面就有几个浏览器对象driver,会打开多个浏览器。ui自动化过程中,只需要打开一个浏览器

解决: python本身就是有单例模式,同样的对象保证只有一个对象

#设置单例模式
"""
类创建实例:
    1- 先调用__new__() 创建方法----一般类里面省略不写,自动调用
    2- 再调用初始化方法 __init__()

设置单例模式作用:判断一个类,如果有实例,他就不会再重新创建新的实例
"""
class Single(object):
    #new方法创建对象
    def __new__(cls, *args, **kwargs):#方法重写
        #判断当前类是否有已经实例
        if not hasattr(cls,'_instance'):#没有实例
            cls._instance = super().__new__(cls)#使用父类的__new__方法
        return cls._instance

#哪一个类的实例需要使用单例模式,就直接继承Single类


#哪一个类的实例需要使用单例模式,就直接继承Single类

class Driver(Single):
    #一个下划线在类里面没有意义,自己约定的
    _driver = None#初始值
    def get_driver(self,browser_name='chrome'):
        if self._driver is None:# 判断有没有浏览器对象
            if browser_name=='chrome':
                self._driver = webdriver.Chrome()
            elif browser_name=='firefox':
                self._driver = webdriver.Firefox()
            else:
                raise (f'没有这个--{browser_name}--浏览器!')
            #1- 设置隐式时间---设置全局变量
            self._driver.implicitly_wait(implicitly_wait_time)
            #2- 浏览器最大化
            self._driver.maximize_window()
        return self._driver#返回浏览器对象

if __name__ == '__main__':
    Driver().get_driver()#创建Driver实例对象,调用对应的get_driver

 

posted @ 2021-08-26 15:55  胡七七  阅读(510)  评论(0编辑  收藏  举报