WebUI自动化 - PageObject设计模式

PageObject设计模式是Selenium自动化测试中的一种最佳实践,它通过封装界面交互,提高测试代码的可读性和可维护性。普通模式下,测试用例直接操作页面元素,导致可读性和复用性差。而PageObject模式则通过分层(如对象层、逻辑层和业务层)实现高效率和复用,遵循六大设计原则,强调封装页面功能和服务,不暴露内部细节,并避免在PO中做断言。此外,该模式根据页面复杂度可以采用两层至四层的分层机制,例如BasePage、LoginElement、EmailLoginPage和TestEmailLogin分别代表核心方法、对象层、逻辑层和业务层。
摘要由CSDN通过智能技术生成

PO模式:PageObjece

  • Page Object 是 Selenium 自动化测试项目开发实践的最佳设计模式之一,Page Object 的主要体现于对界面交互细节的封装,这样可以使测试案例更关注与业务而非界面细节,提高测试案例的可读性。

普通模式:

def test_baidu():
    driver = webdriver.Chrome()
    driver.get('https://baidu.com.com')
    driver.find_element(By.ID, "kw").send_keys('python')
    driver.find_element(By.ID, "su").click() 
  • 易读性差:一连串的find element会使代码显得杂乱无章
  • 可扩展性不好:用例孤立,无法扩展
  • 可复用性差:无公共方法,很难复用
  • 可维护性差:一旦元素变化,需要维护修改大量测试用例

PageObjece设计模式:

  • 效率高 :同理,PO模式的逻辑层方法有具体定义,情况和元素发生变化一样 修改逻辑层,业务层不变。这样看来结构简单清晰,舒服更符合人类习惯, 普通方式就是继续堆case。
  • 复用多收益大: 同样这里如果逻辑复用越多,PO模式收益越大,因为对于PO模式来说都只需要修改一个地方多处受益。

设计原则

  1. 公共方法表示页面提供的服务
  2. 尽量不要暴露页面的内部结构
  3. 一般不做断言
  4. 方法返回其他PageObject
  5. 不需要代表整个页面,只需要封装重要的页面元素
  6. 同一动作的不同结果被建模为不同的方法

对上述六大原则进行更详细的解释:

  1. 原则一:要封装页面中的功能(或者服务),比如点击页面中的元素,可以进入到新的页面,于是,可以为这个服务封装一个方法“进入新页面”。
  2. 原则二:封装细节,对外只提供方法名(或者接口)。
  3. 原则三:封装的操作细节中不要使用断言,把断言放到单独的模块中,比如 testcase。
  4. 原则四:点击一个按钮会开启新的页面,可以用 return 方法表示跳转,比如return MainPage()表示跳转到新的 PO:MainPage。
  5. 原则五:只为页面中重要的元素进行 PO 设计,舍弃不重要的内容。
  6. 原则六:一个动作可能产生不同结果,比如点击按钮后,可能点击成功,也可能点击失败,为两种结果封装两个方法,click_success和click_error。

分层机制

  • 让不同层去做不同类型的事情,让代码结构清晰,增加复用性。

主要有以下几种分层方式:

  1. 两层:对象逻辑层+业务数据层
  2. 三层:对象库层+逻辑层+业务数据层
  3. 四层:对象库层+逻辑层+业务层+数据层

示例:PO模式(四层)

BasePage.py(核心方法)
import time
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


class BasePage(object):

    def __init__(self, driver):
        self.driver = driver

    def open(self, url):
        """
        打开浏览器获取url地址
        :param url:
        :return:
        """
        self.driver.get(url)
        self.driver.maximize_window()
        self.driver.implicitly_wait(20)

    def quit(self):
        self.driver.quit()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值