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 ...
随机推荐
- CF226E Noble Knight's Path/bzoj4704 旅行
题目描述: bz luogu 题解: 主席树维护大力树剖. 一条路径上不允许过的点的个数是当前袭击数-$y$时袭击数, 所以允许经过的点的个数是总数-当前袭击数+$y$时袭击数. 用主席树去维护每个时 ...
- C++ 关于map,function的简单应用
map<string,function<int(int, int)>> funs = { {"+", add}, {&qu ...
- 前端工程化 Webpack基础
前端工程化 模块化 (js模块化,css模块化,其他资源模块化) 组件化 (复用现有的UI结构.样式.行为) 规范化 (目录结构的划分.编码规范化.接口规范化.文档规范化.Git分支管理) 自动化 ( ...
- Linux下使用压力测试工具stress
一:stress的安装 首先解压安装包到/usr/local/src/下 mv stress-1.0.4.tar.gz /usr/local/srctar -zxf stress-1.0.4.tar ...
- java 打包部署(一) windows
- 解释WEB 模块?
Spring的WEB模块是构建在application context 模块基础之上,提供一个适合web应用的上下文.这个模块也包括支持多种面向web的任务,如透明地处理多个文件上传请求和程序级请求参 ...
- Spring MVC的异常处理 ?
可以将异常抛给Spring框架,由Spring框架来处理:我们只需要配置简单的异常处理器,在异常处理器中添视图页面即可.
- awk 详解?
awk '{pattern + action}' {filenames} #cat /etc/passwd |awk -F ':' '{print 1"\t"7}' //-F 的意 ...
- 为什么 wait()方法和 notify()/notifyAll()方法要在同步块 中被调用 ?
这是 JDK 强制的,wait()方法和 notify()/notifyAll()方法在调用前都必须先获得对 象的锁
- 在java web工程中jsp页面中使用kindeditor
在这之前我们用Notepad++写过kindeditor 在Java web工程里也差不多 首先我们复制之前的thml代码粘贴到工程里 然后把样式也复制进去 然后就可以运行了