0


PO模式详解

文章目录

PO模式
  • PO模式是page object的缩写,是一种设计模式
  • 被测页面作为页面对象,其中包含元素定位和元素操作的方法,将页面对象和真实网站页面进行一一对应
  • 举个栗子来讲:用户注册使用PO模式后,操作步骤如下:1. 创建class,该类就是登录页面对象类2. 类的属性:用户注册框、密码框和注册按钮的element3. 类的方法:各种元素的操作方法 1. 方法中对selenium进行二次封装2. 用例层直接调用其中方法即可,不需要关注其他4. 测试层从页面操作层调用其中方法,实现用例和元素方法的分离
  • PO模式分层机制- 对象库层:二次封装selenium的方法- 页面操作层:封装页面元素对象和元素操作方法- 业务层:多个页面操作完成一个业务测试,一般结合单元测试框架(pytest、unittest)来进行测试- 如下图:

在这里插入图片描述

PO模式的优点

说到PO模式的有点必须要说到非PO模式进行对比可能会更加明显

在这里插入图片描述
非PO模式PO模式面向过程的线性脚本页面元素和业务操作分离,实现了松耦合复用性差UI元素改变后不需大规模修改只需要修改页面操作层即可维护性差PO的可读性比较高

用例实现

Exp:用户注册为例进行编写

实现BasePage类:

#BasePage.py from selenium import webdriver
classBasePage(object):#初始化driverdef__init__(self, driver):
        self.driver = driver
    # 访问页面defvisit(self,url):
        self.driver.get(url)# 元素定位deflocator(self, locator):return self.driver.find_element(*locator)# 关闭浏览器defquit_driver(self):
        self.driver.quit()

实现注册类:

  1. 继承Base类
  2. 将页面元素标识在属性中(页面元素,url等)
  3. 添加操作行为(文本输入)
  4. 添加被测函数
#Register.pyfrom basepage.base_page import BasePage
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep

classRegister(BasePage):# 页面元素发生变化时,维护好当前元素路径即可
    input_username =(By.ID,'kw')
    input_pwd =(By.ID,'passwd')
    click_id =(By.ID,'su')# 输入元素definput_text(self, input_text):
        self.locator(self.input_id).send_keys(input_text)# 点击注册按钮defclick_element(self):
        self.locator(self.click_id).click()# 测试defcheck(self, url, input_text):
        self.visit(url)
        self.input_text(input_text)
        self.click_element()if __name__ =='__main__':
    url ='https://www.baidu.com'
    driver = webdriver.Chrome()
    sp = SearchPage(driver)
    sp.check(url,'软件测试')
    sp.quit_driver()

测试用例实现:

#test_register.pyfrom basepage.base_page import BasePage
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep

classRegisPage(BasePage):
    url ='https://www.test.com'
    link_id =(By.LINK_TEXT,'注册')# 用户名
    username =(By.ID,'pwd')# 密码
    pwd =(By.ID,'pwd')# 注册按钮
    btn =(By.XPATH,'//*[@id="TANGRAM__PSP_11__submit"]')# 弹出登录框defclick_link(self):
        self.locator(self.link_id).click()# 点击用户名密码注册defclick_user(self):
        self.locator(self.uname_pwd).click()# 输入用户名definput_username(self,input_username):
        self.locator(self.username).send_keys(input_username)# 输入密码definput_pwd(self,input_pwd):
        self.locator(self.pwd).send_keys(input_pwd)# 点击注册defclick_register(self):
        self.locator(self.btn).click()if __name__ =='__main__':
    driver = webdriver.Chrome()
    sp = LoginPage(driver)
    sleep(3)
    sp.check('username','pwd')
    sleep(8)
    sp.quit_driver()


本文转载自: https://blog.csdn.net/weixin_45336222/article/details/126367393
版权归原作者 天行者_fly 所有, 如有侵权,请联系我们删除。

“PO模式详解”的评论:

还没有评论