PO设计模式学习

Page Object Model:

PO设计模式是selenium自动化测试中最佳的设计模式之一,主要体现在对界面交互细节的封装,也就是在实际测试中只关注业务流程就OK了

传统的设计中,在新增测试用例之后,代码会有以下几个问题:

1.易读性差:一连串的find element会使代码显得杂乱无章

2.可扩展性不好:用例孤立,无法扩展

3.可复用性差:无公共方法,很难复用

4.可维护性差:一旦元素变化,需要维护修改大量测试用例
因此考虑到优化:

PO模式是一种自动化测试设计模式,讲页面定位和业务操作分开,也就是把对象的定位和测试脚本分开,从而提供可维护性。
  在这里插入图片描述
首先抽象封装一个BasePage类,这个基类拥有一些指向Webdriver实例的属性,然后每一个Page继承基类BasePage,可以通过driver管理每一个Page中的元素,而且在Page中将这些操作封装为一个一个的方法。TestCase继承unittest里面的TestCase类,并且依赖page类,进行组织测试步骤的工作。

这样做的好处,就是有元素变化,只需要维护每一个Page就行了,测试步骤变化,只需要维护TestCase即可
  下面举一个简单的例子来看一下PO模式:
业务要求就是,用Chrome浏览器,在http://114.215.176.95:60503/goodmanage/index.jsp中实现输入用户名、密码,然后点击登录按钮,再关闭浏览器

PO各个核心要素的介绍:

基类BasePage类:

from selenium import webdriver
from time import sleep
#定义页面基础类,所有的页面都需要继承这个基础类
class Base_Login:
    #初始化基础类
    def __init__(self,driver,url):
        self.driver=driver
        self.url=url
    #相同行为定位元素(八大元素定位方法),点击,输入
    def locator(self, loc):
        el = self.driver.find_element(*loc)
        return el
    def send_Key(self,loc,value):
        self.locator(loc).send_keys(value)
    def click(self,loc):
        self.locator(loc).click
    def getUrl(self):
        self.driver.get(self.url)
        self.driver.maximize_window()

Page类:

from Base.base_login import *
from selenium.webdriver.common.by import By
from time import sleep
class LoginPage(Base_Login):
    # 定义用户名、密码、提交id的元素
    username=(By.ID,'userName')
    password=(By.ID,'password')
    submit=(By.ID,'btnLogin')
    # 输入用户名
    def input_username(self,username):
        self.send_Key(self.username,username)
    # 输入密码
    def input_password(self,password):
        self.send_Key(self.password,password)
    # 点击登录
    def click_login(self):
        self.click(self.submit)
    #整合登录流程
    def login_all(self,username,password):
        self.getUrl()
        sleep(1)
        self.input_username(username)
        sleep(1)
        self.input_password(password)
        sleep(1)
        self.click_login()

TestCase类:

#coding=utf-8
import unittest
from PageObject.login import *
from selenium import webdriver
class TestCase_pm(unittest.TestCase):
    def test_01_login(self):
        '''登录测试用例'''
        #加载浏览器
        url = 'http://114.215.176.95:60503/goodmanage/index.jsp'
        self.driver=webdriver.Chrome()
        login=LoginPage(self.driver,url)
        login.login_all('zhangsan','123456')
if __name__ == '__main__':
    unittest.main()



  

 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值