在大型项目中,项目中会有不同的功能,根据不同的功能将代码放到不同的文件中,对页面的操作需要使用到
浏览器driver,对于不停的文件中driver来说,driver需要统一,否则会打开多个浏览器实例,比如下面
2个python文件,分别为打开百度和打开bing:
baidu.py
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://www.duoceshi.cn')
bing.py
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://www.duoceshi.cn')
新建一个main.py 引入 baidu.py 和 bing.py 文件
main.py
import baidu
import bing
会发现同时打开两个浏览器,本来是需要同一个浏览器实例。但是由于在每个文件中都创建
一个新的浏览器实例,所以在调用的时候会打开2个浏览器实例。
单例模式:
单例模式(Singleton),也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的
类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统
整体的行为。比如在上面的场景中,多个web操作的页面都需要同一个driver实例。
实现单例模式的思路是:
一个类能返回对象一个引用(永远是同一个)和一个获得该实例的方法(必须是静态方法,通常使用
getInstance这个名 称);当我们调用这个方法时,如果类持有的引用不为空就返回这个引用,如
果类保持的引用为空就创建该类的实例并将实例的引用赋予该类保持的引用;同时我们 还将该类的构
造函数定义为私有方法,这样其他处的代码就无法通过调用该类的构造函数来实例化该类的对象,只
有通过该类提供的静态方法来得到该类的唯一实例。
singledriver.py
from selenium import webdriver
from selenium.webdriver.chrome.webdriver import WebDriver
class DriverInstance:
__instance = None
@classmethod
def create_driver(cls) -> WebDriver:
if not cls.__instance:
cls.__instance = webdriver.Chrome()
return cls.__instance
需要用到driver的时候只需要从singledriver文件中实例化即可。
baidu.py
from singledriver import SingleDriver
driver = SingleDriver.getInstance()
driver.get('http://www.duoceshi.cn')
bing.py
from singledriver import SingleDriver
driver = SingleDriver.getInstance()
driver.get('http://www.duoceshi.cn')
main.py
import baidu
import bing
再次执行 main.py 文件,会发现在同一个浏览器中执行。