赞
踩
PO设计模式(Page Object)是当前UI自动化较为流行的框架设计模式。其设计思路是把业务抽象化,分层封装成函数。简单的说,就是把页面元素、页面操作、测试用例都分别写在不同的py文件中,分开管理
在传统的设计模式中,设计自动化用例时,会将自动化用例的所有步骤写在一个模块中。这样做虽然不用分层管理,写代码时方便许多,但是也带来了很多的问题:
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、不同分层对应不同的用处,降低了维护成本
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。