python单例模式之selenium driver实现单例

目录
  • 一、使用装饰器实现单例
  • 二、web自动化driver实现单例模式
    • 2.1编写单例模式的装饰器
    • 2.2driver使用装饰器,实现单例模式
    • 2.3获取driver的实例,就是单例了
  • 三、在自动化项目中具体的应用
    • 3.1项目结构
  • 四、工具层Utils
    • 4.1singleton.py是单例装饰器
    • 4.2GetSeleniumDriver.py driver实现单例
  • 五、页面元素层TsetSharelab
  • 六、流程层
  • 七、case层,把业务逻辑组成一条条用例

一、使用装饰器实现单例

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 = 1
 
    def __init__(self, x=0):
        self.x = x
 
 
a1 = 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().driver
 
    def Making_task_Button(self):
        Making_task_Button=self.driver.find_element_by_xpath(RES.Making_task_Button_xpth)
        return Making_task_Button
 
    def 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

4.1singleton.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

4.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 GetSeleniumDriver
 
 
class My_task():
    def __init__(self):
        self.driver=GetSeleniumDriver().driver
 
    def 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_Button
 
    def 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 GetSeleniumDriver
 
import time
 
class BookCity_page_process(object):
    def __init__(self):
        self.driver=GetSeleniumDriver().driver
 
    def 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 GetSeleniumDriver
 
class CreativeBooks(unittest.TestCase):
    @classmethod
    def setUpClass(self):
        self.driver = GetSeleniumDriver().driver
        sleep(2)
    @classmethod
    def tearDownClass(self):
        pass
 
    def setUp(self):
        self.driver = GetSeleniumDriver().driver

到此这篇关于python单例模式之selenium driver实现单例的文章就介绍到这了,更多相关python selenium driver实现单例内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python单例模式的应用场景实例讲解

    1.应用场景 需要频繁创建和销毁的对象: 创建花费太多时间或资源,但经常使用的对象: 工具类对象: 经常访问数据库或文件的对象. 2.实例 如果每个对象中封装了相同的数据,但是需要创建多个对象的时候,而且这两个实例所有的功能是一样的,所以我们就可以使用一个实例完成,在这里我们就可以使用单例模式,如下 class Person: def __init__(self): self.name = '123123' self.age = '20' def f1(self): pass def f2(se

  • Python 设计模式创建型单例模式

    目录 一.单例模式 二.应用场景 三.编码示例 1.单线程中的单例模式 方式一.重载类构造器 方式二.实现单例装饰器 2.多线程中的单例模式 方式三.重载具有线程锁的类构造器 一.单例模式 单例模式,实现一个类,并且保证这个类的多次实例化操作,都会只生成同一个实例对象. 二.应用场景 整个系统中只需要存在一个实例对象,其他对象都可以通过访问该对象来获取信息,比如: 系统的配置信息对象 日志对象 数据库操作对象 线程池对象 三.编码示例 1.单线程中的单例模式 方式一.重载类构造器 定义: cla

  • Python中的单例模式与反射机制详解

    目录 单例模式 反射 hasatter getattr setattr 总结 单例模式 一般情况下,类可以生成任意个实例,而单例模式只生成一个实例 我们先用单例模式设计一个Rectangle类 然后用__new__方法设计单例模式,代码如下 class Rectangle: def __init__(self,length,width): self.length=length self.width=width def __new__(cls, *args, **kwargs):#__new__至

  • Python中selenium_webdriver下拉框操作指南

    目录 环境搭建 Python selenium_webdriver下拉框操作 总结 环境搭建 首先以python3.x为基础来搭建基础环境 1.安装python 基础环境(python的基础环境太简单了在这里就不说啦) 2.安装完成python我们需要安装一下python的基础工具包pip,正常情况一下,安装python的时候会把pip基础包安装,但是也有一些人没有安装. i.下载pip 安装包,记住这里要找什么exe文件,直接用源码安装. ii.解压pip-9.0.1.tar.gz,执行pyt

  • Python实现单例模式的5种方法

    目录 基本介绍 优缺点 Python实现 方式1,元类实现: 方式2,继承实现: 方式3,装饰器实现: 方式4,模块实现: 方式5,@classmethod实现单例模式: 基本介绍 一个对象只允许被一次创建,一个类只能创建一个对象,并且提供一个全局访问点. 单例模式应该是应用最广泛,实现最简单的一种创建型模式. 特点:全局唯一,允许更改 优缺点 优点: 避免对资源的多重占用,如写入文件操作 节省内存 防止命名空间被污染 缺点: 没有接口,不能继承,与单一职责原则冲突,一个类应该只关心内部逻辑,而

  • 详解Python+Selenium+ChromeDriver的配置和问题解决

    安装前的准备 1.python的安装和配置 在Window下:在开始菜单中找到运行输入cmd或直接搜索cmd点击进入,输入python,如果出现下图中的>>>则证明Python安装成功. 检测Chrome的版本号安装Chromedriver 记录版本号: 87.0.4280.88 打开ChromeDirver网址:http://chromedriver.storage.googleapis.com/index.html 选择对应版本号的文件夹并打开 ChromeDriver的环境配置 C

  • python单例模式之selenium driver实现单例

    目录 一.使用装饰器实现单例 二.web自动化driver实现单例模式 2.1编写单例模式的装饰器 2.2driver使用装饰器,实现单例模式 2.3获取driver的实例,就是单例了 三.在自动化项目中具体的应用 3.1项目结构 四.工具层Utils 4.1singleton.py是单例装饰器 4.2GetSeleniumDriver.py driver实现单例 五.页面元素层TsetSharelab 六.流程层 七.case层,把业务逻辑组成一条条用例 一.使用装饰器实现单例 def Sin

  • 浅谈java 单例模式DCL的缺陷及单例的正确写法

    1 前言 单例模式是我们经常使用的一种模式,一般来说很多资料都建议我们写成如下的模式: /** * Created by qiyei2015 on 2017/5/13. */ public class Instance { private String str = ""; private int a = 0; private static Instance ins = null; /** * 构造方法私有化 */ private Instance(){ str = "hell

  • Python爬虫之Selenium中frame/iframe表单嵌套页面

    在Web应用中经常会遇到frame/iframe表单嵌套页面的应用,WebDriver只能在一个页面上对元素识别与定位,对于frame/iframe表单内嵌页面上的元素无法直接定位.这时就需要通过switch_to.frame()方法将当前定位的主体切换为frame/iframe表单的内嵌页面中. 本章中用到的关键方法如下: switch_to.frame():切换为frame/iframe表单的内嵌页面中 switch_to.parent_frame():退出内嵌页面 以ip138网站为例 f

  • Python内置方法和属性应用:反射和单例(推荐)

    1. 前言 python除了丰富的第三方库外,本身也提供了一些内在的方法和底层的一些属性,大家比较常用的如dict.list.set.min.max.range.sorted等.笔者最近在做项目框架时涉及到一些不是很常用的方法和属性,在本文中和大家做下分享. 2. 内置方法和函数介绍 enumerate 如果你需要遍历可迭代的对象,有需要获取它的序号,可以用enumerate, 每一个next返回的是一个tuple list1 = [1, 2, 3, 4] list2 = [4, 3, 2, 1

  • Python 用__new__方法实现单例的操作

    介绍 init 方法通常用在初始化一个类实例时候,但其实它不是实例化一个类的时候第一个被调用 的方法.当使用 Student(id, name) 这样的表达式来实例化一个类时,最先被调用的方法 其实是 new 方法. new方法接受的参数虽然也是和init一样,但init是在类实例创建之后调用,而 new方法正是创建这个类实例的方法. new为对象分配空间,是内置的静态方法,new在内存中为对象分配了空间也返回了对象的引用,init获得了这个引用才初始化这个实例. 示例 一个非常简单的单例 cl

  • Python使用redis pool的一种单例实现方式

    本文实例讲述了Python使用redis pool的一种单例实现方式.分享给大家供大家参考,具体如下: 为适应多个redis实例共享同一个连接池的场景,可以类似于以下单例方式实现: import redis class RedisDBConfig: HOST = '127.0.0.1' PORT = 6379 DBID = 0 def operator_status(func): '''''get operatoration status ''' def gen_status(*args, **

  • Python守护进程和脚本单例运行详解

    本篇文章主要介绍了Python守护进程和脚本单例运行,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 一.简介 守护进程最重要的特性是后台运行:它必须与其运行前的环境隔离开来,这些环境包括未关闭的文件描述符.控制终端.会话和进程组.工作目录以及文件创建掩码等:它可以在系统启动时从启动脚本/etc/rc.d中启动,可以由inetd守护进程启动,也可以有作业规划进程crond启动,还可以由用户终端(通常是shell)执行. Python有时需要保证只运行一个脚本实例,以避

  • 浅谈Spring单例Bean与单例模式的区别

    Spring单例Bean与单例模式的区别在于它们关联的环境不一样,单例模式是指在一个JVM进程中仅有一个实例,而Spring单例是指一个Spring Bean容器(ApplicationContext)中仅有一个实例. 首先看单例模式,在一个JVM进程中(理论上,一个运行的JAVA程序就必定有自己一个独立的JVM)仅有一个实例,于是无论在程序中的何处获取实例,始终都返回同一个对象,以Java内置的Runtime为例(现在枚举是单例模式的最佳实践),无论何时何处获取,下面的判断始终为真: // 基

  • Python 单例设计模式用法实例分析

    本文实例讲述了Python 单例设计模式用法.分享给大家供大家参考,具体如下: demo.py(单例): class MusicPlayer(object): # 类属性 记录对象引用 instance = None def __new__(cls, *args, **kwargs): # 1. 判断类属性是否是空对象 if cls.instance is None: # 2. 调用父类的方法,为第一个对象分配空间 cls.instance = super().__new__(cls) # 3.

  • python 利用文件锁单例执行脚本的方法

    你可能会遇到这样的要求,一个脚本,只允许有一个实例. 在python中,为了实现这个需求,可以引入fcntl模块对文件加一个排他锁,这样一来,先启动的实例拥有了文件锁,而后启动的实例则因无法获取锁而退出 #coding=utf-8 import fcntl, sys, time, os pidfile = 0 def ApplicationInstance(): global pidfile pidfile = open(os.path.realpath(__file__), "r")

随机推荐