二、Java-封装playwright UI自动化(根据官网执行步骤,首先封装BrowserFactory枚举类及BrowserManager)

前言

查看playwright官网,api文档了解到,playwright的基本步骤:
1、实例化一个playwright
2、启动一个浏览器类型
3、打开一个页面
在这里插入图片描述

所以,在封装时需要有一个浏览器工厂类,定义不同的浏览器类型,在配置文件中指定用例需要使用的浏览器类型,我这里封装的是一个枚举类

1、浏览器工厂枚举类(BrowserFactory)

浏览器工厂枚举,其中定义一个抽象方法
不同的浏览器类型中重写抽象方法传入Playwright对象,用于创建和管理浏览器实例,返回一个浏览器实例。

public enum BrowserFactory {/*** CHROMIUM枚举类实现浏览器初始化接口* 枚举负责使用Chromium浏览器类型创建和配置浏览器实例*/CHROMIUM {/*** 初始化Chromium浏览器* @param playwright Playwright实例,用于创建和管理浏览器* @return 返回初始化后的Browser实例*/@Overridepublic Browser initialize(final Playwright playwright) {// 使用Playwright实例初始化Chromium浏览器// 配置浏览器启动选项,包括无头模式和慢动作选项return playwright.chromium().launch(new BrowserType.LaunchOptions().setHeadless(configuration().headless()) // 根据配置决定是否以无头模式运行.setSlowMo(configuration().slowMotion()) // 根据配置设置慢动作速度);}},FIREFOX {/*** 重写initialize方法以初始化Firefox浏览器实例* 此方法选择Firefox作为浏览器类型,并根据配置选项启动浏览器* 主要目的是根据配置文件中定义的参数,如是否无头模式和慢动作设置,来启动浏览器* @param playwright Playwright实例,用于创建和管理浏览器实例* @return 返回一个初始化后的Browser实例*/@Overridepublic Browser initialize(final Playwright playwright) {// 使用Playwright实例初始化Firefox浏览器// 配置浏览器启动选项,包括是否以无头模式运行和是否启用慢动作模式// 无头模式和慢动作设置都是通过configuration方法获取的return playwright.firefox().launch(new BrowserType.LaunchOptions().setHeadless(configuration().headless()).setSlowMo(configuration().slowMotion()));}};/*** 初始化浏览器实例** @param playwright Playwright对象,用于创建和管理浏览器实例* @return Browser 返回一个浏览器实例*/public abstract Browser initialize(Playwright playwright);
}

2、封装BrowserManager类

定义一个,后面根据PO模式,封装测试基础类时调用:
在这里插入图片描述

public final class BrowserManager {private BrowserManager() {}/*** 根据配置信息获取并初始化指定的浏览器实例* 该方法使用配置文件中指定的浏览器类型,并通过Playwright实例来创建和初始化浏览器* 主要用于在测试中创建浏览器实例,以便进行后续的测试操作* @param playwright Playwright实例,用于创建和管理浏览器实例* @return 返回初始化后的Browser实例*/public static Browser browser(final Playwright playwright) {// 根据配置信息获取浏览器类型,并调用相应的初始化方法创建浏览器实例return BrowserFactory.valueOf(configuration().browser().toUpperCase()).initialize(playwright);}
}

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

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

相关文章

【问题解决】Jenkins使用File的exists()方法判断文件存在,一直提示不存在的问题

小剧场 最近为了给项目组提供一个能给Java程序替换前端、后端的增量的流水线,继续写上了声明式流水线。 替换增量是根据JSON配置文件去增量目录里去取再替换到对应位置的,替换前需要判断增量文件是否存在。 判断文件是否存在?作为一个老Ja…

神策数据严正声明

近日,我们发现有不法分子冒充神策网络科技(北京)有限公司(以下简称”神策数据”)的名义,发布虚假的招聘广告、面试邀请,企图误导求职者并进行不法行为。对此,我司发布严正声明&#…

ICLR 2025|香港浸会大学可信机器学习和推理课题组专场

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! AITIME 01 ICLR 2025预讲会团队专场 AITIME 02 专场信息 01 Noisy Test-Time Adaptation in Vision-Language Models 讲者:曹晨涛,HKBU TMLR Group一年级博士生,目前关注基础…

MySQL增量更新数据:高效同步策略与PanguSync实战指南

Mysql增量更新数据软件下载https://pan.baidu.com/s/1WesHaKGO7uQMhPNE-BTDmg?pwdabcd#list/path%2F 在数据驱动的商业环境中,实时数据同步已成为企业数字化转型的关键。本文将深入探讨MySQL增量更新的核心技术,并详细解析如何通过PanguSync工具实现高…

无人机灯光原理与应用解析!

工作原理 LED光源:LED因其高效、长寿命、高亮度和轻便等优点,成为无人机灯光的主要光源。 电路控制:通过微控制器或飞行控制器调节电流,控制灯光的开关、亮度和颜色。 信号传输:灯光控制信号通过无线或有线方式从遥…

51c自动驾驶~合集52

我自己的原文哦~ https://blog.51cto.com/whaosoft/13383340 #世界模型如何推演未来的千万种可能 驾驶世界模型(DWM),专注于预测驾驶过程中的场景演变,已经成为追求自动驾驶的一种有前景的范式。这些方法使自动驾驶系统能够更…

lamp平台介绍

一、lamp介绍 网站: 静态 动态 php语言 .php 作用:运行php语言编写动态网站应用 lamp Linux Apache MySQL PHP PHP是作为httpd的一个功能模块存在的 二、部署lamp平台 1、测试httpd是否可正常返回PHP的响应 2、测试PHP代码是否可正常连接数据…

ROM修改进阶教程------修改安卓机型SELinux宽容的几种方式方法 以及第三方系统中如何关闭SELinux宽容

SELinux是一种强制访问控制安全机制,用于增强Linux系统的安全性。在某些情况下,可能需要对 SELinux 进行宽容设置,以满足特定的应用需求。当SELinux处于宽容模式时,系统允许违反安全策略的行为发生,但不会阻止这些行为,通常会在日志中记录这些违规事件。这与强制模式不同…

如何在 Aptos 上铸造 NFT

今天文章的第一部分将演示如何在 Aptos 上铸造 NFT,并使用 Moralis 轻松获取所有交易详细信息。在这里,我们将指导您完成使用 Aptos CLI 铸造活动门票 NFT 基本代币的过程。您还将了解如何完成初始设置步骤。此外,您还将了解如何获取 Moralis…

Springboot 梳理

一、Springboot 特性 方便创建可独立运行的spring应用程序直接内嵌Tomcat等服务简化了项目的构建配置为spring及第三方库提供自动配置提供生产级特性无需生成代码或者进行xml配置 二、四大核心 自动配置起步依赖命令行界面Actuator - 生成级的特性 三、自动配置的实现原理 …

C语言学习笔记-初阶(30)深入理解指针2

1. 数组名的理解 在上一个章节我们在使用指针访问数组的内容时,有这样的代码: int arr[10] {1,2,3,4,5,6,7,8,9,10}; int *p &arr[0]; 这里我们使用 &arr[0] 的方式拿到了数组第⼀个元素的地址,但是其实数组名本来就是地址&…

【Kubernetes 指南】基础入门——Kubernetes 基本概念(三)

三、Node 1、Node 简介 - Node 是 Pod 真正运行的主机,可以是物理机,也可以是虚拟机。 - 为了管理 Pod,每个 Node 节点 上至少要运行 container runtime( 比如 docker 或者 rkt )、kubelet 和 kube-proxy 服务。 2、…

电源测试系统有哪些可以利用AI工具的科技??

AI技术的发展对电源模块测试系统的影响是深远的,不仅协助系统提升了测试效率和精度,还推动了测试方法的创新和智能化。那么在电源测试系统中哪些模块可以利用AI工具实现自动化测试? 1. 自动化测试与效率提升 智能测试流程优化 AI算法可以自动优化测试…

解决Spring Boot中LocalDateTime返回前端数据为数组结构的问题

在Spring Boot开发中,处理日期时间数据是一个常见的需求。Java 8 引入了新的日期时间API,如LocalDateTime,它提供了更强大的日期时间处理功能。然而,在将LocalDateTime对象序列化为JSON时,可能会遇到返回为数组结构的问…

Redis---缓存穿透,雪崩,击穿

文章目录 缓存穿透什么是缓存穿透?缓存穿透情况的处理流程是怎样的?缓存穿透的解决办法缓存无效 key布隆过滤器 缓存雪崩什么是缓存雪崩?缓存雪崩的解决办法 缓存击穿什么是缓存击穿?缓存击穿的解决办法 区别对比 在如今的开发中&…

IntelliJ IDEA 2024.3.4 版本无法正常加载maven项目

报错如下: Possible solutions: - Check that Maven settings.xml does not contain http repositories - Check that Maven pom files do not contain http repository http://192.168.22.76:9003/repository/thirdparty/ - Check that Maven pom files do not co…

Select 下拉菜单选项分组

使用<select>元素创建下拉菜单&#xff0c;并使用 <optgroup> 元素对选项进行分组。<optgroup> 元素允许你将相关的 <option> 元素分组在一起&#xff0c;并为每个分组添加一个标签。 <form action"#" method"post"><la…

靶场(二)---靶场心得小白分享

开始&#xff1a; 看一下本地IP 21有未授权访问的话&#xff0c;就从21先看起 PORT STATE SERVICE VERSION 20/tcp closed ftp-data 21/tcp open ftp vsftpd 2.0.8 or later | ftp-anon: Anonymous FTP login allowed (FTP code 230) |_Cant get dire…

【JavaScript — 前端快速入门】 JavaScript 引入方式

JavaScript 1. JavaScript 介绍 1.1 什么是JavaScript? 最初在网景公司&#xff0c;该语言命名为 LiveScript&#xff0c;当时网景公司认为&#xff0c;Java 作为当时最流行的编程语言&#xff0c;带有 “Java” 的名字有助于这门新生语言的传播&#xff0c;将 LiveScript 命名…

5c/c++内存管理

1. C/C内存分布 int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] { 1, 2, 3, 4 };char char2[] "abcd";const char* pChar3 "abcd";int* ptr1 (int*)malloc(sizeof(int) * 4);i…