1、页面对象设计模式的优点为:
(1)创建可以跨多个测试用例共享的代码;
(2)减少重复代码的数量
(3)如果用户界面发生变更后,只需要在一个地方维护就可以了。
2、创建uiframe工程
base:基础类
config:配置文件
data:存储测试数据的
image:存储图片文件的
log:存储日志文件
page:对象层
report:存储测试报告
test:测试模块
utils:工具类
run.py:程序执行的入口
3、下载文件 下载地址:https://github.com/tungwaiyip/HTMLTestRunner
将文件放到Python解释器下 在测试后即可生成测试报告
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)