一、使用装饰器实现单例

def Singleton(cls):_instance = {}def _singleton(*args, **kargs):if cls not in _instance:_instance[cls] = cls(*args, **kargs)return _instance[cls]return _singleton@Singleton
class A(object):a = 1def __init__(self, x=0):self.x = xa1 = A(2)
a2 = A(3)

二、web自动化driver实现单例模式

2.1 编写单例模式的装饰器

singleton.py

#coding:utf-8
#单例模式函数,用来修饰类
def singleton(cls,*args,**kw):instances = {}def _singleton():if cls not in instances:instances[cls] = cls(*args,**kw)return instances[cls]return _singleton

2.2 driver 使用装饰器,实现单例模式

GetSeleniumDriver.py
# -*- coding:utf-8 -*-
from selenium import webdriver
from singleton import singleton
@singleton
class GetSeleniumDriver(object):def __init__(self):self.driver = webdriver.Chrome()

2.3 获取driver的实例,就是单例了


class My_task(RES):def __init__(self):self.driver=GetSeleniumDriver().driverdef Making_task_Button(self):Making_task_Button=self.driver.find_element_by_xpath(RES.Making_task_Button_xpth)return Making_task_Buttondef Audit_task_Button(self):Audit_task_Button=self.driver.find_element_by_xpath(RES.Audit_task_Button_xpth)return Audit_task_Button

三、在自动化项目中具体的应用

3.1项目结构

一、工具层 Utils

1  singleton.py 是单例装饰器

#coding:utf-8
#单例模式函数,用来修饰类
def singleton(cls,*args,**kw):instances = {}def _singleton():if cls not in instances:instances[cls] = cls(*args,**kw)return instances[cls]return _singleton

2 GetSeleniumDriver.py  driver实现单例

# -*- coding:utf-8 -*-
from selenium import webdriver
from Utils.singleton import singleton
@singleton
class GetSeleniumDriver(object):def __init__(self):self.driver = webdriver.Chrome()

二、页面元素层 TsetSharelab

My_task.py

# -*- coding:utf-8 -*-from Utils.GetSeleniumDriver import GetSeleniumDriverclass My_task():def __init__(self):self.driver=GetSeleniumDriver().driverdef Making_task_Button(self):Making_task_Button=self.driver.find_element_by_xpath('/html/body/div[3]/div[1]/div/a[1]')return Making_task_Buttondef Audit_task_Button(self):Audit_task_Button=self.driver.find_element_by_xpath('/html/body/div[3]/div[1]/div/a[1]')return Audit_task_Button

三、流程层

把一步一步的动作,封装成一个业务流程

BookCity_page_process.py
# -*- coding:utf-8 -*-
from Utils.GetSeleniumDriver import GetSeleniumDriverimport timeclass BookCity_page_process(object):def __init__(self):self.driver=GetSeleniumDriver().driverdef WeiBo_Loain_To_Share(self):  time.sleep(3)self.driver.find_elements_by_class_name('W_input').pop(0).send_keys(123)time.sleep(1)self.driver.find_elements_by_class_name('W_input').pop(1).send_keys(456)

四、case层 ,把业务逻辑组成一条条用例

test_case.py

#coding:utf-8
from time import sleep
from Utils.GetSeleniumDriver import GetSeleniumDriverclass CreativeBooks(unittest.TestCase):@classmethoddef setUpClass(self):self.driver = GetSeleniumDriver().driversleep(2)@classmethoddef tearDownClass(self):passdef setUp(self):self.driver = GetSeleniumDriver().driverself.driver.get("http://t.com/")self.driver.maximize_window()sleep(1)Creative_books().Creative_books_Button().click()def tearDown(self):self.driver.delete_all_cookies()def testa(self):#新建图书Creative_books().CreatBook_Button().click()#输入书名Creative_books().Input_book_name().send_keys(u"A1一")#保存书名def testb(self):first = self.driver.current_window_handleCreative_books().Help_center_Button().click()

python单例模式selenium driver实现单例相关推荐

  1. python 与设计模式 ——工厂与单例

    python 与设计模式 源码地址:http://git.oschina.net/duoduo3_69/python_design_pattern git checkout v001(这个版本与此篇博 ...

  2. 0606-工厂模式、单例模式、DBDA的单例和完整功能

    工厂模式:只要指定类名,就可以据此获取一个该类的对象. 单例模式:某个类,只允许其"创建"出一个对象. 单例的方法:三私一公(一个私有化对象,一个私有化构造方法,一个私有化克隆方法 ...

  3. 设计模式--单例模式--静态内部类和枚举单例

    双重检测锁模式 作用:这个模式通过将同步内容(synchronized内的内容)提到if方法内部,通过双重检测的方式来保证第一次创建的准确性,但是对于后面的再次调用不再要求上锁.从而提高了执行的效率, ...

  4. [适合非python新手]selenium自动化测试 25-测试用例运行和报告

    目录 背景 测试用例运行 HTMLTestRunner-测试报告生成 verbosity 添加用例注释,增加报告完整性 完整demo代码 HTMLTestRunner源码 背景 上一篇已经讲解了测试用 ...

  5. Python实例浅谈之五Python守护进程和脚本单例运行

    一.简介 守护进程最重要的特性是后台运行:它必须与其运行前的环境隔离开来,这些环境包括未关闭的文件描述符.控制终端.会话和进程组.工作目录以及文件创建掩码等:它可以在系统启动时从启动脚本/etc/rc ...

  6. Python守护进程和脚本单例运行

    2019独角兽企业重金招聘Python工程师标准>>> 一.简介 守护进程最重要的特性是后台运行:它必须与其运行前的环境隔离开来,这些环境包括未关闭的文件描述符.控制终端.会话和进程 ...

  7. java 线程安全的单例_线程安全的单例模式的几种实现

    单例模式是常见的设计模式之一:目的是节省内存,限制了实例的个数:有利于java GC回收机制. 单例模式的三个好处: 1.控制资源的使用,通过线程同步来控制资源的并发访问 2.控制实例的产生个数,来达 ...

  8. struts单例模式 java_Java单例设计模式详细介绍

    Java单例设计模式教程中包含了单例模式的定义.特点以及线路安全等问题. 单例模式定义: 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例.在计算机系统中,线程池.缓存.日志对象 ...

  9. 【深入设计模式】单例模式—从源码分析内部类单例、枚举单例以及单例模式在框架中的应用

    文章目录 1. 使用静态内部类实现单例模式 1.1 静态内部类单例写法 1.2 如何实现懒加载 1.3 为什么线程安全 2. 枚举类型单例单例模式 2.1 枚举类型单例写法 2.2 枚举类型单例原理 ...

  10. C++单例对象是什么?(单例模式)

    文章目录 单例对象(单例模式) 单例模式的缺点 示例 单例对象(单例模式) 在面向对象编程中,单例模式是一种创建型设计模式,用于确保类只有一个实例,并提供一个全局访问点以访问该实例.在单例模式中,类的 ...

最新文章

  1. C#ListView控件添加Checkbox复选框并获取选中的数目,检查checkbox是否勾选
  2. 网站防火墙探测工具Wafw00f
  3. python语言跨平台语言吗_python属于跨平台语言吗?
  4. c++ pat 乙级 --1001 害死人不偿命的(3n+1)猜想
  5. vue表格刷新数据_Vue.js+Layer表格数据绑定与实现更新的实例
  6. 如何在mysql中打开mongodb_图解:如何从MySQL移植到MongoDB
  7. 怎么开通手机信息服务器,如何用手机建立网站
  8. Redis-集群监控之Redis monitor
  9. Team Foundation Server (TFS) 2015 安装指导
  10. 前端笔记-webpack加载前端资源(图片,css等)
  11. 国内搜索大哥iOS面试题
  12. javascript闭包新认识
  13. Android 热修复的相关总结(主要是阿里百川的)
  14. SpyEye on Android
  15. Android对H265和VP9的支持(十四)
  16. 银行放贷冲动不强:7折房贷利率料最早明年现身
  17. 计算机公共基础知识(N-S图,DFD图,PAD图,程序流程图,E-R图)
  18. C++ multimap的简单使用
  19. samba搭建办公室共享打印机
  20. 编码格式之间进行文本内码转换的库

热门文章

  1. springboot办公用品采购领用管理系统java
  2. ios系统安装包下载_iOS在后台自动升级?一招教你屏蔽iOS更新
  3. 高数_证明_级数收敛的莱布尼茨判别法
  4. C语言中 malloc函数介绍
  5. 计算机游戏教学法PPT,幼儿园语言游戏教学法PPT课件
  6. Android扫描wifi二维码自动连接wifi
  7. Python打印九九乘法表
  8. 【好看图标不用愁】吾爱万能软件ICO图标提取器
  9. 非线性最小二乘法曲线拟合
  10. Java识别获取pdf中文字信息