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

点此获取更多相关资料

本文为霍格沃兹测试开发学社学员学习笔记分享
原文链接: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 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

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

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

相关文章

Goland2023版新UI的debug模式调试框按钮功能说明

一、背景 Jetbrains家的IDE的UI基本都是一样的,debug模式的调试框按钮排列也是一致的,但是在我使用Goland2023版的新UI时,发现调试框的按钮变化还是很大的,有一些按钮被收起来了,如果看之前的博客会发现有一些文中的旧…

stm32f1xx单片机拦截中断源代码

这个是实现后的效果,可以看到已经没有中断的效果了 这个是拦截前的效果可以看到电平是在变化的 实现原理非常简单:一句话搞定: if(TIM2->CNTTIM2->ARR-5)TIM2->CNT-5; 以下是完整的代码:是用来补充说明和筹字数的 /* …

图解 LeetCode 算法汇总——回溯

本文首发公众号:小码A梦 回溯算法是一种常见的算法,常见用于解决排列组合、排列问题、搜索问题等算法,在一个搜索空间中寻找所有的可能的解。通过向分支不断尝试获取所有的解,然后找到合适的解,找完一个分支后再往回搜…

GNSS融合策略

文章目录 一、背景二、松耦合融合策略1. 信息有效性判断2. 坐标系对齐3. 观测方程a.杆臂补偿b.速度融合c.位置融合1) 置信度设置 d. 航向yaw融合 4.观测性分析1)状态表示在VIO坐标系下的观测性分析2)状态表示在GPS ENU坐标系下的观测性分析 三、紧耦合融…

Bytebase 和 GitLab 签署 Technology Partner 技术合作伙伴协议

Bytebase 和 GitLab 签署技术合作伙伴协议,携手为开发者提供流畅的数据库协作开发和管理体验。 GitLab 是世界领先的开源 AI 驱动 DevSecOps 平台,旨在帮助开发者团队更好协作、更高效交付软件。Bytebase 是一款为 DevOps 团队准备的数据库 CI/CD 工具&a…

drone的简单使用

(一)简介 Drone 是一个基于Docker容器技术的可扩展的持续集成引擎,用于自动化测试、构建、发布。每个构建都在一个临时的Docker容器中执行,使开发人员能够完全控制其构建环境并保证隔离。开发者只需在项目中包含 .drone.yml文件&…

数据结构和算法(2):向量

抽象数据类型 数组到向量 C/C 中,数组A[]中的元素与[0,n)内的编号一一对应,A[0],A[1],...,A[n-1];反之,每个元素均由(非负)编号唯一指代,并可直接访问A[i] 的物理地址 Ai s,s 为单…

docker系列(2) - 常用命令篇

文章目录 2. docker常用命令2.1 参数说明(tomcat案例)2.2 基本命令2.3 高级命令2.4 其他 2. docker常用命令 2.1 参数说明(tomcat案例) 注意如果分成多行,\后面不能有空格 # 拉取运行 docker run \ -d \ -p 8080:8080 \ --privilegedtrue \ --restartalways \ -m…

系统架构设计师(第二版)学习笔记----嵌入式系统及软件

【原文链接】系统架构设计师(第二版)学习笔记----嵌入式系统及软件 文章目录 一、嵌入式系统1.1 嵌入式系统的组成1.2 嵌入式系统的特点1.3 嵌入式系统的分类 二、嵌入式软件2.1 嵌入式系统软件分层2.2 嵌入式软件的主要特点 三、安全攸关软件的安全性设…

自己的碎碎念集合

自己的碎碎念集合 2023-09-11 C语言定义 `int *p,q;` p, q类型是否一样2023-09-07 c++叠加三目运算符闰年计算法2023-08-13 一个小题目 A+B problem一、问题及解答关碍总结2023-07-26 C的2至36进制转换函数一、itoa()函数的示例代码总结2023-07-19 平面坐标下判断三角形以及输出…

十八、MySQL添加外键?

1、外键 外键是用来让两张表的数据之间建立联系,从而保证数据的一致性和完整性。 注意,父表被关联的字段类型,必须和子表被关联的字段类型一致。 2、实际操作 (1)初始化两张表格: 子表: 父…

哪个矩阵系统管理最好用?如何同时管理1000个账号和发布视频?

软件图片素材来自于公众号:生财风暴 关注进行领取价值1000元的采集软件,和呆头鹅批量剪辑和矩阵管理系统演示 实体店老板如何用抖音进行推广? 【方式一:找网红达人拍视频帮忙推广店铺,但是成本收费相对于比较高 ​【方…

PHP 排序函数使用方法,按照字母排序等操作

详解PHP排序方法使用 一、sort() 函数 用于对数组单元从低到高进行排序。 //数组 $data array(D,F,A,C,B); //排序 sort($data); //输出排版标签 echo "<pre>"; //打印数据 print_r($data);die;输出结果&#xff1a; 二、rsort() 函数 用于对数组单元从高到…

保姆级-微信小程序开发教程

一&#xff0c;注册微信小程序 如果你还没有微信公众平台的账号&#xff0c;请先进入微信公众平台首页&#xff0c;点击 “立即注册” 按钮进行注册。注册的账号类型可以是订阅号、服务号、小程序以及企业微信&#xff0c;我们选择 “小程序” 即可。 接着填写账号信息&#x…

怎样获取字符串数组的长度_使用sizeof(array) / sizeof(array[0])

使用sizeof() C、C中没有提供直接获取数组长度的函数&#xff0c;对于存放字符串的字符数组提供了一个strlen函数获取长度&#xff0c;那么对于其他类型的数组如何获取他们的长度呢&#xff1f; 其中一种方法是使用sizeof(array) / sizeof(array[0]), 在C语言中习惯上在使用时…

如何将两台Mac显示器设置为单个屏幕配置

​能够在扩展模式下将两个或多个外部显示器连接到Mac是一种解放的屏幕体验&#xff0c;但当每个显示器仍然像独立显示器一样工作时&#xff0c;会导致沮丧。 在这里&#xff0c;我们向你展示如何通过对系统设置进行一些简单的更改&#xff0c;使两个扩展屏幕看起来像一个屏幕。…

【代码随想录day24】不同的二叉搜索树

题目 给你一个整数 n &#xff0c;求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种&#xff1f;返回满足题意的二叉搜索树的种数。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;5示例 2&#xff1a; 输入&#xff1a;n 1 输出&#xf…

数据结构与算法基础-学习-32-选择排序之简单选择排序、堆排序

目录 一、简单选择排序基本思路 二、简单选择排序基本操作 三、简单选择排序算法思路 四、简单选择排序代码 1、SimpleSelectSortSentrySqQueue 五、简单选择排序算法分析 1、记录移动次数 2、记录比较次数 六、简单选择排序Linux环境编译测试 七、堆的定义 八、堆调…

A6120 Emerson 机箱地震振动监测器

A6120 Emerson 机箱地震振动监测器 艾默生过程管理公司宣布&#xff0c;PlantWeb数字工厂架构已经安装在化学工业CATCH(技术能力评估中心)培训中心&#xff0c;该中心位于北林肯郡格里姆斯比附近的Stallingborough。这座价值820万英镑的设施是为了满足行业对培训中心的需求而开…

教师如何私密发布成绩查询?

随着科技的不断发展&#xff0c;教育领域也逐渐引入了各种在线工具来提高教学效果和管理效率。其中&#xff0c;易查分作为一款功能强大的在线查询工具&#xff0c;帮助老师们更好的利用该工具进行成绩查询。 好消息&#xff01;博主给大家争取到的易查分福利&#xff0c;只需要…