什么是PO模式
1、PO模型是:Page Object Model的简写,页面对象模型,是一种设计模式 2、作用:就是把测试测试逻辑和页面的业务流操作进行分离,即把页面封装成类,供测试脚本进行调用;分层机制,让不同层去做不同类型的事情,让代码结构清晰,增加复用性。
看懂这个图,也就明白PO模式是什么,作用
?你的测试用例中,需要在系统哪个页面操作哪个业务流,就调用哪个页面的业务流就可以了,我们如何把PO模式用到我们web自动化测试中?直接上代码:
PO的代码目录组织示例:
?conftest.py:
"""
时间:2021/8/5-22:05
文件:conftest.py.py
姓名:瓜牛强强
QQ:1689785398@qq.com
"""
import pytest
from selenium import webdriver
@pytest.fixture()
def driver():
"""打开浏览器和关闭浏览器"""
# 地址
url = "https://v4.ketangpai.com/User/login.html"
driver = webdriver.Chrome()
# 最大化,隐性等待
driver.maximize_window()
# 隐性等待
driver.implicitly_wait(10)
# 访问被测网址
driver.get(url)
print("以上步骤为前置条件")
yield driver
print("以下步骤为后置条件")
# 关闭浏览器
driver.quit()
test_login.py:
"""
时间:2021/8/5-22:12
文件:test_login.py
姓名:瓜牛强强
QQ:1689785398@qq.com
"""
"""
登录的测试用例
使用的是pytest 框架
"""
import pytest
from page.login_page import LoginPage
class TestLogin:
def test_login_username_error(self, driver):
"""测试登录功能--第1条测试用例--用户名、密码错误:
步骤:
1、访问登录界面
2、输入用户名和密码,回车
3、断言: 预期结果和实际结果比对
"""
# 测试数据统一管理
username = '1111111111'
password = '1234'
expected = '密码有效长度是6到30个字符'
# 调用登录页面的登录业务流
LoginPage(driver).login(username,password)
# 断言:在页面当中找到错误信息的元素,获取文本与实际结果对比。
error_ele = driver.find_element('xpath', '//p[@class="error-tips"]')
actual = error_ele.text
assert actual == expected
def test_login_password_None(self, driver):
"""测试登录功能--第2条测试用例--密码为空:
步骤:
1、访问登录界面
2、输入用户名和密码,回车
3、断言: 预期结果和实际结果比对
"""
# 测试数据统一管理
username = '1111111111'
password = ' '
expected = '密码不能为空'
# 调用登录页面的登录业务流
LoginPage(driver).login(username,password)
# 断言:在页面当中找到错误信息的元素,获取文本与实际结果对比。
error_ele = driver.find_element('xpath', '//p[@class="error-tips"]')
actual = error_ele.text
assert actual == expected
if __name__ == '__main__':
pytest.main()
login_page.py:
"""
时间:2021/8/21-15:34
文件:login_page.py
姓名:瓜牛强强
QQ:1689785398@qq.com
"""
import time
from selenium.webdriver.common.keys import Keys
class LoginPage:
def __init__(self, driver):
self.driver = driver
def login(self, username, password):
"""登录"""
# 定位用户名元素,输入用户名
username_el = self.driver.find_element('xpath', '//input[@name="account"]')
username_el.send_keys(username)
# 定位密码元素,输入密码
# 直接回车提交
password_el = self.driver.find_element('xpath', '//input[@name="pass"]')
password_el.send_keys(password)
# 回车提交
password_el.send_keys(Keys.ENTER)
time.sleep(5)
To be continue,点个关注,持续更新。。。
|