软件测试/测试开发丨Web自动化 PageObject设计模式

news2024/12/27 12:13:02

点此获取更多相关资料

本文为霍格沃兹测试开发学社学员学习笔记分享
原文链接:https://ceshiren.com/t/topic/27167

一、page object 模式简介

  • 马丁福勒个人博客

  • selenium 官网

1.1、传统 UI 自动化的问题

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

二、page object 设计原则

2.1、POM 模式的优势

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

2.2、POM 建模原则

  • 字段意义

    • 不需要暴露页面内部的元素给外部
    • 不需要建模UI内的所有元素
  • 方法意义

    • 用公共的方法代表UI所提供的功能
    • 方法应该返回其他page object或者返回用于断言的数据
    • 同样的行为不同的结果可以建模为不同的方法
    • 不要在方法内断言

2.3、POM 使用方法

  • 把元素信息和操作细节封装到 PageObject 类中
  • 根据业务逻辑,在测试用例中链式调用

三、page object示例展示

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

  • 传统测试用例
from selenium import webdriver
from selenium.webdriver.common.by import By

class 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 By

class 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").text
        return name
  • PO 模式测试用例
from onSelenium.fei.page_objects.search_page import SearchPage

class TestSearch:
    def test_search(self):
        text = SearchPage().search_stock("阿里巴巴-SW")

        # 断言
        assert "阿里巴巴-SW" == text

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/972620.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微任务创建 -- queueMicrotask()

微任务创建方式: Promise.then(()>{})Mutation Observer()queueMicrotask() 本文主要介绍queueMicrotask()的使用。 queueMicrotask的使用 Window 或 Worker 接口的 queueMicrotask() 方法,将微任务加入队列以在控制返回浏览器的事件循环之前的安全…

Git 版本回退 超神步骤

Git 版本回退 一. 背景 多版本分支开发,合并版本问题太多,需要回滚到某次版本。我的git客服端工具是 sourcetree 二.操作步骤 2.1 切到当前需要回退版本的分支 2.2 右击需要具体某一个分支,这个分支就是你想切到的分支版本,具体…

正版软件 | CloudDrive 多云盘本地挂载管理工具

前言: CloudDrive 是一个强大的多云盘管理工具,提供一站式的多云盘解决方案,包括云盘本地挂载。旨在无缝集成多个云存储服务,统一整合到一个界面。轻松管理和访问所有云存储服务,无需在不同的应用程序和界面之间切换。…

虚拟现实vr元宇宙井下危险隐患排查模拟实训稳固企业生产

数字化时代,职业教育正面临着前所未有的挑战和机遇,元宇宙的兴起,借助元宇宙平台进行钻井虚拟教学实验,基于元宇宙数字空间搭建更丰富、逼真、安全、灵活的实验环境,成为石油行业教育创新的催化剂。 一、降低实验成本 …

Excel·VBA二维数组组合函数的应用实例

看到一个问题《关于#穷举#的问题,如何解决?(语言-开发语言)》,对同一个数据存在“是/否”2种状态,判断其是否参与计算,并输出一系列数据的“是/否”状态的结果 目录 方法1:二维数组组合函数结果 方法2&am…

树上钟同步

#include<cstdio> #include<cstring> #include<vector> using namespace std;const int N 2505; int ori[N], f[N]; vector<int> edge[N]; // 邻接表的简单实现形式void dfs(int u, int fa) {for (int v : edge[u]) {if (v fa) continue;dfs(v, u);f…

网络协议从入门到底层原理学习(一)—— 简介及基本概念

文章目录 网络协议从入门到底层原理学习&#xff08;一&#xff09;—— 简介及基本概念一、简介1、网络协议的定义2、网络协议组成要素3、广泛的网络协议类型网络通信协议网络安全协议网络管理协议 4、网络协议模型对比图 二、基本概念1、网络互连模型2、计算机之间的通信基础…

Prompt Tuning训练过程

目录 0. 入门 0.1. NLP发展的四个阶段&#xff1a; Prompt工程如此强大&#xff0c;我们还需要模型训练吗&#xff1f; - 知乎 Prompt learning系列之prompt engineering(二) 离散型prompt自动构建 Prompt learning系列之训练策略篇 - 知乎 ptuning v2 的 chatglm垂直领域训练记…

【zookeeper】zookeeper日常运维

本文将分享一些zookeeper在日常使用中一些维护经验。 zookeeper清理快照 脚本或者命令清理 zookeeper长时间运行&#xff0c;快照逐渐增多可能造成服务器磁盘被占满的情况&#xff0c;但我们不能贸然用rm命令删除快照文件&#xff0c;如果直接删完会导致丢失好多数据&#x…

【Yellowbrick】特征可视化分析

Yellowbrick特征可视化分析 ⭐Yellowbrick⭐特征分析可视化⭐Rank1D⭐Rank2D ⭐Yellowbrick Yellowbrick是一个用于可视化机器学习模型和评估性能的Python库。它提供了一系列高级可视化工具&#xff0c;帮助数据科学家和机器学习从业者更好地理解、调试和优化他们的模型。 它在…

【【STM32-29正点原子版本串口发送传输实验】

STM32-29正点原子版本串口发送传输实验 通过串口接收或发送一个字符 例程目的 开发板上我们接入的是实现异步通信的UART接口 USB转串口原理图 我们一步步分析 PA9是串口1 的发送引脚 PA10是串口1 的接受引脚 。因为我们现在只是用到异步收发器功能&#xff0c;所以我们现…

应用可视化流程设计,实现提质增效流程化办公!

如果想要实现提高办公效率的目的&#xff0c;显然采用传统的办公方式是无法实现的。如今&#xff0c;在低代码技术平台深入无纸化办公的当下&#xff0c;应用可视化流程设计软件&#xff0c;可以借助其灵活、易操作、可视化、轻量级等优势特点&#xff0c;助力广大用户实现流程…

图解SQL查询之去重技巧:如何使用DISTINCT对数据进行去重

使用 SQL 的 DISTINCT 关键字&#xff0c;可以去除重复的数据记录&#xff0c;只保留不同的记录。 以下是用到的表。 例如&#xff0c;要获取所有学生所在班级的唯一班级ID。

工业4G路由器的户外组网与无人值守场景应用

工业4G路由器是专为不便电缆布线的工业或日晒雨淋网络不畅的户外环境所设计的网络设备。它能够在没有光纤宽带的情况下使用插卡的方式提供4G或无线WiFi的网络支持。具备工业级防水功能&#xff0c;能够在户外环境下进行网络部署&#xff0c;并实现无人值守运行。工业4G路由器还…

使用Xshell串口通过Ymodem协议发送文件

一. 虚拟串口 首先使用虚拟串口软件Free Virtual Serial Ports&#xff08;下载链接&#xff09;创建一对虚拟串口&#xff0c;如图COM1和COM2&#xff0c;然后COM1用Xshell连接&#xff0c;COM2用串口助手连接&#xff0c;二者连接的波特率需一致&#xff1b;Xshell创建串口连…

css中的z-index是什么

css中的z-index是什么 在 CSS 中&#xff0c;有一个属性可以显式控制 HTML 元素的堆叠顺序&#xff1a;z-index。具有较高值的​​元素就会出现在顶部&#xff1a; <style>.box {position: relative;width: 50px;height: 50px;border: 3px solid;background: silver;}.…

【HAL库】STM32F407----内部Flash的读写

【HAL库】STM32CubeMX开发----STM32F407----目录 一、STM32存储器介绍 STM32存储器分为以下两种&#xff1a; 1. 随机存储器—RAM RAM是与CPU直接交换数据的内部存储器&#xff0c;也叫主存&#xff08;内存&#xff09;。它可以随时读写&#xff0c;而且速度很快&#xff0…

记录--移动端的双击事件好不好用?

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 前言 2023年了&#xff0c;我不允许还有人不会自己实现移动端的双击事件。 过来&#xff0c;看这里&#xff0c;不足 50 行的代码实现的双击事件。 听笔者娓娓道来。 dblclick js原生有个dblclick双击…

大文件上传demo,前端基于Uppy,后端基于koa

前言 文件上传基本上所有的管理系统之类的项目都有这么一个功能。因为使用了Element&#xff0c;可以方便的使用 其提供的Upload组件&#xff0c;对于普通上传来说基本上就够用了。但是有时候会涉及到大文件上传的需求&#xff0c;这时就会面临一些问题&#xff1a;比如文件上…

使用QPixmap显示图片

在QT中&#xff0c;经常需要我们显示图片&#xff08;作为背景&#xff0c;游戏元素&#xff0c;菜单背景&#xff0c;等待&#xff09;。 本文将用最简洁的方法介绍如何将图片素材显示在指定控件的指定位置。 一.基础知识 QPixmap 该类可以加载&#xff08;load&#xff0…