那么问题来了:什么是PO模型呢?简单理解就是:把每个页面当成一个对象,给这些页面当成一个类,主要就是完成元素定位和业务操作;它和测试脚本区分开来,需要什么取这些页面类去调用即可。这样的好处在于页面元素发生变化时,只需要去维护页面类即可,其他部分就不用管。
GitHub代码commits id:73a583a


PO模型的基本思路:register_page(查找页面元素类) —> register_handle(操作层,将查找到的元素位置上传递数据) —> register_business(业务层:调用操作层,根据操作层的传递的结果进行判断场景,如邮箱错误场景等) —> first_case(封装调用业务层,进行测试用例的场景组装)
此处代码居多里面的详细操作教程稍后补上,这块的代码还有一个小问题,就是传递的数据会重复输入,下面章节将会采用新的方法来解决这个问题。

一、页面元素查找类

此页面当然是指的我们的注册页面了,通过前面的学习我们发现查找页面元素可以独立封装成一个类,以便在其他地方去调用。

#!/bin/usr/env python3
# -*- coding: utf-8 -*-
# --------------------------------
# ProjectName:
# Author: Crisimple
# CreateTime: 2019/6/10 17:34
# FileName: register_page.py
# Description: 主页用来获取注册页面的页面元素
# Question: PO的精髓:页面、case、数据分离开来
# --------------------------------from code_package.base.find_element import FindElementclass RegisterPage(object):def __init__(self, driver):self.find_element = FindElement(driver)def get_email_element(self):return self.find_element.get_element("user_email")def get_username_element(self):return self.find_element.get_element("user_name")def get_password_element(self):return self.find_element.get_element("password")def get_code_element(self):return self.find_element.get_element("code_text")def get_button_element(self):return self.find_element.get_element("register_button")# 错误信息......# 获取邮箱栏错误提示def get_email_error_info(self):return self.find_element.get_element("register_email_error")# 获取用户名错误提示def get_username_error_info(self):return self.find_element.get_element("register_username_error")# 获取密码错误提示def get_password_error_info(self):return self.find_element.get_element("register_password_error")# 获取验证码错误提示def get_code_error_info(self):return self.find_element.get_element("captcha_code_error")

二、数据操作类

很自然滴,查找到页面元素后当然是要给这些元素的输入框输入我们的注册数据了。当然这块是得调用到页面元素查找类。

#!/bin/usr/env python3
# -*- coding: utf-8 -*-
# --------------------------------
# ProjectName:
# Author: Crisimple
# CreateTime: 2019/6/10 17:35
# FileName: register_handle.py
# Description: 输入传递即给页面传值------操作层
# Question:
# --------------------------------from code_package.page.register_page import RegisterPageclass RegisterHandle(object):def __init__(self, driver):self.register_page = RegisterPage(driver)# 输入邮箱def send_user_email(self, email):self.register_page.get_email_element().send_keys(email)# 输入用户名def send_user_name(self, username):self.register_page.get_username_element().send_keys(username)# 输入密码def send_user_password(self, password):self.register_page.get_password_element().send_keys(password)# 输入验证码def send_user_code(self, code):self.register_page.get_code_element().send_keys(code)# 获取错误信息(获取到注册页中的错误信息)def get_user_text(self, info, user_info):text = Noneif info == "register_email_error":text = self.register_page.get_email_error_info().send_keys("value")elif info == "register_username_error":text = self.register_page.get_username_error_info().send_keys("value")elif info == "register_password_error":text = self.register_page.get_password_error_info().send_keys("value")elif info == "captcha_code_error":text = self.register_page.get_code_error_info().send_keys("value")else:print("你的错误无法解决,本猿无能为力......")return text# 点击注册按钮def click_register_button(self, button):self.register_page.get_button_element().send_keys(button)# 获取注册按钮的文字def get_register_text(self):return self.register_page.get_button_element().text

三、业务判断封装类

根据我们的测试业务需求,那些场景下需要进行测试;这里以异常输入场景的错误提示为测试点进行业务的封装。

#!/bin/usr/env python3
# -*- coding: utf-8 -*-
# --------------------------------
# ProjectName:
# Author: Crisimple
# CreateTime: 2019/6/12 13:16
# FileName: register_business
# Description: 封装操作层的方法:
#   register_page ---> register_handle ---> register_business ---> first_case
# Question:
# --------------------------------from code_package.handle.register_handle import RegisterHandleclass RegisterBusiness(object):def __init__(self, driver):self.register_handle = RegisterHandle(driver)def user_base(self, email, name, password, code):self.register_handle.send_user_email(email)self.register_handle.send_user_name(name)self.register_handle.send_user_password(password)self.register_handle.send_user_code(code)# self.register_handle.click_register_button()def register_success(self):if self.register_handle.get_register_text() == None:return Trueelse:return False# 邮箱错误def login_email_error(self, email, name, password, code):self.user_base(email, name, password, code)if self.register_handle.get_user_text("email_error", "请输入有效的电子邮件地址") == None:print("邮箱校验不成功")return Trueelse:return False# 用户名错误def login_username_error(self, email, name, password, code):self.user_base(email, name, password, code)if self.register_handle.get_user_text("username_error", "字符长度必须大于等于4,一个中文字算2个字符") == None:print("用户名校验不成功")return Trueelse:return False# 密码错误def login_password_error(self, email, name, password, code):self.user_base(email, name, password, code)if self.register_handle.get_user_text("password_error", "最少需要输入 5 个字符") == None:print("密码校验不成功")return Trueelse:return False# 验证码错误def login_code_error(self, email, name, password, code):self.user_base(email, name, password, code)if self.register_handle.get_user_text("password_error", "验证码错误") == None:print("验证码校验不成功")return Trueelse:return False

四、测试case类

根据我们的业务测试类,编写对应的测试 case ,进行调用测试执行

#!/bin/usr/env python3
# -*- coding: utf-8 -*-
# --------------------------------
# ProjectName:
# Author: Crisimple
# CreateTime: 2019/6/12 13:08
# FileName: first_case.py
# Description:
# Question:
# --------------------------------
from code_package.business.register_business import RegisterBusiness
from selenium import webdriver
import unittestclass FirstCase(unittest.TestCase):def setUp(self) -> None:self.driver = webdriver.Chrome("../tools/chromedriver.exe")self.driver.maximize_window()self.driver.get("http://www.5itest.cn/register")self.register_business = RegisterBusiness(self.driver)def tearDown(self) -> None:self.driver.close()def test_login_email_error(self):email_error = self.register_business.login_email_error('34', 'U1212', '12Test12', 'der56')if email_error == True:print("注册成功了,此条 case 执行失败")# login('223', '1111')# 通过 assert 判断是否为 errordef test_login_username_error(self):username = self.register_business.login_username_error("qqww@qq.com", "2", "Test@123", 'sdsds')if username == True:print("注册成功了,此条 case 执行失败")def test_login_password_error(self):password = self.register_business.login_password_error("qqww@qq.com", "2gw", "2", 'sdsds')if password == True:print("注册成功了,此条 case 执行失败")def test_login_code_error(self):code = self.register_business.login_code_error("qqww@qq.com", "2gw", "Test@123", 's')if code == True:print("注册成功了,此条 case 执行失败")def test_login_success(self):success = self.register_business.user_base("crisimple@163.com", "Crisimple", "Test@123", "test1")if success == True:print("注册成功")else:print("注册失败")# def main():
#     first = FirstCase()
#     first.test_login_email_error()
#     first.test_login_username_error()
#     first.test_login_password_error()
#     first.test_login_success()if __name__ == "__main__":unittest.main()

到这里差不多就可以跑通测试流程了…

【Python Web自动化】03_PO模型相关推荐

  1. 139邮箱发送邮件(python web自动化)

    139邮箱发送邮件(python web自动化) 代码走起!!! from selenium import webdriver import timedriver = webdriver.Chrome ...

  2. python+Web自动化打包exe+配置文件

    引言:简单的打包单个没有依赖关系的.py文件很简单,但是想要运用到框架的没几个博客.我找了好多博客都很水,什么喂饭教程,太水了,还是没有实现打包. 本文仅仅引用一篇博客链接:我的思路就是从这个链接来的 ...

  3. python web自动化元素定位_快速掌握Python Selenium Web自动化:三)在Selenium中定位查找网页元素的诸类方法...

    使用Selenium进行自动化操作,首先要做的就是通过webdriver的get()方法打开一个URL链接. 在打开链接,完成页面加载之后,就可以通过Selenium提供的接口,在页面上进行各种操作了 ...

  4. python web自动化_Selenium+Python Web自动化

    Selenium官方网站 http://selenium-python.readthedocs.io/ 配置使用环境 下载相应的浏览器驱动, Firefox 是默认的 本文以 chrome 为主 ,放 ...

  5. python web自动化demo阿里巴巴自动向商家发送消息

    前两天帮人写了个脚本,自动向商家发送留言 import timefrom selenium import webdriver from selenium.webdriver.common.keys i ...

  6. python的web自动化框架实例_Selenium基于Python web自动化测试框架 -- PO

    关于selenium测试框架首先想到的就是PO模型,简单说下PO模型 PO模型的概念和理解: PO就是一个设计思想,将代码以页面为单位进行组织,针对这个页面上的所有信息.相关操作都放到一个类中,从而使 ...

  7. Python+selenium Web自动化持续更新

    保姆入门级Web自动化学习资料 前言 Web自动化环境搭建 软件准备 开始环境搭建 浏览器和驱动下载 谷歌浏览器驱动版本对应以及下载: edge浏览器驱动版本对应以及下载: ie浏览器驱动官方地址: ...

  8. 10行Python代码实现Web自动化管控

    目录 1.模块安装 2.模块使用 本博客将为各位分享Python Helium库,其是在 Selenium库基础上封装的更加高级的 Web 自动化工具,它能够通过网页端可见的标签.名称来和 Web 进 ...

  9. python selenium - web自动化环境搭建

    前提: 安装python环境. 参考另一篇博文:https://www.cnblogs.com/Simple-Small/p/9179061.html web自动化:实现代码驱动浏览器进行点点点的操作 ...

最新文章

  1. 2012到2020主要的CNN架构总结
  2. java 图片转zpl 数据,使用Zebra 打印机打印
  3. python类装饰器详解-Python类中的装饰器在当前类中的声明与调用详解
  4. 使用ALTER SYSTEM运行OS命令
  5. hdu1160 dp
  6. java 通道 双向原理_Java-NIO(四):通道(Channel)的原理与获取
  7. shell交互式输入
  8. OpenEMR登录模块SQL注入分析
  9. vmware linux ssh密码,使用 SSH 密钥连接到 Linux VM - Azure Linux Virtual Machines | Azure Docs...
  10. ActivityGroup简单介绍
  11. IDEA导入项目不显示项目结构src解决
  12. matlab中的sparse和full以及ground truth matrix
  13. 在线apt-get安装mysql_apt-get安装mysql
  14. 图片情感分析(1):图像数据预处理
  15. 不同cpu matlab,求助大神,为何不同机器运行MATLAB结果不同
  16. linux c++ 获取当前时间毫秒_Linux 切换工作目录
  17. Advance Steel Addon for Autodesk AutoCAD 2022.0.1 x64
  18. PCFG句法分析之CYK算法
  19. androidstudio MultiDex慎用
  20. Qt 5.12 编写多窗口程序(新手手把手教学)

热门文章

  1. img固定宽高,图片等比缩小不变形
  2. PyPDF2--如何使用python操作你的PDF文档
  3. 谷歌插件扩展破解禁止复制粘贴
  4. iOS 利用 Metal 实现滤镜与动效滤镜
  5. char char* 的困惑
  6. OPA1612AIDR IC AUDIO 2 CIRCUIT 8SOIC
  7. (解决)org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)问题的办法
  8. 中国杀软套路深:CIA怼遍全世界竟然干不过它
  9. 7-26 输出大写英文字母
  10. 豆沙绿护眼色样式在html中的代码