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 ...
随机推荐
- 数据库篇:mysql锁详解
前言 sql事务的执行,如果需要锁定数据进行更新操作,则必定离不开锁 共享锁和排他锁 表锁 行锁 Record Lock 间隙锁 Gap Lock 行锁+间隙锁 Next-Key Lock 加锁场景( ...
- Linux 下通过ping判断机器有没有外网。(不用root)
背景: 想实现一个判断当前系统有没有外网的方法,想到了两种思路: 1)实现一个ICMP协议.但是这个需要root权限才能运行.可以参考:https://www.cnblogs.com/xcywt/p/ ...
- react单向数据流怎么理解?
React是单向数据流,数据主要从父节点传递到子节点(通过props).如果顶层(父级)的某个props改变了,React会重渲染所有的子节点.
- vue-router的原理,例如hashhistory和History interface?
vue-router用法:在router.js或者某一个路由分发页面配置path, name, component对应关系 每个按钮一个value, 在watch功能中使用this.$router.p ...
- 什么是openssl?
在计算机网络上,OpenSSL是一个开放源代码的软件库包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连接者的身份.这个包广泛被应用在互联网的网页服务器上.
- volatile 能使得一个非原子操作变成原子操作吗?
一个典型的例子是在类中有一个 long 类型的成员变量.如果你知道该成员变量 会被多个线程访问,如计数器.价格等,你最好是将其设置为 volatile.为什么? 因为 Java 中读取 long 类型 ...
- springboot 指定启动环境
java -jar dbmaster.jar --spring.profiles.active=test
- C++ - C语言中数组的另一种常用写法(数组大小可变!!!)
在 C 和 C++ 中,数组在声明过程中,数组名称为 const 指针,不许修改.且数组的大小在声明时被写死,非常不方便. C语言中常用下面代码替代指针. #include <stdio.h&g ...
- 比较数字范围:判断number存在(minRange ~ maxRange)范围中
一.使用场景 当需要比较范围时 如: 这种情况,如果要写三个表达式会很长,这时候就可以用这个工具类进行比较 number:用户输入(长,宽,高) minRange: 0.0 maxRange:33 二 ...
- 设置IE的自动导包器
一丶打开IE设置: 快捷键:Ctrl+Alt+S 二丶将Add unambiguous imports on the fly 选中即可: 三丶设置好后别忘了"OK":