UI自动化测试-PO设计模式

一、什么是PO设计模式

PO设计模式(Page Object)是当前UI自动化较为流行的框架设计模式。其设计思路是把业务抽象化,分层封装成函数。简单的说,就是把页面元素、页面操作、测试用例都分别写在不同的py文件中,分开管理

二、为什么使用PO设计模式

在传统的设计模式中,设计自动化用例时,会将自动化用例的所有步骤写在一个模块中。这样做虽然不用分层管理,写代码时方便许多,但是也带来了很多的问题:

1、维护成本高

在传统设计模式下,当某个元素发生变化时,所有与这个元素有关的用例都需要进行修改。当用例的数量多了以后,浪费的时间是巨量的,还可能存在改错/改漏的情况

2、代码耦合度过高

当所有的步骤写在一个模块里时,若有一个步骤报错,后面的步骤就不会执行。这可能导致一个情况:原本设计好的断言因为报错的原因没有执行到而直接跳过了,在后续排查错误时,查不到相关的日志,给测试人员带来许多不便

3、代码复用度低

由于所有的步骤都写在一个模块里,因此可能很多用例里有相当大一部分代码是重复的。

而PO设计模式的分层思想恰好能解决这个问题,将一部分使用频率较高的操作封装成公用函数后,在设计用例时直接调用即可,不用再写重复的步骤。而元素的分层也能解决耦合度高与维护成本高的问题

三、分层思路

有两种设计思路:

1、公共方法层、页面元素层、测试用例层(三层)

公共方法单独封装为一层,该层存放所有使用频率高的操作函数,例如点击、页面跳转、元素定位、元素等待等操作。

页面元素层中,一个py文件对应一个页面,py文件里,存放这个页面的元素,作为测试用例层的前置准备

测试用例层里,也是一个py文件对应一个页面,与页面元素层不一样的是,这一层的作用是调用页面元素进行操作并断言。

2、公共方法层、页面元素层、页面操作层、测试用例层(四层)

这一种设计思路与前一种不同的地方在于,将页面操作从测试用例层中抽离出来单独再封装一层。让测试用例层专注于断言,而不进行其他的操作。

四、代码示例

下面举一个例子:进入百度首页并输入文字

公共方法层:


class Base_page:
    
    def __init__(self,browser):
        self.browser = browser

    def redirect_url(self,url):
        self.browser.get(url)
    
    def click_element(self,ele):
        ele.click()

    def input_text(self,ele,text):
        ele.send_keys(text)

页面元素层:

from Common_utils import Base_page
from selenium.webdriver.common.by import By

class Page_object(Base_page):
    
    def baidu_input(self):
        input_bar = self.browser.find_element(way=By.id,value='kw')
        return input_bar
    

测试用例层:

from Baidu_homepage import Page_object
import time

class Test_baidu(Page_object):
    
    def test_input(self):
        input_bar = self.baidu_input()
        self.input_text(ele=input_bar,text='测试输入')
        time.sleep(0.5)
        assert input.bar.get_attribute('value') == '测试输入'

五、总结

1、PO设计模式通过分层,提高了代码的可阅读性以及复用性,使得代码结构更为整洁清晰,降低冗余率

2、用例与页面分层,降低了耦合度

3、不同分层对应不同的用处,降低了维护成本

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值