po模型设计思想


  Page Object 模式主要是将每个页面设计为一个class,其中包含页面中的需要测试的元素(按钮,输入框,标题等),这样在Selenium测试页面中可以通过调取页面类来获取页面元素,这样避免当页面元素id或者位置变化后,需要改测试代码。当元素ID变化时,只需要改测试页面Class中的页面属性即可。将页面定位与和业务分开,分离测试对象(元素对象)和测试脚本(用例脚本),提高可维护性。

  Page Object模式是一种自动化测试设计模式,将页面定位和业务操作分开,分离测试对象(元素对象)和测试脚本(用例脚本),提高用例的可维护性。

unittest是一种单元测试框架,用于设计各式各样的测试用例,可调用PageObject设计的页面类(对象),设计出更加可维护的用例。它提供用例组织与执行,提供丰富的比较(断言)方法,提供丰富的日志,统一适用于web自动化用例的开发与执行。

   How Google Test(谷歌测试之道),书中对web产品测试就分为敏捷测试金字塔的三层,并且工作量配比是,Unit(单元测试):70%,Service(API):20%,UI(GUI):10%。

  所以UI自动化最核心的问题定位是,跟业务层解耦出来,单独处理定位的问题,然后在实现业务层。所使用到的方法是对一个UI页面做测试我们抽取为三层,举例为BasePage+LoginPage+Unittest。   

  后续示例中,PO模型的基本思路:register_page(查找页面元素类) —> register_handle(操作层,将查找到的元素位置上传递数据) —> register_business(业务层:调用操作层,根据操作层的传递的结果进行判断场景,如邮箱错误场景等) —> first_case(封装调用业务层,进行测试用例的场景组装)

po模型之如何设计操作层


查找页面元素类:把定位页面元素的方法都封装在相应的一个相应页面中,此页面的元素定位方式都可以在这个文件中找到

操作层:编写注册过程中需要的方法,比如输入用户名、密码等页面操作,工具类-保存页面操作的所有方法。

业务层:把操作层组装起来

查找页面元素类:register_page.py

操作层:register_handle.py

业务层:register_business.py

找找页面元素类


示例代码:register_page.py

# -*-  coding:utf-8 -*-
from util.find_elemnet import FindElement class RegisterPage():
def __init__(self,driver):
self.find_element = FindElement(driver) def get_email_element(self):
return self.find_element.get_element("element_email") def get_name_elemnet(self):
return self.find_element.get_element("element_name") def get_pwd_element(self):
return self.find_element.get_element("element_pwd") #错误信息校验
def get_email_error_info(self):
return self.find_element.get_element("element_email_error") def get_name_error_info(self):
return self.find_element.get_element("element_name_error") def get_pwd_error_info(self):
return self.find_element.get_element("element_pwd_error")

操作层


示例代码:register_handle.py

# -*-  coding:utf-8 -*-
from selenium import webdriver from page.register_page import RegisterPage class RegisterHandle(object): def __init__(self,driver):
self.register_p = RegisterPage(driver) #输入邮箱
def send_user_email(self,email):
self.register_p.get_email_element().send_keys(email) #输入用户名
def send_user_name(self,name):
self.register_p.get_name_elemnet().send_keys(name) #输入密码
def send_user_pwd(self,pwd):
self.register_p.get_pwd_element().send_keys(pwd) #获取错误提示信息
def get_user_text(self,info,user_info):
text = None
if info == "element_email_error":
text = self.register_p.get_email_error_info().get_attribute("value") #value是html标签中的属性值
elif info == "element_name_error":
text = self.register_p.get_name_error_info().get_attribute("value")
elif info == "element_pwd_error":
text = self.register_p.get_pwd_error_info().get_attribute("value")
else:
print("参数输入参数值有误")
return text if "__name__" == "__main__":
pass

业务层


示例代码:register_business.py

# -*-  coding:utf-8 -*-
from handle.register_handle import RegisterHandle
from selenium import webdriver class RegisterBusiness():
def __init__(self,driver):
self.register_h = RegisterHandle(driver) def base_case(self,email,name,pwd):
self.register_h.send_user_email(email)
self.register_h.send_user_name(name)
self.register_h.send_user_pwd(pwd) #校验邮箱输入错误
def email_error(self,email,name,pwd):
self.base_case(email,name,pwd)
if self.register_h.get_user_text("element_email_error","请输入有效的电子邮件地址") == None:
print("邮箱校验不成功")
return AssertionError
else:
return False if __name__ == "__main__":
driver = webdriver.Chrome()
driver.get("http://www.5itest.cn/register")
testcase1 = RegisterBusiness(driver)
testcase1.base_case("","","")

selenium3 web自动化测试框架 三:项目实战中PO模型的设计与封装的更多相关文章

  1. selenium3 web自动化测试框架 二:页面基础操作、元素定位方法封装、页面操作方法封装

    学习目的: 掌握自动化框架中需要的一些基础web操作 正式步骤: 使用title_contains检查页面是否正确 # -*- coding:utf-8 -*- import time from se ...

  2. selenium3 web自动化测试框架 四:Unittest介绍及项目实战中的运用

    unittest介绍及运用,可以参考之前写的文章,除了未结合web自动化演示,基础知识都有了 https://www.cnblogs.com/wuzhiming/p/8858305.html unit ...

  3. selenium3 web自动化测试框架 五: 数据驱动简介及基础使用

    1.数据驱动概述 相同的测试脚本使用不同的测试数据来执行,测试数据和测试行为完全分离,这样的测试脚本设计模式称为数据驱动.简单的理解为数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变.通过使 ...

  4. selenium3与Python3实战 web自动化测试框架 ☝☝☝

    selenium3与Python3实战 web自动化测试框架 selenium3与Python3实战 web自动化测试框架 学习 教程 一.环境搭建 1.selenium环境搭建 Client: py ...

  5. selenium3与Python3实战 web自动化测试框架✍✍✍

    selenium3与Python3实战 web自动化测试框架  整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课 ...

  6. 彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-项目入口与路由EP01

    书接上回,我们已经安装好Iris框架,并且构建好了Iris项目,同时配置了fresh自动监控项目的实时编译,万事俱备,只欠东风,彩虹女神蓄势待发.现在我们来看看Iris的基础功能,如何编写项目入口文件 ...

  7. web自动化 基于python+Selenium+PHP+Ftp实现的轻量级web自动化测试框架

    基于python+Selenium+PHP+Ftp实现的轻量级web自动化测试框架   by:授客 QQ:1033553122     博客:http://blog.sina.com.cn/ishou ...

  8. Windows环境搭建Web自动化测试框架Watir

    Windows环境搭建Web自动化测试框架Watir 一.前言     Web自动化测试一直是一个比较迫切的问题,对于现在web开发的敏捷开发,却没有相对应的敏捷测试,故开此主题,一边研究,一边将We ...

  9. Web 自动化测试框架 sweetest 介绍

    项目开源: https://github.com/tonglei100/sweetest 文章转载:https://segmentfault.com/a/1190000011612061 介绍 swe ...

随机推荐

  1. vue init webpack-simple

    vue init webpack-simple  .. 将我们的项目更加方便,更有助于开发者快速开发. vue init webpack-simple的项目默认打包后之后一个html和一个js文件,而 ...

  2. MongoDB 4.0 事务实现解析

    MongoDB 4.0 引入的事务功能,支持多文档ACID特性,例如使用 mongo shell 进行事务操作 > s = db.getMongo().startSession() sessio ...

  3. 小象和老鼠 DP

    小象和老鼠 DP \(N*M\)的网格图,格子\((i,j)\)有\(A_{i,j}\)个老鼠,问小象从左上角\((1,1)\)走到右下角\((N,M)\)看到的最少老鼠.小象可以看见老鼠,当且仅当老 ...

  4. 区间连续长度的线段树——洛谷P2894 [USACO08FEB]酒店Hotel

    https://www.luogu.org/problem/P2894 #include<cstdio> #include<iostream> using namespace ...

  5. 2019-06-03 校内python模拟题解(所有非原题)

    一起来女装吧 本题改编自USACO(USA Computing Olympiad) 1.1节的第一题 (感谢lsy同学对本题题面的贡献) 直接计算就好了 chr:将ASCII码转成字符 ord:字符对 ...

  6. 米津玄師 - Lemon

    Lemon 词:米津玄師 曲:米津玄師 夢(ゆめ)ならば どれほどよかったでしょう 未(いま)だにあなたのことを夢(ゆめ)にみる 忘(わす)れた物(もの)を 取(と)りに帰(かえ)るように 古(ふる) ...

  7. Leetcode题目437:路径总和III(递归-简单)

    题目描述: 给定一个二叉树,它的每个结点都存放着一个整数值. 找出路径和等于给定数值的路径总数. 路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点). 二 ...

  8. go中json的tag使用

    指定json中的key名字: 指定数据类型, string number, boolean 忽略空值(值不为空, 不忽略) 忽略字段 "-" (无论有没有值, 都忽略) type ...

  9. 【Oracle】往Oracle11g的某表插入近千万条记录,耗时略超一小时

    和MySql的对比下,两者有数量级的差距. 表ddl: CREATE TABLE tb04 ( "ID" ,) not null primary key, "NAME&q ...

  10. Feed流系统设计-总纲

    https://mp.weixin.qq.com/s/ccxM2thPbzg5vDWgGVJ5vQ 作者:少强 简介 差不多十年前,随着功能机的淘汰和智能机的普及,互联网开始进入移动互联网时代,最具代 ...