当前位置: 首页 > news >正文

PO模式

介绍

PO是Page Object(⻚⾯对象),将⾃动化涉及的⻚⾯或模块封装成对象,是一种思想。

解决的问题:

  1. 解决代码冗余
  2. 便于维护(脚本层与业务分离)-- 如果元素信息发⽣变化了,也不⽤去修改脚本。

非PO代码实现

# 非po模式实现登录
import timefrom selenium import webdriver
from selenium.webdriver.common.by import Byclass TestLogin:def setup_class(self):self.driver = webdriver.Chrome()self.driver.maximize_window()self.driver.get("http://127.0.0.1/Home/user/login.html")self.driver.implicitly_wait(10)def teardown_class(self):time.sleep(4)self.driver.quit()def test_login(self):# 在用户名输入框中输入13600000001# driver.find_element(By.ID,"username").send_keys("13600000001")self.driver.find_element(By.XPATH, "//*[contains(@placeholder,'手机号')]").send_keys("13600000001")# 在密码输入框输入123456# driver.find_element(By.ID,"password").send_keys("123456")self.driver.find_element(By.XPATH, "//*[contains(@placeholder,'密码')]").send_keys("123456")# 在验证码输入框输入8888# driver.find_element(By.ID,"verify_code").send_keys("8888")self.driver.find_element(By.XPATH, "//*[contains(@placeholder,'验证')]").send_keys("8888")# 点击登录按钮self.driver.find_element(By.XPATH, "//*[@name='sbtbutton']").click()

PO设计

以登录为例介绍PO模式,其中

  1. base: 存放所有Page页面公共方法
  2. page: 将页面封装为对象
  3. script: 测试脚本

image-20251223125210458

base

base.py:分析要实现页面公共方法

'''存放所有page页面的公共方法
'''
from selenium.webdriver.support.wait import WebDriverWaitclass Base:def __init__(self,driver):self.driver = driver# 查找元素def base_find(self, loc, timeout = 10, poll_frequency = 0.5):# 采用显示等待的方法获取元素# 显示等待 -> 查找元素  loc = (By.ID,"userA")  *loc=loc[0],loc[1]el = WebDriverWait(self.driver,timeout,poll_frequency).until(lambda x:x.find_element(loc[0],loc[1]))return el# 输入方法def base_input(self,loc,value):# 1.获取元素el = self.base_find(loc)# 2.清空el.clear()# 3.输入el.send_keys(value)# 点击方法def base_click(self,loc):# 先找到元素再点击self.base_find(loc).click()# 获取元素文本方法def base_get_text(self,loc):# 先找到元素再获取return self.base_find(loc).text

page

page_login.py:

'''
模块名:page_模块单词
类名;大驼峰形式,去掉下划线和数字
方法:自动化测试中要用到哪些元素就封装哪些方法
'''
from selenium.webdriver.common.by import Byfrom base.base import Base# 配置信息
username = (By.XPATH, "//*[contains(@placeholder,'手机号')]")pwd = (By.XPATH,"//*[contains(@placeholder,'密码')]")code = (By.XPATH,"//*[contains(@placeholder,'验证')]")login_btn = (By.XPATH,"//*[@name='sbtbutton']")nickname = (By.CSS_SELECTOR,".userinfo")class PageLogin(Base):# 输入用户名def page_username_input(self,value):self.base_input(username,value)# 输入密码def page_pwd_input(self,value):self.base_input(pwd,value)# 输入验证码def page_code_input(self,value):self.base_input(code,value)# 点击登录def page_clink_button(self):self.base_click(login_btn)# 获取昵称def page_nickname(self):self.base_get_text(nickname)# 为了测试业务的时候方便,需要有组合业务def page_test_login(self,phone,password,code2):self.page_username_input(phone)self.page_pwd_input(password)self.page_code_input(code2)self.page_clink_button()

script

test01_login.py:

import timefrom selenium import webdriverfrom page.page_login import PageLoginclass TestLogin:def setup_class(self):self.driver = webdriver.Chrome()self.driver.maximize_window()self.driver.get("http://127.0.0.1/Home/user/login.html")self.login = PageLogin(self.driver)def teardown_class(self):self.driver.quit()def test01_login(self,phone="13600000001",password="123456",code2="8888"):# 调用page_login里面的page_test_login方法来进行测试self.login.page_test_login(phone,password,code2)# 断言nickname = self.login.page_nickname()print("nickname:", nickname)
http://www.gsyq.cn/news/141395.html

相关文章:

  • 2025年年终类似Confluence的软件推荐:技术实力与客户满意度双维度实测TOP5指南 - 十大品牌推荐
  • 2025年终管道非开挖修复公司推荐排行榜单:五家服务商综合对比与选择指南 - 十大品牌推荐
  • 企业知识库软件如何选择?2025年年终主流平台实测对比与5款专业推荐 - 十大品牌推荐
  • 深入解析:JSR223后置处理程序用法详解:JMeter复杂响应处理的终极方案
  • 2025年评价高的切削液集中供液厂家推荐及采购指南 - 品牌宣传支持者
  • LangFlow法律文书自动生成系统搭建步骤
  • 2025年电动挡烟垂壁可靠型制造商推荐排行榜,精选电动挡烟垂壁源头厂家测评 - mypinpai
  • 新手入门树莓派安装拼音输入法的系统学习路径
  • 2025年好的彩钢夹心板价格、夹心板厂推荐、夹心板专业定制厂全解析 - 工业推荐榜
  • GitHub Star激励计划:鼓励更多人参与anything-llm生态建设
  • 为什么顶尖团队都在用Open-AutoGLM?揭开智能AutoML背后的黑科技
  • 2025年终管道非开挖修复公司推荐与对比评价:五家行业代表企业综合实力排行榜单解析 - 十大品牌推荐
  • 节日限时特惠:双十一大促期间anything-llm资源包折扣
  • 2025年年终国内整合营销公司推荐:基于权威行业榜单与客户口碑的10家高可靠性服务商深度解析 - 品牌推荐
  • 2025年12月云南环评资质咨询,云南环评手续咨询,云南环评批复咨询公司测评:高通过率机构红榜发布 - 品牌鉴赏师
  • 2025年年终国内整合营销公司推荐:从全案整合到AI营销新趋势,不同预算与需求下的10家专业服务商对比 - 品牌推荐
  • 安装和配置Hive-cnblog
  • RS232在工业自动化中的通信机制深度剖析
  • 2025年年终国内整合营销公司推荐:专家方法论视角下的全链路服务能力横评与10家机构清单 - 品牌推荐
  • 军用级加密标准启用:FIPS 140-2认证模块集成进展
  • 【AIGC爆红】免费降ai率工具真的有用吗?揭秘从92%降到15%的真相【亲测/避坑指南】
  • 苏州远创消防科技口碑如何、介绍及优势深度解析,甄选企业护航消防安全 - 工业推荐榜
  • 2025年年终国内整合营销公司推荐:基于行业权威榜单与客户长期合作数据的10家高可靠性机构深度解析 - 品牌推荐
  • Windows系统文件mqsec.dll丢失问题 下载修复方法
  • 2025年12月云南财税服务,昆明财税代理,云南财务服务公司推荐:企业实战选型与无忧合作指南! - 品牌鉴赏师
  • 从零搭建开源 APM:SigNoz 本地部署 + cpolar 固定域名远程访问实战
  • RabbitMQ如何保证消息不丢失?
  • Windows系统文件msaudite.dll损坏 下载修复方法
  • Windows系统文件MSCDRUN.DLL丢失损坏 下载修复方法
  • 为什么顶级公司都在抢着部署Open-AutoGLM?内部架构首次曝光