Page Objects实战

1、页面对象设计模式的优点为:

(1)创建可以跨多个测试用例共享的代码;

(2)减少重复代码的数量

(3)如果用户界面发生变更后,只需要在一个地方维护就可以了。

2、创建uiframe工程

  base:基础类
  config:配置文件
  data:存储测试数据的
  image:存储图片文件的
  log:存储日志文件
  page:对象层
  report:存储测试报告
  test:测试模块
  utils:工具类
  run.py:程序执行的入口

3、下载文件 下载地址:https://github.com/tungwaiyip/HTMLTestRunner

   将文件放到Python解释器下 在测试后即可生成测试报告

Page Objects实战

 

 4、pathUtils.py

import os

def base_dir():
    return os.path.dirname(os.path.dirname(__file__))

# """获取当前工程的路径"""

5、main.py   

  工具类执行测试套件(文件test里面所有,套件增加,测试报告覆盖式)

import unittest
import HTMLTestRunner
# 库专门生产测试报告
from utils.pathUtils import base_dir
import os

def suites():
    """获取被执行的测试套件"""
    suite=unittest.TestLoader().discover(
        # start_dir=‘D:\\code\\uiframe\\test‘,
        start_dir=os.path.join(base_dir(),test),
        pattern=test_*.py,
        top_level_dir=None
    )
    return suite

def run():
    """执行测试套件"""
    fp=open(os.path.join(base_dir(),report,report.html),wb)
    runner=HTMLTestRunner.HTMLTestRunner(
        stream=fp,
        title=QQ邮箱测试报告,
        description=QQ邮箱测试报告详细信息
    )
    runner.run(suites())
if __name__ == __main__:
    run()

  工具类执行测试套件(文件test里面所有,套件增加,增加当前时间时,测试报告不覆盖式,生成新的测试报告)

import unittest
import HTMLTestRunner
# 库专门生产测试报告
from utils.pathUtils import base_dir
import os
import time

def suites():
    """获取被执行的测试套件"""
    suite=unittest.TestLoader().discover(
        # start_dir=‘D:\\code\\uiframe\\test‘,
        start_dir=os.path.join(base_dir(),test),
        pattern=test_*.py,
        top_level_dir=None
    )
    return suite

def nowTime():
    return time.strftime(%y_%m_%d_%H_%M_%S,time.localtime())
def run():
    """执行测试套件"""
    fp=open(os.path.join(base_dir(),report,nowTime()+report.html),wb)
    runner=HTMLTestRunner.HTMLTestRunner(
        stream=fp,
        title=QQ邮箱测试报告,
        description=QQ邮箱测试报告详细信息
    )
    runner.run(suites())
if __name__ == __main__:
    run()

6、测试代码的分离·

(1)base.py

from selenium.webdriver.common.by import By
from selenium.webdriver.support.expected_conditions import NoSuchFrameException
from selenium.webdriver.support.wait import WebDriverWait
from selenium import webdriver

class WebDriver:
    def __str__(self):
        return driver
    def findElement(self,*loc):
        # *loc 元素的定位方式和属性
        return self.driver.find_element(*loc)
    def findElements(self, *loc):
        return self.driver.find_element(*loc)

    def findFrame(self, frameID):
        return self.driver.switch_to.frame(frameID)

(2)login.py

from selenium.webdriver.common.by import By
from base.base import WebDriver
import time as t

class Login(WebDriver):
    login_loc=(By.ID,select_all)
    frameID=login_frame1

    def isSelected(self):
        ‘‘‘验证是否勾选‘‘‘
        return self.findElement(*self.login_loc).is_selected()
    def clickAllSelect(self):
        ‘‘‘点击全选‘‘‘
        return self.findElements(*self.login_loc).click()

    def logFrame(self):
        ‘‘‘进入到login页面的iframe框架‘‘‘
        self.findFrame(frameID=self.frameID)

(3)test.py

import  unittest
from selenium import  webdriver
import  time as t
from page.login import Login

class QQTest(unittest.TestCase,Login):

    def setUp(self) -> None:
        self.driver=webdriver.Chrome()
        self.driver.maximize_window()
        self.driver.get(https://file.qq.com/)
        self.driver.implicitly_wait(30)

    def tearDown(self) -> None:
        self.driver.quit()

    def test_file_qq_001(self):
        self.loginFrame()
        self.assertEqual(self.isSelected(),True)

if __name__ == __main__:
    unittest.main(verbosity=2)

 

Page Objects实战

上一篇:Ant Design Vue 2.x 递归Menu


下一篇:Jenkins定时任务管理harbor镜像仓库项目