首页 > 其他分享 >Selenium58-优化fixture

Selenium58-优化fixture

时间:2022-12-31 01:44:42浏览次数:55  
标签:division fixture driver yield element Selenium58 优化 find

v4_1问题

  • 代码运行效率较低:
    • prepare_and_exit包含所有前置和后置步骤,每组测试数据都从重新启动浏览器开始到关闭浏览器结束。。
  • 思考:
    • 是否可以省略每组数据测试时的重新启动浏览器、重新登录、以及最后的退出登录和关闭浏览器步骤?

拆分fixture

  • 拆分为三个fixture,区分作用域

多个fixture调用关系图

  • 三个fixture和测试方法的调用关系

第四版第二子版本

  • test_后台_双创_基础设置_赛区管理_添加赛区_case_v4_2.py

prepare_and_exit

  • yield前启动浏览器,yield后是关闭浏览器退出驱动程序
@pytest.fixture(scope='session')
def prepare_and_exit():
    driver = webdriver.Firefox()
    driver.implicitly_wait(15)
    driver.get("http://192.168.58.134:8080/integration/manage")
    yield driver
    sleep(2)
    driver.quit()

login_and_logout

  • yield前登录,yield后退出操作
@pytest.fixture(scope='class')
def login_and_logout(prepare_and_exit):
    driver = prepare_and_exit
    sleep(2)
    driver.find_element(By.ID, "userName").clear()
    driver.find_element(By.ID, "userName").send_keys("root")
    driver.find_element(By.ID, "password").clear()
    driver.find_element(By.ID, "password").send_keys("12345678")
    driver.find_element(By.XPATH, "//span[text()='登录']").click()
    sleep(1)
    yield driver
    driver.switch_to.default_content()
    driver.find_element(By.CLASS_NAME, "退出").click()

to_division_manager

  • yield前进入赛区管理、yield回到主网页
@pytest.fixture(scope='class', autouse=True)
def to_division_manager(login_and_logout):
    driver = login_and_logout
    driver.find_element(By.ID, "213").click()  # 基础设置
    WebDriverWait(driver, 20).until(
        expected_conditions.presence_of_element_located((By.XPATH, "//div[@id='213']/img[@class='open']")))
    driver.find_element(By.ID, "214").click()  # 赛区管理
    WebDriverWait(driver, 20).until(
        expected_conditions.frame_to_be_available_and_switch_to_it((By.XPATH, "//iframe[@data-itemid='213']")))
    WebDriverWait(driver, 20).until_not(expected_conditions.presence_of_element_located((By.ID, "Loading")))
    yield driver
    driver.switch_to.default_content()

测试用例实现脚本

  • 测试用例实现的测试方法引用to_division_manager
def test_add_division(self,to_division_manager,division_name,message):
        driver = to_division_manager
        ……

改造判断元素出现的方法

  • 因为driver不是当前类的属性了,所以需要传入driver参数
    # 判断元素是否出现
    def is_element_present(self,driver,how,what):
        try:
            driver.find_element(how,what)
        except NoSuchElementException:
            return False
        return True

运行调试第四版第二子版本

  • 运行,查看结果

标签:division,fixture,driver,yield,element,Selenium58,优化,find
From: https://www.cnblogs.com/sean-test/p/17016160.html

相关文章

  • Selenium57-使用fixture
    第四版使用fixturetest_后台_双创_基础设置_赛区管理_添加赛区_case_v4_1.py使用fixture来做前置和后置处理。使用yield来分隔前置后后置处理步骤。定义prepare_......
  • Selenium55-参数化优化方案
    参数化改进策略把有效和无效的测试数据合并到一个测试方法里实现。数据合并:容易方法体合并:难度大数据合并有效:一个参数,改为两个参数@pytest.mark.parametriz......
  • TZOJ 5782: 亲戚/6310: 亲戚2 并查集/路径压缩/优化
    先来看看代码清单:(1)初始化for(inti=1;i<=n;i++)f[i]=i;//初始化每个的爹是自己因为每个元素属于单独的一个集合,所以每个元素以自己作为结点(2)寻找根结点编号并压......
  • 【题解】P3515 [POI2011]Lightning Conductor(二分栈/分治优化DP)
    [POI2011]LightningConductor题面翻译给定一个长度为\(n\)的序列\(\{a_n\}\),对于每个\(i\in[1,n]\),求出一个最小的非负整数\(p\),使得\(\forallj\in[1,n]\),都......
  • MySQL优化二,索引的设计
    前言:索引相当于一本书的目录,因为索引的存在才更好的查询到想要的数据##1.2.MySQL中的索引InnoDB存储引擎支持以下几种常见的索引:B+树索引、全文索引、哈希索引,其中比较......
  • tcp 拥塞控制优化网址
    TCP拥塞控制优化:https://plantegg.github.io/2019/06/21/%E5%B0%B1%E6%98%AF%E8%A6%81%E4%BD%A0%E6%87%82TCP--%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%E5%A4%A7%E5%85%A8/......
  • 基于局部直方图相关算法的近似优化和提速。
    基于局部直方图的算法有很多很多,我们已经研究这类算法有以下一些:1、中值滤波2、表面模糊3、选择性模糊4、中值锐化5、图像局部熵   ......
  • 【CF1481F】AB Tree(单调队列优化多重背包)
    容易看出答案下界是树的最大深度,且构造方法只能是每一层的节点都染成同种颜色,可行性的判断是个背包问题。然后发现若不可行,就把除最后一层外的其它层每层都染成同种颜色,然......
  • Pandas处理大数据的性能优化技巧
    Pandas是Python中最著名的数据分析工具。在处理数据集时,每个人都会使用到它。但是随着数据大小的增加,执行某些操作的某些方法会比其他方法花费更长的时间。所以了解和使用......
  • MySQL数据库优化的八种方式(经典必看)MySQL数据库优化的八种方式(经典必看)
    MySQL数据库优化的八种方式(经典必看) MySQL/Oracle数据库优化总结(非常全面)置顶2017年08月21日21:05:30阅读数:8442MySQL数据库优化的八种方式(经典必看)引言: ​​关于......