零、PO模式版本
v1:不采用任何任何模式,真正的线性模型
v2:采用测试框架(unittest)
v3:进行业务代码&页面对象的分离
v4:实际中的PO模式的编写
v5:
v6:
一、无模式v1
- 熟悉web自动化测试代码编写的基本流程
- 掌握如何使用UnitTest管理测试脚本
1. 测试案例
tpshop登录(账号错误、密码错误、验证码错误)
案例都是只能单独运行
2. 问题
无法批量运行
二、方法封装v2
1. 方法
import time
import unittest
from selenium import webdriver
from selenium.webdriver.common.by import By
class TestDemo(unittest.TestCase):
driver = None
@classmethod
def setUpClass(cls):
# 获取浏览器对象|前置处理|打开url
cls.driver = webdriver.Chrome()
driver = cls.driver
# ...操作
@classmethod
def tearDownClass(cls):
cls.driver.quit()
# 新建一系列测试方法
def test_login_code_note_exit(self):
driver = self.driver
# ...操作
def test_xxxx(self):
driver = self.driver
# ...操作
try:
# 断言操作
except AssertionError:
# 结果截图
2. 问题
业务脚本与页面对象没有分离
维护繁琐[比如说:开发一个类名的修改,导致这边测试定位元素的修改]
三、PO模式介绍v3
1. PO介绍
- PO介绍
1)PO:page(页面)、object(对象)
2)页面对象:把一个页面封装为一个对象class
3)每一个操作步骤–都是单独封装为一个方法比如:输入用户名封装为一个方法)
页面层page & 业务层scripts
页面层:页面中的对象,比如:用户名、密码、验证码、按钮…
2. 页面对象编写技巧
- 类名
使用大驼峰抄写模块名称,有下划线则去除下划线- 方法
根据业务需求每个操作步骤单独封装一个方法
方法名:page_xxx
四、PO模式实践
1. 练习-页面层
- 文件命名:page_login.py
- 导包
- 初始化,浏览器三个前置
- 封装各个方法(注意driver)
- 组装各个业务方法,提供给业务层调用(
self.函数方法名()
调用)
"""
页面层
"""
import unittest
from selenium import webdriver
from selenium.webdriver.common.by import By
class PageLogin:
# 获取driver (初始化操作)
def __init__(self):
self.driver = webdriver.Chrome()
driver = self.driver
driver.get("http://demo6.tp-shop.cn/")
driver.maximize_window()
driver.implicitly_wait(30)
# 点击登录 连接
def page_click_login_link(self):
driver = self.driver
driver.find_element(By.LINK_TEXT, "登录").click()
# 输入用户名
def page_input_username(self,