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

Web自动化测试 —— PageObject设计模式!

一、page object 模式简介

1.1、传统 UI 自动化的问题

  • 无法适应 UI 频繁变化
  • 无法清晰表达业务用例场景
  • 大量的样板代码 driver/find/click

二、page object 设计原则

2.1、POM 模式的优势

  • 降低 UI 变化导致的测试用例脆弱性问题
  • 让用例清晰明朗,与具体实现无关

2.2、POM 建模原则

  • 字段意义
    • 不需要暴露页面内部的元素给外部
    • 不需要建模UI内的所有元素
  • 方法意义
    • 用公共的方法代表UI所提供的功能
    • 方法应该返回其他page object或者返回用于断言的数据
    • 同样的行为不同的结果可以建模为不同的方法
    • 不要在方法内断言

2.3、POM 使用方法

  • 把元素信息和操作细节封装到 PageObject 类中
  • 根据业务逻辑,在测试用例中链式调用
现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036

三、page object示例展示

3.1、搜索场景:传统线性脚本(Python)

  • 传统测试用例
from selenium import webdriver
from selenium.webdriver.common.by import Byclass TestSearch:def test_search(self):# 初始化浏览器self.driver = webdriver.Chrome()self.driver.get("https://xueqiu.com/")self.driver.implicitly_wait(3)# 输入搜索关键词self.driver.find_element(By.NAME, "q").send_keys("阿里巴巴-SW")# 点击搜索按钮self.driver.find_element(By.CSS_SELECTOR, "i.search").click()# 获取搜索结果name = self.driver.find_element(By.XPATH, "//table//strong").text# 断言assert name == "阿里巴巴-SW"

3.2、POM 脚本(Python)

  • 股票页面 PageObject
from selenium import webdriver
from selenium.webdriver.common.by import Byclass SearchPage:__INPUT_SEARCH = (By.NAME, "q")__BUTTON_SEARCH = (By.CSS_SELECTOR, "i.search")__SPAN_STOCK = (By.XPATH, "//table//strong")def __init__(self):self.driver = webdriver.Chrome()self.driver.implicitly_wait(3)self.driver.get("https://xueqiu.com/")def search_stock(self, stock_name: str):self.driver.find_element(*self.__INPUT_SEARCH).send_keys(stock_name)self.driver.find_element(*self.__BUTTON_SEARCH).click()name = self.driver.find_element(By.XPATH, "//table//strong").textreturn name
  • PO 模式测试用例
from onSelenium.fei.page_objects.search_page import SearchPageclass TestSearch:def test_search(self):text = SearchPage().search_stock("阿里巴巴-SW")# 断言assert "阿里巴巴-SW" == text

END今天的分享就到此结束了~!点赞关注不迷路  

http://www.lryc.cn/news/220198.html

相关文章:

  • 七月论文审稿GPT第2版:从Meta Nougat、GPT4审稿到Mistral、LongLora
  • Unreal Engine 学习笔记 (1)—— 日夜交替
  • leetcode:189. 轮转数组(python3解法)
  • 基于PHP + MySQL实现的文章内容管理系统源码+数据库,采用前后端分离的模板和标签化方式
  • 这可能是全网最晚的低代码技术总结
  • leetcode2054
  • c面向对象编码风格(上)
  • 【星海出品】VUE(六)
  • 华为政企闪存存储产品集
  • 【项目源码】反编译Java字节码生成源码
  • 技术分享 | 测试人员必须掌握的测试用例
  • Rabbit的高可用机制
  • 函数调用指令, 返回机制分析(x86_64)
  • mkl库配置
  • MPLAB X IDE 仿真打断点提示已中断的断点?
  • Appium 移动端自动化测试,触摸(TouchAction) 与多点触控(MultiAction)
  • 大厂面试题-innoDB如何解决幻读
  • 深度学习之基于Tensorflow人脸面部表情识别系统
  • centos7安装oxidized备份软件
  • 技术分享 | App测试时常用的adb命令你都掌握了哪些呢?
  • JMeter的使用——傻瓜式学习【下】
  • 嵌入式中利用VS Code 远程开发原理
  • 【多媒体文件格式】MP4、MPG、TS、3GP、3G2、3GPA
  • 学习Opencv(蝴蝶书/C++)相关——1. 前言 和 第1章.概述
  • 【数据分享】8个城市的共享单车数据(数据量约10亿条\免费获取)
  • 软件测试进阶篇----移动端测试
  • 偏序关系用分治优化建图:ARC165F
  • StripedFly恶意软件:悄无声息运行5年,感染百万设备
  • Flink SQL DataGen Connector 示例
  • 【监控指标】监控系统-prometheus、grafana。容器化部署。go语言 gin框架、gRPC框架的集成