zoukankan      html  css  js  c++  java
  • 解决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
    “学习必须如蜜蜂一样,采过许多花,这才能酿出蜜来。”
  • 相关阅读:
    URL编码和Bsae64编码
    在控制台保存下载数据文件方法
    前端下载文件的几种方式
    npm i error:0909006C:PEM routines:get_name:no start line 遇到问题解决
    MapTalks.js 使用小结(三): 各类地图加载
    在线瓦片地图服务资源 总结
    npm webpack 遇到的问题解决方案总结
    MapTalks.js 使用小结(二)
    可拖动的进度条 in vue
    滚动条vue-seamless-scroll的使用
  • 原文地址:https://www.cnblogs.com/Lara1798/p/15190070.html
Copyright © 2011-2022 走看看