Selenium基于POM的自动化测试实践

news2025/1/12 16:13:53

什么是Page Object模式

Page Object 见名知意,就是页面对象,并将页面元素定位方法和元素操作进行分离。在实际自动化测试实战过程中,我们一般对脚本的实现分为三层:
(1)对象层: 用于存放页面元素定位和控件操作
(2)逻辑层: 则是一些封装好的功能用例模块
(3)业务层: 则是我们真正的测试用例的操作部分

PageObject 的优点

  • 减少代码冗余
  • 业务和实现分离
  • 降低代码维护成本

PageObject 的六大原则

  1. The public methods represent the services that the page offers/公共方法表示页面提供的服务

  2. Try not to expose the internals of the page/尽量不要暴露页面的内部

  3. Generally don’t make assertions/Page设计中不要出现断言,应该写在测试用例类中

  4. Methods return other PageObjects/方法返回其他PageObject

  5. Need not represent an entire page/不需要表示整个页面

  6. Different results for the same action are modeled as different methods/相同操作的不同结果被建模为不同的方法

示例(登录百度一下)

一、构建PO模型

项目的整个PO结构如下
在这里插入图片描述

二、基础层

首先是base目录下的basepage.py

在这里插入图片描述
在这里插入图片描述

这里作为基类,封装定位、点击、输入等基本操作以及可以增加异常时截图的方法

三、对象层、逻辑层

page目录下的login_page.py
在这里插入图片描述
封装这个页面基本所有可能的操作,注意方法的最后最好可以返回接下来要跳转的页面对象(如登录后就会跳转到首页)

page_element目录下是单独为每个页面的元素做维护而建立的模块文件
在这里插入图片描述
还有common目录下
在这里插入图片描述
constant.py内定义一下常量,logger.py为日志打印

testcase目录
在这里插入图片描述
在这里插入图片描述
编写真正的测试用例,可以再次进行断言、添加测试报告等。

四、运行结果

DevTools listening on ws://127.0.0.1:50996/devtools/browser/8d43e43e-ca09-4513-b9bd-0517cf980a0e
INFO    2023-03-01 10:32:23,623 [test_login.py_16]      ------用例前置工作:打开浏览器------
INFO    2023-03-01 10:32:25,086 [basepage.py_36]        查找百度首页-登录按钮 - 元素('id', 's-top-loginbtn')成功!
INFO    2023-03-01 10:32:25,123 [basepage.py_44]        点击:百度首页-登录按钮 - 元素('id', 's-top-loginbtn')成功
INFO    2023-03-01 10:32:28,032 [basepage.py_36]        查找输入登录账号 - 元素('id', 'TANGRAM__PSP_11__userName')成功!
INFO    2023-03-01 10:32:28,129 [basepage.py_54]        输入:在输入登录账号 - 元素('id', 'TANGRAM__PSP_11__userName')输入文本值(xxx)成功
INFO    2023-03-01 10:32:28,157 [basepage.py_36]        查找输入登录密码 - 元素('id', 'TANGRAM__PSP_11__password')成功!
INFO    2023-03-01 10:32:28,282 [basepage.py_54]        输入:在输入登录密码 - 元素('id', 'TANGRAM__PSP_11__password')输入文本值(xxx)成功
INFO    2023-03-01 10:32:28,332 [basepage.py_36]        查找点击登录按钮 - 元素('id', 'TANGRAM__PSP_11__submit')成功!
INFO    2023-03-01 10:32:28,603 [basepage.py_44]        点击:点击登录按钮 - 元素('id', 'TANGRAM__PSP_11__submit')成功
ERROR   2023-03-01 10:32:48,863 [basepage.py_66]        查找登录成功与否 - 元素('class name', 'user-name')失败!



DevTools listening on ws://127.0.0.1:51175/devtools/browser/213f651a-8cb3-4d27-9f03-db5466c6614e
INFO    2023-03-01 10:32:54,779 [test_login.py_16]      ------用例前置工作:打开浏览器------
INFO    2023-03-01 10:32:56,132 [basepage.py_36]        查找百度首页-登录按钮 - 元素('id', 's-top-loginbtn')成功!
INFO    2023-03-01 10:32:56,172 [basepage.py_44]        点击:百度首页-登录按钮 - 元素('id', 's-top-loginbtn')成功
INFO    2023-03-01 10:32:58,292 [basepage.py_36]        查找输入登录账号 - 元素('id', 'TANGRAM__PSP_11__userName')成功!
INFO    2023-03-01 10:32:58,374 [basepage.py_54]        输入:在输入登录账号 - 元素('id', 'TANGRAM__PSP_11__userName')输入文本值(xxx)成功
INFO    2023-03-01 10:32:58,406 [basepage.py_36]        查找输入登录密码 - 元素('id', 'TANGRAM__PSP_11__password')成功!
INFO    2023-03-01 10:32:58,512 [basepage.py_54]        输入:在输入登录密码 - 元素('id', 'TANGRAM__PSP_11__password')输入文本值(xxx)成功
INFO    2023-03-01 10:32:58,539 [basepage.py_36]        查找点击登录按钮 - 元素('id', 'TANGRAM__PSP_11__submit')成功!
INFO    2023-03-01 10:32:58,600 [basepage.py_44]        点击:点击登录按钮 - 元素('id', 'TANGRAM__PSP_11__submit')成功
INFO    2023-03-01 10:33:09,474 [basepage.py_36]        查找登录成功与否 - 元素('class name', 'user-name')成功!
INFO    2023-03-01 10:33:09,523 [basepage.py_68]        查找登录成功与否 - 元素('class name', 'user-name')成功!
INFO    2023-03-01 10:33:09,524 [test_login.py_24]      ------用例后置工作:关闭浏览器------
F



----------------------------------------------------------------------
Ran 2 tests in 50.878s

FAILED (failures=1)

以上就是Web端Selenium基于OPM模型自动化测试框架的大体模式,实际上还有很多可以优化的地方,比如增加测试报告、测试结果自动发送邮件、实现CI/CD等。或许后续有时间可以继续做补充优化分享给大家。

以上就是本期文章的所有内容,感谢观看,如果对您有帮助请点赞关注+收藏,一键三连,多谢支持!

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

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

相关文章

《Nacos(3) - 集群搭建(详细)》

《Nacos(3) - 集群搭建》 提示: 本材料只做个人学习参考,不作为系统的学习流程,请注意识别!!! 《Nacos3 - 集群搭建》《Nacos(3) - 集群搭建》1.集群结构图2.搭建集群2.1.初始化数据库2.2.下载nacos2.3.配置Nacos2.4.启动2.5.nginx反向代理2.6.优化1.集群结构图 官方给出的Na…

【JavaSE】对象的比较

哈喽,大家好!我是保护小周ღ,本期为大家带来的是Java中自定义类型(对象)的三种比较方式,equals 方法, Comparable 泛型接口, Comparator 泛型接口 。在日常编程中,我们常常会需要比较的问题&…

cuda版本,pytorch(GPU)版本的选择和下载

cuda版本: 1.Nvidia控制面板里的cuda版本, 或使用nvidia-smi命令显示的cuda版本 是cuda的driver api版本 2.nvcc -V中的cuda版本,是cuda的runtime api版本,即cudatoolkit的版本 cudatoolkit的版本不能高于cuda driver api的版本&#xff…

23.2.28 Staffing System

员工管理系统功能介绍: 1)服务器负责管理所有员工表单(以数据库形式),其他客户端可通过网络连接服务器来查询员工表单。 2)需要账号密码登陆,其中需要区分管理员账号还是普通用户账号。 3&am…

聚观早报 | 苹果2024年放弃高通;腾讯回应进军类 ChatGPT

今日要闻:苹果2024年放弃高通;腾讯回应进军类 ChatGPT;小米发布无线AR眼镜探索版;50%的美国企业已在使用ChatGPT;Snap推出ChatGPT驱动的聊天机器人 苹果2024年放弃高通 高通公司 CEO 兼总裁克里斯蒂亚诺・安蒙&#xf…

Node.js 是个啥?

趣学 Node.js - 死月 - 掘金小册带你重新体悟 Node.js 之美。「趣学 Node.js」由死月撰写,1923人购买https://s.juejin.cn/ds/SYVvuDw/ 在这里,我们先装作对 Node.js 不了解,从头来过吧。你有没有假装不了解 Node.js 我不知道,但…

界面开发(2)--- 使用PyQt5制作用户登陆界面

使用PyQt5制作用户登陆界面 上篇文章已经介绍了如何配置PyQt5环境,这篇文章在此基础上展开,主要记录一下如何使用 PyQt5 制作用户登陆界面,并对一些基础操作进行介绍。 下面是具体步骤,一起来看看吧! 1. 打开 Pychar…

【IoT】2023裁员潮还在继续,构建规划能力也许是一剂良方

今天要分享的主题是华为的市场管理方法论。 市场管理这个词总体来说还是有些抽象,本质上来看或者说从个人的角度来看,其实就是一种规划的能力。 无论是创业,还是作为职场人,规划能力必将是你不可或缺的一种基础能力。 尤其是在这样…

Maven说明

目录 1.说明 2.详细说明 3.Maven模型 4.Maven常用的命令 5.Maven生命周期 6.Maven坐标 7.依赖管理与依赖范围 1.说明 Maven是专门用于管理和构建Java项目的工具,它是基于项目对象模型(POM)的概念,主要功能有: 提供了一套标准化的项目…

Ubuntu 下NGINX 的简单使用

1.NGINX的安装与卸载 1.1.安装NGINX apt-get install nginx1.2.NGINX操作命令 service nginx start #启动 service nginx reload #重新加载配置文件 service nginx restart #重启 service nginx status #查看运行状态 1.3.卸载NGINX apt-get remove nginx nginx-common #…

28 openEuler管理网络-配置主机名

文章目录28 openEuler管理网络-配置主机名28.1 简介28.2 使用hostnamectl配置主机名28.2.1 查看所有主机名28.2.2 设定所有主机名28.2.3 设定特定主机名28.2.4 清除特定主机名28.2.5 远程更改主机名28.3 使用nmcli配置主机名28 openEuler管理网络-配置主机名 28.1 简介 hostn…

XXL-JOB的基本使用

1、执行器 1.1下边配置执行器 下边配置执行器&#xff0c;执行器负责与调度中心通信接收调度中心发起的任务调度请求。 1、首先在媒资管理模块的service工程添加依赖&#xff0c;在项目的父工程已约定了版本2.3.1 XML <dependency><groupId>com.xuxueli</gro…

【Web安全社工篇】——水坑攻击

作者名&#xff1a;白昼安全主页面链接&#xff1a; 主页传送门创作初心&#xff1a; 以后赚大钱座右铭&#xff1a; 不要让时代的悲哀成为你的悲哀专研方向&#xff1a; web安全&#xff0c;后渗透技术每日鸡汤&#xff1a;努力赚钱不是因为爱钱“水坑攻击”&#xff0c;黑客攻…

CVPR 2023 接收结果出炉!再创历史新高!录用2360篇!(附10篇最新论文)

点击下方卡片&#xff0c;关注“CVer”公众号AI/CV重磅干货&#xff0c;第一时间送达点击进入—>【计算机视觉】微信技术交流群2023 年 2 月 28 日凌晨&#xff0c;CVPR 2023 顶会论文接收结果出炉&#xff01;这次没有先放出论文 ID List&#xff0c;而是直接 email 通知作…

【C语言】位段

位段 一.简介 位段和结构体很相似。不同的是&#xff1a; 位段的成员&#xff1a;成员名 : 数字且其成员必须是整型(char、int、unsigned int……) 示例&#xff1a; struct S {char a : 3;char b : 2;char c : 7; };S就是一个位段类型&#xff0c;其成员a为占3个比特位的…

【趣味学Python】Python基础语法讲解

目录 编码 标识符 python保留字 注释 实例(Python 3.0) 实例(Python 3.0) 行与缩进 实例(Python 3.0) 实例 多行语句 数字(Number)类型 字符串(String) 实例(Python 3.0) 空行 等待用户输入 实例(Python 3.0) 同一行显示多条语句 实例(Python 3.0) 多个语句构…

【Day02数据结构 空间复杂度】

最近太忙了都好久没有更新博客了,太难了,抽空水一篇文章,大佬们多多支持. 上篇:时间复杂度分析 目录 前言 一、空间复杂度概念&#xff1f; 二、实例展示 三、.有复杂度要求的算法题练习 1.题目链接&#xff1a;力扣--消失的数字 2.题目链接&#xff1a;力扣--旋转数组 总结: 1…

去课工场成都基地学Java,可行吗?

当然可行&#xff0c;不管是你选择自学Java&#xff0c;还是去培训机构学习都是非常不错的职业选择。选择好赛道能让你的未来收获更多。 2023年了&#xff0c;随着数字经济的发展&#xff0c;互联网已经渗入我们生活工作的方方面面&#xff0c;现在即使是吃个饭点个餐很多时候…

SpringBoot解决跨域方式

跨域是指在 Web 应用中&#xff0c;一个服务器资源或应用访问另一个服务器资源或应用的资源时候。由于浏览器的同源策略&#xff0c;一般情况下同一个域中的网站或应用可以互相访问资源&#xff0c;但跨域访问会被浏览器拒绝。浏览器出于安全考虑&#xff0c;会限制跨域访问&am…

深度学习领域的多任务学习综述

文章目录前言1. 什么是多任务学习&#xff1f;2. 为何要使用多任务学习&#xff1f;3. 多任务学习有哪些类型&#xff1f;3.1 基于硬参数共享的多任务学习3.2 基于软参数共享的多任务学习4. 为什么多任务学习能提升模型的性能&#xff1f;4.1 隐藏数据扩充&#xff08;Implicit…