使用Selenium-PO设计模式提高Web自动化测试效率

PO(page object)设计模式是在自动化中已经流行起来的一种易于维护和减少代码的设计模式。在自动化测试中,PO对象作为一个与页面交互的接口。测试中需要与页面的UI进行交互时,便调用PO的方法。这样做的好处是,如果页面的UI发生了更改,那么测试用例本身不需要更改,只需更改PO中的代码即可。

PO设计模式具有以下优点:

1、测试代码与页面的定位代码(如定位器或者其他的映射)相分离。

2、该页面提供的方法或元素在一个独立的类中,而不是将这些方法或元素分散在整个测试中。

这允许在一个地方修改由于UI变化所带来的所有修改。

通过一个简单的示例来说明页面对象。首先,思考一个不使用PO模式的自动化测试的典型案例:

/**** Tests login feature*/
public class Login {public void testLogin() {// 在登录页面上填写登录数据driver.findElement(By.name("user_name")).sendKeys("userName");driver.findElement(By.name("password")).sendKeys("my supersecret password");driver.findElement(By.name("sign-in")).click();// 登录后验证h1标签是否为Hello userNamedriver.findElement(By.tagName("h1")).isDisplayed();assertThat(driver.findElement(By.tagName("h1")).getText(), is("Hello userName"));}
}

如果你想学习web自动化测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的自动化测试教程,同时在线人数到达1000人,并且还有笔记可以领取及各路大神技术交流:798478386     


在华为工作了10年的大佬出的Web自动化测试教程,华为现用技术教程!_哔哩哔哩_bilibili在华为工作了10年的大佬出的Web自动化测试教程,华为现用技术教程!共计16条视频,包括:1. 【web自动化】主流Web自动化测试技术对比、2. 【web自动化】Selenium自动化测试环境一键搭建、3. 【web自动化】Selenium八大定位策略详解等,UP主更多精彩视频,请关注UP账号。https://www.bilibili.com/video/BV1sM4y1d7tq/?spm_id_from=333.337.search-card.all.click

这种方法有两个问题。

1、测试方法与定位器 (在此实例中为By.name)耦合过于严重。如果测试的用户界面更改了其定位器或登录名的输入和处理方式,则测试本身必须进行更改。

2、在对登录页面的所有测试中,同一个定位器会散布在其中。

可以在以下登录页面的示例中应用PO设计模式重写此示例。

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;/*** Page Object encapsulates the Sign-in page.*/
public class SignInPage {protected WebDriver driver;// <input name="user_name" type="text" value="">private By usernameBy = By.name("user_name");// <input name="password" type="password" value="">private By passwordBy = By.name("password");// <input name="sign_in" type="submit" value="SignIn">private By signinBy = By.name("sign_in");public SignInPage(WebDriver driver){this.driver = driver;if (!driver.getTitle().equals("Sign In Page")) {throw new IllegalStateException("This is not Sign In Page," +" current page is: " + driver.getCurrentUrl());}}/*** Login as valid user** @param userName* @param password* @return HomePage object*/public HomePage loginValidUser(String userName, String password) {driver.findElement(usernameBy).sendKeys(userName);driver.findElement(passwordBy).sendKeys(password);driver.findElement(signinBy).click();return new HomePage(driver);}
}

Home page的PO如下所示。

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;/*** Page Object encapsulates the Home Page*/
public class HomePage {protected WebDriver driver;// <h1>Hello userName</h1>private By messageBy = By.tagName("h1");public HomePage(WebDriver driver){this.driver = driver;if (!driver.getTitle().equals("Home Page of logged in user")) {throw new IllegalStateException("This is not Home Page of logged in user," +" current page is: " + driver.getCurrentUrl());}}/*** Get message (h1 tag)** @return String message text*/public String getMessageText() {return driver.findElement(messageBy).getText();}public HomePage manageProfile() {// Page encapsulation to manage profile functionalityreturn new HomePage(driver);}/* 提供登录用户主页所代表的服务的更多方法. 这些方法可能会返回更多页面对象.例如, 单击"撰写邮件"按钮可以返回ComposeMail类对象 */
}

那么,接下来的登录测试用例将使用这两个页面对象。

/**** Tests login feature*/
public class TestLogin {@Testpublic void testLogin() {SignInPage signInPage = new SignInPage(driver);HomePage homePage = signInPage.loginValidUser("userName", "password");assertThat(homePage.getMessageText(), is("Hello userName"));}}

PO的设计方式具有很大的灵活性,但是有一些基本规则可以使测试代码具有理想的可维护性。

PO本身绝不应进行判断或断言。判断和断言是测试的一部分,应始终在测试的代码内,而不是在PO中。PO用来包含页面的表示形式,以及页面通过方法提供的服务,但是与PO无关的测试代码不应包含在其中。

实例化PO时,应进行一次验证,即验证页面以及页面上可能的关键元素是否已正确加载。在上面的示例中,SignInPage和HomePage的构造函数均检查预期的页面是否可用并准备接受测试请求。

PO不一定需要代表整个页面。PO设计模式可用于表示页面上的组件。如果自动化测试中的页面包含多个组件,则每个组件都有单独的页面对象,则可以提高可维护性。

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

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

相关文章

51单片机一氧化碳烟雾报警器mq2MQ7ADC0832采集

实践制作DIY- GC0152--- 一氧化碳烟雾报警器 基于51单片机设计------- 一氧化碳烟雾报警器 二、功能介绍&#xff1a; STC89C52单片机lcd1602adc0832mq2烟雾传感器mq7烟雾传感器蜂鸣器2个按键设定烟雾报警阈值 2个按键设定一氧化碳报警阈值 1.通过ADC0832采集MQ2烟雾输出的电…

554、Vue 3 学习笔记 -【常用Composition API(二)】 2023.06.30

目录 一、常用Composition API1. 拉开序幕的setup2. ref函数3. reactive函数4. Vue3.0中的响应式原理5. reactive对比ref 二、参考链接 一、常用Composition API 1. 拉开序幕的setup &#xff08;1&#xff09;Vue3.0中一个新的配置项&#xff0c;值为一个函数。 &#xff08…

MySQL-分库分表详解(二)

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a; 小刘主页 ♥️努力不一定有回报&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️学习两年总结出的运维经验&#xff0c;以及思科模拟器全套网络实验教程。专栏&#xf…

0基础学习VR全景平台篇 第54篇: 高级功能-皮肤

功能位置示意 一、本功能将用在哪里&#xff1f; 皮肤功能&#xff0c;摆脱传统VR全景展示样式&#xff0c;自行选择场景与全景分组的界面模板&#xff0c;从而与不同的应用行业风格相互适应&#xff0c;达到最贴切的展示效果。 是在各种风格的VR全景作品中&#xff0c;最快实…

转型开发后——我心里的Windows与Linux

前言 要说接触Linux还是在15年刚刚步入开发工作没多久以后才开始接触的&#xff0c;之前在学开发的时候都是用的windows&#xff0c;不管是学习前端&#xff0c;还是学习PHP和Python。当时觉得在Windows下搞这些开发语言好像理所当然就是这样的。下一个WAMP、XAMPP、Python环境…

zookeeper入门

一、分布式思想 当某个文件数据的体量超出了某一台服务器所能存储的最大容量时&#xff0c;如要继续存储&#xff0c;则首先根据数据整体规模大小以及单台服务器所能存储的最大容量&#xff0c;计算出存储改文件所需要的服务器总台数&#xff0c;进而实现服务器节点数量的规划&…

MBD开发 STM32 UASRT

目录 轮询 ptintf 中断方式 DMA方式 轮询 串口要加入这两个文件 bug在于接到10个后会一直发送 ptintf function buffPtr convert(buff)if coder.target(Sfun)%固定句式%Executing in MATLAB, Buff is nullbuffPtr uint32(0); elsecoder.cinclude(getBuffPtr.h);%加入头…

Mybatis处理复杂查询环境

复杂查询环境 多对一和一对多 多个工作者对应一个协调人 对于工作者(worker)而言&#xff0c;多个工作者关联一个协调人(coordinator)&#xff08;多对一&#xff0c;关联&#xff09; 对于协调人而言&#xff0c;一个协调人有很多工作者&#xff08;一对多&#xff0c;集合&a…

node版本管理工具nvm手册

文章目录 下载使用命令node.js其他版本下载下载exe版解压改名放入到指定位置 下载 github下载 使用命令 查看当前版本 nvm -v 查看被管理的node nvm list 切换node版本 nvm use 14.21.3 node.js其他版本下载 下载链接 下载exe版 解压改名放入到指定位置

【Squid二】使用squid和nginx服务搭建反向缓存代理服务

使用squid和nginx服务搭建反向缓存代理服务 1.反向代理1.1 反向代理概述1.2 反向代理工作机制 2.搭建squid反向代理服务2.1 Nginx服务器端配置2.2 squid反向代理服务器配置 3.搭建nginx反向缓存代理服务3.1 nginx反向缓存代理服务配置3.2 nginx服务端配置3.3 客户端验证访问 参…

老照片修复:模糊褪色有划痕的老旧照片如何修复?

在我们的生活中&#xff0c;照片是记录我们生活的重要方式之一。无论是在手机相册里还是在家中的相册里&#xff0c;我们都有很多珍贵的照片&#xff0c;但是随着时间的推移&#xff0c;照片也会老化&#xff0c;甚至出现褪色、划痕、折痕、破损、发霉等情况&#xff0c;这些情…

2核4G服务器_4M带宽_CPU性能测评_60G系统盘

阿里云2核4G服务器297元一年、4M公网带宽、60G系统盘&#xff0c;阿里云轻量应用服务器2核4G4M带宽配置一年297.98元&#xff0c;2核2G3M带宽轻量服务器一年108元12个月&#xff0c;如下图&#xff1a; 目录 阿里云2核4G4M轻量应用服务器 2核4G服务器限制条件 轻量服务器介…