python selenium 多个页面对象类使用同一个webdriver(即只打开一个浏览器窗口)
1 class BasePage():
2 """selenium基类"""
3
4 def __init__(self, driver=None):
5 self.log = Log().logger
6 self.report = cm.allure_json
7 self.broswer = CONF.web_broswer or 'firefox'
8 self.base_url = CONF.web_url
9 self.timeout = 6
10 if driver is None:
11 self.set_driver(self.broswer)
12 else:
13 self.driver = driver
14 self.wait = WebDriverWait(self.driver, self.timeout)
15 self.action_chain = ActionChains(self.driver)
16
17 def set_driver(self, driver):
18 if 'chrome' == driver.lower().strip():
19 options = chrome_op()
20 options.add_argument("--ignore-certificate-errors")
21 self.driver = webdriver.Chrome(os.path.join(cm.DRIVER_PATH, 'chromedriver'),
22 chrome_options=options)
23 elif 'firefox' == driver.lower().strip():
24 binary_file = CONF.firefox_binary or '/usr/bin/firefox-esr'
25 executable_path = os.path.join(cm.DRIVER_PATH, 'geckodriver')
26 options = firefox_op()
27 options.binary = FirefoxBinary(binary_file)
28 service = Service(executable_path=executable_path)
29 my_profile = webdriver.FirefoxProfile()
30 my_profile.accept_untrusted_certs = True
31 self.driver = webdriver.Firefox(firefox_profile=my_profile, options=options,
32 service=service)
33 else:
34 raise Exception('暂不支持%s浏览器驱动' % driver)
35 self.wait = WebDriverWait(self.driver, self.timeout)
36 self.action_chain = ActionChains(self.driver)
10~15行代码,当实例化对象时,如果driver参数为None(默认),则调用set_driver方法设置webdriver,否则设置对象的driver属性为传入的driver参数。
使用方法如下:
class Test260161_ECS():
def setup(self) -> None:
self.ecs_manager_page = ecs_manager_page def teardown(self) -> None:
if getattr(self, 'ecs_name', False):
self.ecs_manager_page.search_ecs('名称', self.ecs_name)
result = self.ecs_manager_page.check_ecs_table_iszero()
if result == False:
self.ecs_manager_page.clear_ecs('名称', self.ecs_name)
bin_manager_page = BINManagerPage(driver=self.ecs_manager_page.driver)
bin_manager_page.clear_bin(self.ecs_name)
在ecs_manager_page作为主测对象,bin_manager_page作为辅测对象,主测对象ecs_manager_page实例化话,不传driver参数;而辅测对象bin_manager_page实例化时,driver参数传入ecs_manager_page.driver属性。从而可以达到多个页面对象类使用同一个driver,
执行测试用例时,只会打开一个web窗口。
python selenium 多个页面对象类使用同一个webdriver(即只打开一个浏览器窗口)的更多相关文章
- selenium只打开一个浏览器窗口
from selenium.webdriver import Remote from selenium.webdriver.chrome import options from selenium.co ...
- 解决Selenium Webdriver执行测试时,每个测试方法都打开一个浏览器窗口的问题
虽然把WebDriver定义为一个静态变量了,但是每次执行测试都要打开多个窗口,挺浪费时间的. 找了很多中方法,比如使用setUpClass, BeforeSuite都没有完全解决问题.后来无意间发现 ...
- Python+Selenium自动化-定位页面元素的八种方法
Python+Selenium自动化-定位页面元素的八种方法 本篇文字主要学习selenium定位页面元素的集中方法,以百度首页为例子. 0.元素定位方法主要有: id定位:find_elemen ...
- Python+Selenium自动化-获取页面信息
Python+Selenium自动化-获取页面信息 1.获取页面title title:获取当前页面的标题显示的字段 from selenium import webdriver import t ...
- 利用 Python + Selenium 实现对页面的指定元素截图(可截长图元素)
对WebElement截图 WebDriver.Chrome自带的方法只能对当前窗口截屏,且不能指定特定元素.若是需要截取特定元素或是窗口超过了一屏,就只能另辟蹊径了. WebDriver.Phant ...
- Python Webdriver 重新使用已经打开的浏览器实例
因为Webdriver每次实例化都会新开一个全新的浏览器会话,在有些情况下需要复用之前打开未关闭的会话.比如爬虫,希望结束脚本时,让浏览器处于空闲状态.当脚本重新运行时,它将继续使用这个会话工作.还就 ...
- Python+Selenium学习--定位一组对象
场景 从上一节的例子中可以看出,webdriver可以很方便的使用find_element方法来定位某个特定的对象,不过有时候我们却需要定位一组对象,这时候就需要使用find_elements方法. ...
- Python + Selenium 实现对页面的指定元素截图(可截长图元素)【转载】
先在首页上执行一段 JavaScript 脚本,将页面的滚动条拖到最下方,然后再拖回顶部,最后才截图.这样可以解决那种按需加载图片的情况 以下代码为转载别处博客改造后的,有chrome和ff两种浏览器 ...
- python(六):面型对象--类的特殊方法
一.跟实例创建和执行有关的 __new__.__init__.__call__. 类加括号调用了__init__方法来创建一个实例对象.这一过程分成了两步: 类调用__new__来创建实例对象,__n ...
随机推荐
- Redis系统学习
准备写一些关于Redis学习的文章的,发现网上有N多资料有人已经做了总结.查看这些Redis资料,按次序浏览这些Redis资料,相信想学习Redis的同学会很快熟悉: 1.Redis学习手册(目录) ...
- chrome删除保存的密码
chrome删除保存的密码 关于谷歌密码管理器 该管理器是将我们的密码管理在google的账号中,当然,谷歌是说用了加密技术保存的,不会存储明文. https://passwords.google.c ...
- Xml 映射文件中,除了常见的 select|insert|updae|delete 标签之外,还有哪些标签?
<resultMap>.<parameterMap>.<sql>.<include>. <selectKey>,加上动态 sql 的 9 个 ...
- 使用redis作为django缓存数据库
1.Redis的Windows版本.打开https://github.com/MSOpenTech/redis/releases下载msi安装包.该版本是64位.安装msi过程中,有个选项是否加入系统 ...
- Springboot 抛出Failed to determine a suitable driver class异常原因
SpringBoot项目,已经依赖了MySQL驱动,却还是无法启动,通过问题排除,如果是启动项目,那么pom值 <packaging>pom</packaging> Faile ...
- 区分构造函数注入和 setter 注入?
构造函数注入 setter 注入 没有部分注入 有部分注入 不会覆盖 setter 属性 会覆盖 setter 属性 任意修改都会创建一个新实例 任意修改不会创建一个新实例 适用于设置很多属性 适用于 ...
- 好用开源的C#快速开发平台
NFine 是基于 C# 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速.代码量少.学习简单.功能强大.轻量级.易扩展,让Web开发更迅速.简单.NFine是一套基于 ASP.NET ...
- A小程序与B小程序相互跳转的一点记录
要点速览: A小程序和B小程序关联同一个公众号 B程序的用户授权 A小程序和B小程序的用户关联 诸葛 io 统计用户访问信息 需求:微信放开小程序互跳的 API 后,一些导流和拉新等活动可以在新的小程 ...
- 在linux环境下安装VMtools(成功)
想在主机和虚拟机之间互相复制文件吗? 想更加方便的联系主机和虚拟机吗? 就安装VMtools吧 其实,在linux下安装VMtools 是非常的简单,只要简单地几步就行了! 第一步:打开虚拟机,在左 ...
- 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
概述 最近,有客户向我们请求开发一个前端下拉控件,需求是显示了一个列表,其中包含可由用户单独选择的项目控件,该控件将在下拉列表中显示多选TreeView(树形图). 如今WijmoJS已经实现了该控件 ...