当前位置: 首页 > 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.jsqmd.com/news/128875/

相关文章:

  • 讯飞星火认知大模型联合适配:语音交互+文档理解双突破
  • 创业公司最小可行性产品(MVP):三天上线智能客服
  • 2025年终管道非开挖修复公司推荐排行榜单:五家服务商综合对比与选择指南 - 十大品牌推荐
  • 2025年口碑好的太阳能路灯批发厂家推荐及选购参考榜 - 品牌宣传支持者
  • 软件测试的知识体系构建与传播路径
  • 企业知识库软件如何选择?2025年年终主流平台实测对比与5款专业推荐 - 十大品牌推荐
  • 深入解析:JSR223后置处理程序用法详解:JMeter复杂响应处理的终极方案
  • 虚拟偶像后台支撑:为数字人提供持续学习的能力
  • 服务器出问题不用慌!Netdata+cpolar,随时随地监控系统状态
  • anything-llm用户故事征集:真实案例激发潜在客户共鸣
  • 可持续智慧城市解决方案的投资回报分析
  • 2025年比较不错的ukca认证机构推荐,ukca认证大型机构全解析 - 工业品牌热点
  • 【独家首发】Open-AutoGLM开源代码获取路径全揭秘(附内测邀请码)
  • LangFlow法律文书自动生成系统搭建步骤
  • 快速理解Proteus仿真软件对Arduino的支持能力
  • 河北瑞动包装科技怎么样/技术实力如何/有实力吗测评指南 - myqiye
  • 模型量化:降低AI Agent的硬件需求
  • v-scale-screen实现全屏自适应的深度剖析
  • 苏州远创消防科技的品牌知名度高吗?产品更新快吗? - 工业推荐榜
  • 2025年电动挡烟垂壁可靠型制造商推荐排行榜,精选电动挡烟垂壁源头厂家测评 - mypinpai
  • 个性化推荐引擎:基于历史交互优化后续问答质量
  • 2025年度电动挡烟垂壁推荐供应商排名:看哪家实力不错? - mypinpai
  • Linux-奇怪的No such file or directory - 指南
  • 新手入门树莓派安装拼音输入法的系统学习路径
  • 2025年好的彩钢夹心板价格、夹心板厂推荐、夹心板专业定制厂全解析 - 工业推荐榜
  • 【程序员必藏】Open-AutoGLM开源项目实战指南:从入门到精通
  • anything-llm安全性评估:数据隔离与加密传输机制解析
  • 【AI大模型部署必备技能】:Open-AutoGLM本地安装实战详解
  • GitHub Star激励计划:鼓励更多人参与anything-llm生态建设
  • 基于anything-llm的保险条款解释助手开发思路