python单例模式selenium driver实现单例
一、使用装饰器实现单例
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实现单例相关推荐
- python 与设计模式 ——工厂与单例
python 与设计模式 源码地址:http://git.oschina.net/duoduo3_69/python_design_pattern git checkout v001(这个版本与此篇博 ...
- 0606-工厂模式、单例模式、DBDA的单例和完整功能
工厂模式:只要指定类名,就可以据此获取一个该类的对象. 单例模式:某个类,只允许其"创建"出一个对象. 单例的方法:三私一公(一个私有化对象,一个私有化构造方法,一个私有化克隆方法 ...
- 设计模式--单例模式--静态内部类和枚举单例
双重检测锁模式 作用:这个模式通过将同步内容(synchronized内的内容)提到if方法内部,通过双重检测的方式来保证第一次创建的准确性,但是对于后面的再次调用不再要求上锁.从而提高了执行的效率, ...
- [适合非python新手]selenium自动化测试 25-测试用例运行和报告
目录 背景 测试用例运行 HTMLTestRunner-测试报告生成 verbosity 添加用例注释,增加报告完整性 完整demo代码 HTMLTestRunner源码 背景 上一篇已经讲解了测试用 ...
- Python实例浅谈之五Python守护进程和脚本单例运行
一.简介 守护进程最重要的特性是后台运行:它必须与其运行前的环境隔离开来,这些环境包括未关闭的文件描述符.控制终端.会话和进程组.工作目录以及文件创建掩码等:它可以在系统启动时从启动脚本/etc/rc ...
- Python守护进程和脚本单例运行
2019独角兽企业重金招聘Python工程师标准>>> 一.简介 守护进程最重要的特性是后台运行:它必须与其运行前的环境隔离开来,这些环境包括未关闭的文件描述符.控制终端.会话和进程 ...
- java 线程安全的单例_线程安全的单例模式的几种实现
单例模式是常见的设计模式之一:目的是节省内存,限制了实例的个数:有利于java GC回收机制. 单例模式的三个好处: 1.控制资源的使用,通过线程同步来控制资源的并发访问 2.控制实例的产生个数,来达 ...
- struts单例模式 java_Java单例设计模式详细介绍
Java单例设计模式教程中包含了单例模式的定义.特点以及线路安全等问题. 单例模式定义: 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例.在计算机系统中,线程池.缓存.日志对象 ...
- 【深入设计模式】单例模式—从源码分析内部类单例、枚举单例以及单例模式在框架中的应用
文章目录 1. 使用静态内部类实现单例模式 1.1 静态内部类单例写法 1.2 如何实现懒加载 1.3 为什么线程安全 2. 枚举类型单例单例模式 2.1 枚举类型单例写法 2.2 枚举类型单例原理 ...
- C++单例对象是什么?(单例模式)
文章目录 单例对象(单例模式) 单例模式的缺点 示例 单例对象(单例模式) 在面向对象编程中,单例模式是一种创建型设计模式,用于确保类只有一个实例,并提供一个全局访问点以访问该实例.在单例模式中,类的 ...
最新文章
- C#ListView控件添加Checkbox复选框并获取选中的数目,检查checkbox是否勾选
- 网站防火墙探测工具Wafw00f
- python语言跨平台语言吗_python属于跨平台语言吗?
- c++ pat 乙级 --1001 害死人不偿命的(3n+1)猜想
- vue表格刷新数据_Vue.js+Layer表格数据绑定与实现更新的实例
- 如何在mysql中打开mongodb_图解:如何从MySQL移植到MongoDB
- 怎么开通手机信息服务器,如何用手机建立网站
- Redis-集群监控之Redis monitor
- Team Foundation Server (TFS) 2015 安装指导
- 前端笔记-webpack加载前端资源(图片,css等)
- 国内搜索大哥iOS面试题
- javascript闭包新认识
- Android 热修复的相关总结(主要是阿里百川的)
- SpyEye on Android
- Android对H265和VP9的支持(十四)
- 银行放贷冲动不强:7折房贷利率料最早明年现身
- 计算机公共基础知识(N-S图,DFD图,PAD图,程序流程图,E-R图)
- C++ multimap的简单使用
- samba搭建办公室共享打印机
- 编码格式之间进行文本内码转换的库