UI自动化测试单例实现报错:AttributeError: ‘NoneType‘ object has no attribute ‘get_driver‘

news2024/12/25 9:06:53

UI自动化测试单例实现报错:AttributeError: ‘NoneType’ object has no attribute ‘get_driver’


from selenium import webdriver

from configs.env import Env


class Singleton1(object):
    _instance = None

    def __new__(cls, *args, **kwargs):
        print('判断hasattr现在是否有_instance属性', hasattr(cls, '_instance'))

        if not hasattr(cls, '_instance'):
            cls._instance = super(Singleton1, cls).__new__(cls, *args, **kwargs)
        return cls._instance


class Singleton2(object):
    _instance = None

    def __new__(cls, *args, **kwargs):
        if cls._instance is None:
            cls._instance = super(Singleton2, cls).__new__(cls, *args, **kwargs)
        return cls._instance


class A(Singleton1):
    def a(self):
        pass


class CommDriver(Singleton1):
    driver = None

    """
    通用的浏览器类:
        - 打开浏览器
        - 最大化
        - 浏览器的类型
        - 有头和无头的设置
              - 关闭浏览器
    """

    # def __init__(self):
    #     self.driver = webdriver.Chrome()

    def get_driver(self, browser_type=Env.BROWSER_TYPE, headless_flag=Env.HEADLESS_FLAG):
        """
        根据env的配置, 获取一个浏览器,最大化并设置页面最大超时时间
        :param browser_type: 浏览器类型
        :param headless_flag: 有头无头的标记
        :return:
        """
        if self.driver is None:
            if not headless_flag:  # 有头

                if browser_type == 'firefox':
                    self.driver = webdriver.Firefox()
                elif browser_type == 'chrome':
                    self.driver = webdriver.Chrome()
            else:  # 无头
                if browser_type == 'firefox':
                    option = webdriver.FirefoxOptions()
                    option.add_argument('--headless')
                    self.driver = webdriver.Firefox(options=option)
                elif browser_type == 'chrome':
                    option = webdriver.ChromeOptions()
                    option.add_argument('--headless')
                    self.driver = webdriver.Chrome(options=option)

            self.driver.maximize_window()
            self.driver.set_page_load_timeout(Env.PAGE_LOAD_TIMEOUT) # 加载页面的最大超时时间
        return self.driver


if __name__ == '__main__':
    test_flag = 1
    if test_flag == 3:
        d3 = CommDriver()
        d4 = CommDriver()
        print(id(d3) == id(d4))

    if test_flag == 2:
        a1 = A().a
        a2 = A().a
        print(id(a1) == id(a2))

    if test_flag == 1:
        d1 = CommDriver().get_driver()
        d2 = CommDriver().get_driver()
        print(id(d1) == id(d2))

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1043544.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

容器技术所涉及Linux内核关键技术

目录 一、容器技术前世今生 1.1 1979年 — chroot 1.2 2000年 — FreeBSD Jails 1.3 2001年 — Linux VServer 1.4 2004年 — Solaris容器 1.5 2005年 — OpenVZ 1.6 2006年 — Process容器 1.7 2007年 — Control Groups 1.8 2008年 — LXC 1.9 2011年 — Warden 1…

进程的内存映像

组成部分 代码段:即程序的二进制代码,只读,可被多个进程共享数据段:包括全局变量和静态变量进程控制块PCB:在系统区(内核区),操作系统通过PCB来控制和管理进程堆:用来存放…

后端开放从小白到大佬之Linux的命令(一):nohup,详解底层!!!

文章目录 nohupnohup命令初识nohup命令语法nohup的原理如何查看nohup的进程ps | greppgrepjobspu -ux 如何关闭进程killpkill 结尾 nohup nohup命令初识 在 Linux 中,nohup 命令 用于在后台运行命令,并将其输出重定向到一个文件中,即使退出…

一文教你学会ArcGIS Pro地图设计与制图系列全流程(2)

ArcGIS Pro做的成果图及系列文章目录: 系列文章全集: 《一文教你学会ArcGIS Pro地图设计与制图系列全流程(1)》《一文教你学会ArcGIS Pro地图设计与制图系列全流程(2)》《一文教你学会ArcGIS Pro地图设计与…

PHP 图书资料管理系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP 图书资料管理系统是一套完善的web设计系统,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 PHP 图书资料管理系统mysql数据库web结构apach 代码 https://download.csdn.net/down…

pip install open-interpreter报错,无法安装

标题pip install open-interpreter报错,无法安装 ERROR: Could not find a version that satisfies the requirement open-interpreter (from versions: none) ERROR: No matching distribution found for open-interpreter 另外发现自己换了很多国内镜像源&#x…

提升推广效果的秘密武器,快速学会电子传单制作

随着科技的发展,电子传单成为了企业宣传的重要工具之一。相比传统纸质传单,电子传单更加灵活、便捷,并且能够通过网络快速传播。想要制作一份精美的电子传单,我们可以利用一些专业的H5制作平台/工具,下面就来介绍一下具…

【考研数学】概率论与数理统计 —— 第三章 | 二维随机变量及其分布(2,常见的二维随机变量及二维变量的条件分布和独立性)

文章目录 引言四、常见的二维随机变量4.1 二维均匀分布4.2 二维正态分布 五、二维随机变量的条件分布5.1 二维离散型随机变量的条件分布律5.2 二维连续型随机变量的条件分布 六、随机变量的独立性6.1 基本概念6.2 随机变量独立的等价条件 写在最后 引言 有了上文关于二维随机变…

delphi中使用CADVCL 10.0 Enterprise控件解析DXF文件生成图片保存到本地

使用案例demos中GettingStarted案例 修改OnClick方法 更换代码 varvDrawing: TsgCADDXFImage;I: Integer;vEnt: TsgDXFEntity;vDXFImage:TsgCADImage;Bitmap: TBitmap;jpg: TJpegImage; beginvDrawing : TsgCADDXFImage.Create;vDrawing.LoadFromFile(d:\Entities.dxf);for …

创新驱动的未来:探索企业专利信息API的应用

引言 在今天的商业环境中,创新是企业成功的关键因素之一。创新不仅可以为企业带来竞争优势,还可以促使行业不断发展和演进。而要实现创新,保护知识产权、了解市场动态以及获得有关竞争对手创新活动的信息至关重要。企业专利信息API为企业提供…

springboot+vue智能诊后随访系统 java医院挂号预约诊断系统

本系统是基于java前端架构Vue用java编程语言及javascript、CSS、HTML语言进行编写设计并实现相关功能的。 设计步骤及措施: (1)确定项目名称、项目研究内容,开题报告提交及修改。 (2)项目开发准备&#xff…

浅谈软件测试面试一些常见的问题

一、简历及岗位匹配度 说到简历,其实这一点是很重要但又被很多职场小白忽视的问题。经常有人说我投了很多简历,但是没有公司给我打电话,怎么办? 首先,应该明白的一点:面对求职市场的激烈竞争性&#xff0…

最新AI创作系统ChatGPT商业运营源码+AI绘画+详细图文搭建部署教程

一、AI创作系统 SparkAi系统是基于很火的GPT提问进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT系统?小编这里写一个详细图文教程吧&#x…

华为云云耀云服务器L实例评测|在云耀云服务器L实例使用Docker搭建redis集群——三主三从集群

购买云耀云服务器 L 实例 华为云耀云服务器 L 实例是一款轻量级云服务器,开通选择实例即可立刻使用,不需要用户再对服务器进行基础配置。新用户还有专享优惠,2 核心 2G 内存 3M 带宽的服务器只要 89 元/年,可以点击华为云云耀云服…

HTMl案例二:注册页面

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>综合案例-注册页面</title> </head><…

paddle2.3-基于联邦学习实现FedAVg算法

目录 1. 联邦学习介绍 2. 实验流程 3. 数据加载 4. 模型构建 5. 数据采样函数 6. 模型训练 1. 联邦学习介绍 联邦学习是一种分布式机器学习方法&#xff0c;中心节点为server&#xff08;服务器&#xff09;&#xff0c;各分支节点为本地的client&#xff08;设备&#…

8+铜死亡+分型+预后模型

今天给同学们分享一篇铜死亡分型预后模型的生信文章“Signature construction and molecular subtype identification based on cuproptosis-related genes to predict the prognosis and immune activity of patients with hepatocellular carcinoma”&#xff0c;这篇文章于2…

Vue实现Hello World

<div id"aa"> <p>{{h}}</p> </div> <script src"https://cdn.jsdelivr.net/npm/vue2/dist/vue.js"></script> <script> const hello new Vue({ el:#aa, data:{ h : Hello World } }) </script>

Bigemap在地质矿产行业的应用

工具 Bigemap gis office地图软件 BIGEMAP GIS Office-全能版 Bigemap APP_卫星地图APP_高清卫星地图APP 首先 在地质矿产勘查中 &#xff0c;Gis技术可以用来被直接利用到工作分析里面&#xff0c;可以快速获取存储和管理大量空间数据 比如结合卫星影像和无人机遥感数据&am…

ASN1编码查看工具

ASN1编码查看工具 多页面ASN1编码查看工具&#xff0c;支持DER和base64编码&#xff0c;支持数据高亮 多页面ASN1编码查看工具&#xff0c;支持DER和base64编码&#xff0c;支持数据高亮