python 重新使用一个Webdriver的解决方法
2021/11/24 11:09:50
本文主要是介绍python 重新使用一个Webdriver的解决方法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、背景
在UI自动化项目设定中,不同场景采用的是不同文件来进行执行的,在不同文件中会引用启动浏览器的类(webdriver 每次实例化都会重新启动一次浏览器)这样的话就会出现你执行几个场景 启动几个浏览器,本来想要的在一个浏览器上执行不同场景的功能就实现不出来。
经过查询得知
通过webdriver启动一个浏览器会话大概会有这样三个阶段:
1、启动的浏览器驱动代理(hromedriver,Firefox的驱动程序,等等);
2、创建一个命令执行器。用来向代理发送操作命令;
3、使用代理建立一个新的浏览器会话,该代理将与浏览器进行通信。用sessionId来标识会话
二、解决办法
#webdriver 实例化类 from selenium import webdriver import yaml class DriverUtil(): def __init__(self): self.driver = webdriver.Chrome() def start(self): #记录sessionID 和 url executor_url = self.driver.command_executor._url session_id = self.driver.session_id with open(conf) as f: data = yaml.safe_load(f) data['executor_url'] = executor_url data['session_id'] = session_id #保存至配置文件中 with open(conf, 'w') as f: yaml.safe_dump(data, f, default_flow_style=False) self.driver.get('https://guide-oa-test.feihe.com/') self.driver.implicitly_wait(15) self.driver.maximize_window() return self.driver # if __name__ == '__main__': DriverUtil().start()
#重写start_session 方法类 from selenium.webdriver import Remote from selenium.webdriver.chrome import options from selenium.common.exceptions import InvalidArgumentException class ReuseChrome(Remote): def __init__(self, command_executor, session_id): self.r_session_id = session_id Remote.__init__(self, command_executor=command_executor, desired_capabilities={}) def start_session(self, capabilities, browser_profile=None): """ 重写start_session方法 """ if not isinstance(capabilities, dict): raise InvalidArgumentException("Capabilities must be a dictionary") if browser_profile: if "moz:firefoxOptions" in capabilities: capabilities["moz:firefoxOptions"]["profile"] = browser_profile.encoded else: capabilities.update({'firefox_profile': browser_profile.encoded}) self.capabilities = options.Options().to_capabilities() self.session_id = self.r_session_id self.w3c = False
###执行不同自动化场景的文件 from venv.ReussChrome import ReuseChrome import yaml class SearchTest(unittest.TestCase): @classmethod def setUpClass(cls): #读取配置文件中的url和session_id with open(conf) as f: data = yaml.safe_load(f) #进行链接上一个会话 cls.driver = ReuseChrome(command_executor=data['executor_url'], session_id=data['session_id'])
这篇关于python 重新使用一个Webdriver的解决方法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器
- 2024-11-16四种数据科学Web界面框架快速对比:Rio、Reflex、Streamlit和Plotly Dash
- 2024-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门
- 2024-11-14Python编程入门指南
- 2024-11-13Python基础教程
- 2024-11-12Python编程基础指南
- 2024-11-12Python基础编程教程
- 2024-11-08Python编程基础与实践示例