• 欢迎光临~

Selenium55-参数化优化方案

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

参数化改进策略

  • 把有效和无效的测试数据合并到一个测试方法里实现。
    • 数据合并:容易
    • 方法体合并:难度大
      Selenium55-参数化优化方案

数据合并

  • 有效:一个参数,改为两个参数
@pytest.mark.parametrize("division_name",["A","啊","1","#","我的测试赛区北京赛区上海赛区和广州赛区","123456789测试赛区ABCabc%"])

无效:两个参数,不用修改

@pytest.mark.parametrize("division_name,message",
                             [["","不能为空"],
                              ["123456789测试赛区ABCabc%1","长度超过20"],
                              ["123456789测试赛区ABCabc%1234567890","长度超过20"],
                              ["东南赛区","赛区名称不能重复"]])

方法体合并-检查条件分析

  • 如何区分有效和无效测试数据,进行对应的检查
    Selenium55-参数化优化方案

方法体合并-有效和无效数据测试流程

  • 有效和无效处理流程:
    • 有效数据测试:
      Selenium55-参数化优化方案
    • 无效数据测试:
      Selenium55-参数化优化方案

第三版第二子版本

  • test_后台_双创_基础设置_赛区管理_添加赛区_case_v3_2.py
  • 数据合并:
@pytest.mark.parametrize("division_name,message",
                             [["A","赛区信息保存成功"],
                              ["啊", "赛区信息保存成功"],
                              ["1", "赛区信息保存成功"],
                              ["#", "赛区信息保存成功"],
    ["我的测试赛区北京赛区上海赛区和广州赛区", "赛区信息保存成功"],
                              ["123456789测试赛区ABCabc%", "赛区信息保存成功"],
                              ["","不能为空"],
                              ["123456789测试赛区ABCabc%1","长度超过20"],
                              ["123456789测试赛区ABCabc%1234567890","长度超过20"],
                              ["东南赛区","赛区名称不能重复"]])

测试方法合并

def test_add_division(self,division_name,message):
    self.login_to_add_division_page()
    driver = self.driver
    if message=="赛区信息保存成功": # 有效
        driver.find_element(By.ID,"_easyui_textbox_input1").clear()
        driver.find_element(By.ID,"_easyui_textbox_input1").send_keys(division_name)
        driver.find_element(By.XPATH,"//span[text()='查询']").click()#查询
        sleep(2)
    # 有效数据查询并删除
    if self.is_element_present(By.XPATH,f"//td[@field='name']/div[text()='{division_name}']"):
                d=driver.find_element(By.XPATH,f"//td[div='{division_name}']/../td[@field='view']/div/a[2]")
                d.click()#删除
                driver.find_element(By.XPATH,"//span[text()='确定']").click()
                sleep(3)
    # 输入赛区名称
            driver.find_element(By.XPATH,"//span[text()='添加赛区']").click()
    WebDriverWait(driver,20).until_not(expected_conditions.presence_of_element_located((By.ID,"Loading")))
  WebDriverWait(driver,13).until(expected_conditions.frame_to_be_available_and_switch_to_it("frmDlg"))
        name_input=driver.find_element(By.ID,"_easyui_textbox_input1")
    # 检查浮动提示
    if message=="不能为空":
      ActionChains(driver).move_to_element(name_input).perform()  # 鼠标悬停在赛区名称文本框
      tooltip = driver.find_element(By.CLASS_NAME, "tooltip").text
      assert tooltip == "该输入项为必输项"  # 检查出现浮动提示“该输入项为必输项”
    # 滚动到底部
      name_input.clear()
      name_input.send_keys(division_name)              
      driver.switch_to.default_content()
      js = 'window.scrollTo(0, document.body.scrollHeight);'
      driver.execute_script(js)# 滚动条滑动到底部
          WebDriverWait(driver,20).until(expected_conditions.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@data-itemid='213']")))
  WebDriverWait(driver,13).until(expected_conditions.frame_to_be_available_and_switch_to_it("frmDlg"))
        sleep(2)
        submit_button=driver.find_element(By.ID,"pButton_ctlSave")
        submit_button.click()#提交
        sleep(1)
    # 检查提示信息
        driver.switch_to.parent_frame()
        xpath1="//div[text()='赛区信息保存成功']" if message == "赛区信息保存成功" else f"//td[text()='{message}']"
        assert self.is_element_present(By.XPATH,xpath1)
        WebDriverWait(driver,20).until_not(expected_conditions.presence_of_element_located((By.XPATH,xpath1)))
    # 无效数据时取消
        if message!="赛区信息保存成功":
            WebDriverWait(driver, 13).until(expected_conditions.frame_to_be_available_and_switch_to_it("frmDlg"))
            driver.find_element(By.ID,"pButton_ctlCancel").click()#取消
    # 等待消失滑动到顶部
        driver.switch_to.default_content()
        js2="window.scrollTo(document.body.scrollHeight, 0);"
        driver.execute_script(js2)# 滚动条滑动到顶部
        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")))
    # 有效时查询赛区
        if message == "赛区信息保存成功": #有效
            driver.find_element(By.ID,"_easyui_textbox_input1").clear()
            driver.find_element(By.ID,"_easyui_textbox_input1").send_keys(division_name)
            driver.find_element(By.XPATH,"//span[text()='查询']").click()#查询
            sleep(2)
    # 检查存在后退出
            assert self.is_element_present(By.XPATH,f"//td[@field='name']/div[text()='{division_name}']")
        self.exit_and_close_browser()

运行调试脚本

  • 运行后,查看结果
    Selenium55-参数化优化方案
程序员灯塔
转载请注明原文链接:Selenium55-参数化优化方案
喜欢 (0)