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(即只打开一个浏览器窗口)的更多相关文章

  1. selenium只打开一个浏览器窗口

    from selenium.webdriver import Remote from selenium.webdriver.chrome import options from selenium.co ...

  2. 解决Selenium Webdriver执行测试时,每个测试方法都打开一个浏览器窗口的问题

    虽然把WebDriver定义为一个静态变量了,但是每次执行测试都要打开多个窗口,挺浪费时间的. 找了很多中方法,比如使用setUpClass, BeforeSuite都没有完全解决问题.后来无意间发现 ...

  3. Python+Selenium自动化-定位页面元素的八种方法

    Python+Selenium自动化-定位页面元素的八种方法   本篇文字主要学习selenium定位页面元素的集中方法,以百度首页为例子. 0.元素定位方法主要有: id定位:find_elemen ...

  4. Python+Selenium自动化-获取页面信息

    Python+Selenium自动化-获取页面信息   1.获取页面title title:获取当前页面的标题显示的字段 from selenium import webdriver import t ...

  5. 利用 Python + Selenium 实现对页面的指定元素截图(可截长图元素)

    对WebElement截图 WebDriver.Chrome自带的方法只能对当前窗口截屏,且不能指定特定元素.若是需要截取特定元素或是窗口超过了一屏,就只能另辟蹊径了. WebDriver.Phant ...

  6. Python Webdriver 重新使用已经打开的浏览器实例

    因为Webdriver每次实例化都会新开一个全新的浏览器会话,在有些情况下需要复用之前打开未关闭的会话.比如爬虫,希望结束脚本时,让浏览器处于空闲状态.当脚本重新运行时,它将继续使用这个会话工作.还就 ...

  7. Python+Selenium学习--定位一组对象

    场景 从上一节的例子中可以看出,webdriver可以很方便的使用find_element方法来定位某个特定的对象,不过有时候我们却需要定位一组对象,这时候就需要使用find_elements方法. ...

  8. Python + Selenium 实现对页面的指定元素截图(可截长图元素)【转载】

    先在首页上执行一段 JavaScript 脚本,将页面的滚动条拖到最下方,然后再拖回顶部,最后才截图.这样可以解决那种按需加载图片的情况 以下代码为转载别处博客改造后的,有chrome和ff两种浏览器 ...

  9. python(六):面型对象--类的特殊方法

    一.跟实例创建和执行有关的 __new__.__init__.__call__. 类加括号调用了__init__方法来创建一个实例对象.这一过程分成了两步: 类调用__new__来创建实例对象,__n ...

随机推荐

  1. [应用软件] VMware Workstation 12.0.0 Pro 正式版下载【附注册机+注册码】

    软件信息 软件名称: VMware Workstation 软件版本: 12 软件大小: 300 MB 软件语言: 简体中文 更新时间: - 软件授权: 免费 软件类别: 安装版 运行环境: WinX ...

  2. S120的基本定位功能

    转自:https://support.industry.siemens.com/cs/document/84136148/s120%E7%9A%84%E5%9F%BA%E6%9C%AC%E5%AE%9 ...

  3. LINUX系统、磁盘与进程的相关命令

    ps ef:完整显示当前系统中所有运行的进程 kill 停止或杀死进程.9表示强制杀掉进程或任务 df 显示磁盘空间使用情况 du 用于显示指定目录下的文件以及子目录所占磁盘空间的大小. 与磁盘有关的 ...

  4. kafka producer如何优化打入速度?

    增加线程 提高 batch.size 增加更多 producer 实例 增加 partition 数 设置 acks=-1 时,如果延迟增大:可以增大 num.replica.fetchers(fol ...

  5. 面试问题之C++语言:多态

    什么是多态? 概念:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性.简单的说,就是用基类的引用指向子类的对象. 为什么要用多态呢? 原因:封装可以隐藏实现细节,使得代码模 ...

  6. Shiro快速使用

    INI的文件的介绍:https://baike.baidu.com/item/ini%E6%96%87%E4%BB%B6/9718973?fr=aladdin Shiro的INI配置文件:http:/ ...

  7. 您对 Mike Cohn 的测试金字塔了解多少?

    Mike Cohn 提供了一个名为 Test Pyramid 的模型.这描述了软件开发所需的自 动化测试类型. 根据金字塔,第一层的测试数量应该最高.在服务层,测试次数应小于单元测试 级别,但应大于端 ...

  8. 学习k8s(一)

    一.安装及介绍 1.k8s架构 2.核心组件 3.其他组件 4.安装方式 yum安装: 1.5 最简单,版本低,适合学习 二进制安装: 最繁琐,可以用saltstack安装 kubeadm安装: 谷歌 ...

  9. centos简单命令备忘

    1.查看当前目录 [root@instance-aif30iaj bin]# df -h 2.查看指定目录 在命令后直接放目录名,比如查看"usr"目录使用情况: [root@in ...

  10. DateFormat类,利用SimpleDateFormat解决系统时间初始(格式化/解析)问题

    目标: java.text.DateFormat 是日期/时间格式化子类的抽象类,我们通过这个类可以帮我们完成日期和文本之间的转换,也就是可以在Date对象与String对象之间进行来回转换. 格式化 ...