Page Object 是 Selenium 自动化测试项目开发实践的最佳设计模式之一,Page Object 的主要体现于对界面交互细节的封装,这样可以使测试案例更关注与业务而非界面细节,提高测试案例的可读性。
认识 Paget Object
一、Page object 简称POM框架
POM提供了一种在UI层操作、业务流程与验证分离的模式,这使得测试代码变得更加清晰和高可读性;
对象库与用例分离,使得我们更好的复用对象,甚至能与不同的工具进行深度结合应用;
可复用的页面方法代码会变得更加优化;
更加有效的命名方式使得我们更加清晰的知道方法所操作的UI元素。例如我们要回到首页,方法名命名为: gotoHomePage(),通过方法名即可清晰的知道具体的功能实现。;
二、Page object设计模式的优点
减少代码的重复;
提高测试用例的可读性;
提高测试用例的可维护性,特别是针对 UI 频繁变化的项目;
实战--博客园登录自动化测试发送测试报告
思路分析:
浏览器封装;
页面截图函数封装,偏于后续浏览查看;
页面元素基础类操作封装,包含断言设计;
登录元素操作封装;
登录测试用例设计;
代码参考
myunit.py
# 浏览器驱动封装
'''
@author: Yvon_早安阳光
'''
from selenium import webdriver
import unittest
class MyTest(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Firefox()
def tearDown(self):
self.driver.quit()
function.py
'''
@author: Yvon_早安阳光
'''
import time
from selenium import webdriver
#封装截图函数
def insert_img(driver,filename):
file_path = 'insert_img/'
now = time.strftime("%Y-%m-%d %H_%M_%S")
screen_name = file_path + '\\' + now + filename
driver.get_screenshot_as_file(screen_name)
# 登录成功截图
def success_img(driver,file_name):
filepath = 'success_img/'
now = time.strftime("%Y-%m-%d %H_%M_%S")
screenname = filepath + '\\' + now + file_name
driver.get_screenshot_as_file(screenname)
if __name__ == '__main__':
driver = webdriver.Firefox()
driver.quit()
Base.py
# 页面元素基础类操作封装
'''
@author: Yvon_早安阳光
'''
class Page(object):
#BasePage封装所有页面都公用的方法,例如driver, url ,FindElement等
login_url = "https://passport.cnblogs.com/user/signin"
#实例化BasePage类时,最先执行的就是__init__方法,该方法的入参,其实就是BasePage类的入参。
#__init__方法不能有返回值,只能返回None,self只实例本身,相较于类Page而言
def __init__(self,selenium_driver,base_url = login_url,parent = None):
self.base_url = base_url
self.driver = selenium_driver
self.timeout =10
self.parent = parent
'''通过title断言进入的页面是否正确。使用title获取当前窗口title,检查输入的title是否在当前title中,返回比较结果(True 或 False)'''
def on_page(self):
return self.driver.current_url == (self.base_url