python单例模式之selenium driver实现单例
时间:2022-07-26 10:03:09|栏目:Python代码|点击: 次
一、使用装饰器实现单例
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