• 欢迎光临~

Selenium58-优化fixture

开发技术 开发技术 2022-12-30 次浏览

v4_1问题

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

拆分fixture

  • 拆分为三个fixture,区分作用域
    Selenium58-优化fixture

多个fixture调用关系图

  • 三个fixture和测试方法的调用关系
    Selenium58-优化fixture

第四版第二子版本

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

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

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

  • 运行,查看结果
    Selenium58-优化fixture
程序员灯塔
转载请注明原文链接:Selenium58-优化fixture
喜欢 (0)