Java使用Selenium进行Web项目的UI自动化测试

2024-09-04 20:20

本文主要是介绍Java使用Selenium进行Web项目的UI自动化测试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

目录

配置Selenium

1.使用Maven管理依赖    将三个依赖放到java的pom文件中

2.这里使用Edge进行简单的UI操作

3.提醒 

FireFox和Chrome启动失败

Firefoxdriver启动失败 

Chromedriver启动失败

java如何使用Selenium进行web的UI自动化测试 

对一个项目进行测试目录详情如下

测试的通用方法,驱动的创建和截图方法

等待方式分三种

这里写一个我项目的拦截器的UI测试

1.设计测试用例

 2.编写对应测试代码

3.查看测试结果,退出代码是0,运行正确

注意 

 这里将截图方法使用上代码如下


Selenium进行UI自动化的意义在于提高测试效率,‌增强测试准确性,‌并支持跨浏览器和平台的测试,‌从而确保Web应用的功能和界面符合预期要求。‌

配置Selenium

1.使用Maven管理依赖    将三个依赖放到java的pom文件中

以下是三个依赖项的作用总结:‌

‌Selenium Java依赖‌:‌提供自动化测试Web应用程序的核心API和工具,‌支持跨浏览器和平台的测试。‌它允许开发者编写测试脚本来控制和操作浏览器,‌执行自动化测试。‌‌

‌WebDriver Manager依赖‌:‌一个用于管理Web驱动程序的工具,‌可以自动检测所需浏览器的版本,‌并下载相应的Web驱动程序。‌它减轻了手动下载和配置浏览器驱动程序的负担,‌提高了自动化测试的效率和稳定性。‌‌
 

‌Commons IO依赖‌:‌主要用于处理IO流,‌提供了一些实用的IO操作工具类,‌如文件读写、‌文件监控等。‌在这里用于截图功能,‌帮助在自动化测试过程中保存或处理截图。‌‌

<!--下面用的是selenium的依赖项--><dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><version>4.14.1</version></dependency>
<!--下面用的是驱动管理的依赖项--><dependency><groupId>io.github.bonigarcia</groupId><artifactId>webdrivermanager</artifactId><version>5.5.3</version></dependency>
<!--        下面是截图用的依赖--><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.6</version></dependency>

2.这里使用Edge进行简单的UI操作

        //‌设置Edge驱动WebDriverManager.edgedriver().setup();//创建Edge选项,添加启动参数EdgeOptions options = new EdgeOptions();options.addArguments("--allow-remote-origins=*");//创建驱动实例WebDriver driver = new EdgeDriver(options);//打开网页driver.get("https://cn.bing.com/");//延时Thread.sleep(2000);//关闭driver.quit();

 启动成功会发现新打开一个Edge窗口,跳转到bing搜索页,再关闭

3.提醒 

FireFox和Chrome启动失败

理论上是可以创建不同的浏览器驱动常见的还有Firefoxdriver,Chromedriver,对应可以进行不同浏览器上进行UI自动化测试,但是实际的情况是小编在这边只能用Edge进行测试,具体的解决方式还没有,确实有尝试解决,如果后面解决了会回来补充,现在将问题还原一下

Firefoxdriver启动失败 

        WebDriverManager.chromedriver().setup();ChromeOptions options2 = new ChromeOptions();options2.addArguments("--allow-remote-origins=*");WebDriver driver2 = new ChromeDriver(options2);driver2.get("https://cn.bing.com/");

报错信息:java.net.UnknownHostException: raw.githubusercontent.com。‌此错误通常指示Firefox驱动尝试连接到一个无法解析的主机名。‌可能是网络问题或相关依赖未正确配置。‌

Chromedriver启动失败

        WebDriverManager.firefoxdriver().setup();FirefoxOptions options3 = new FirefoxOptions();options3.addArguments("--allow-remote-origins=*");WebDriver driver3 = new FirefoxDriver(options3);driver3.get("https://cn.bing.com/");

 报错信息:Could not start a new session. Response code 500. Message: session not created: This version of ChromeDriver only supports Chrome version 114,‌这表明ChromeDriver版本与安装的Chrome浏览器版本不兼容,‌需要确保ChromeDriver与Chrome浏览器的版本相匹配。‌

回到主题上面只是介绍Selenium如何启动,下面介绍小编如何使用Selenium

java如何使用Selenium进行web的UI自动化测试 

对一个项目进行测试目录详情如下

测试的通用方法,驱动的创建和截图方法

ublic class Utils {//通用配置,创建driverpublic static WebDriver driver;public static WebDriver createDriver(){if(driver!=null){return driver;}WebDriverManager.edgedriver().setup();EdgeOptions options = new EdgeOptions();options.addArguments("--allow-remote-origins=*");driver=new EdgeDriver(options);//创建隐式等待driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));return driver;}//构造方法public Utils(String url) {driver=createDriver();System.out.println(url);driver.get(url);}//截图方法public static void getScreenShot(String str) throws IOException {//创建时间格式化对象,获取时间并格式化SimpleDateFormat simple1=new SimpleDateFormat("yyyy-MM-dd");SimpleDateFormat simple2=new SimpleDateFormat("hhmmssSS");String format = simple1.format(System.currentTimeMillis());String format2 = simple2.format(System.currentTimeMillis());//拼接文件路径‌String fileName="./src/test/image/"+format+"/"+str+"-"+format2+".png";//获取并保存截图‌到路径File screenshotAs = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);FileUtils.copyFile(screenshotAs,new File(fileName));}
}

等待方式分三种

‌Selenium等待作用‌:‌解决元素定位问题,‌提升脚本稳定性。‌

1.‌强制等待(‌Sleep)‌‌:‌(调试常用)

Thread.sleep(5000); // 休眠5秒


2.‌隐式等待(‌Implicit Wait)‌‌:‌(常用的等待)设置全局等待时间,‌针对所有元素。‌

driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));


3.‌显式等待(‌Explicit Wait)‌‌:‌针对特定元素,‌设置等待条件

WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("elementId")));

 常用显示等待去等待警告框

WebDriverWait wait=new WebDriverWait(driver, Duration.ofSeconds(3)); 
wait.until(ExpectedConditions.alertIsPresent());

这里写一个我项目的拦截器的UI测试

1.设计测试用例

 2.编写对应测试代码

//主流程   public static void main(String[] args) {NoLogin noLog=new NoLogin(ListUrl);noLog.noLogin();driver.quit();}
//拦截器测试代码    
public void noLogin() {//显示等待WebDriverWait wait=new WebDriverWait(driver, Duration.ofSeconds(3));//强行进入登录界面,会弹出警告框,点击确认会跳转到登录界面,断言一下是否跳转成功// 有警告框就要用显示等待,不然人员报错,因为警告框还没弹出,就判断NoSuchAlertwait.until(ExpectedConditions.alertIsPresent());driver.switchTo().alert().accept();String title = driver.getTitle();assert title.equals("博客登陆页");driver.get(DetailUrl);//判断强行进入登录页是否会跳转成功String title1 = driver.getTitle();assert title1.equals("博客登陆页");driver.get(EditUrl);//进入编辑页,进行编辑,查看是否会提交成功driver.findElement(By.cssSelector("#title")).sendKeys(System.currentTimeMillis()+"测试发送");driver.findElement(By.cssSelector("#submit")).click();wait.until(ExpectedConditions.alertIsPresent());Alert alert = driver.switchTo().alert();String text = alert.getText();alert.accept();assert text.equals("用户未登录,请登录再操作");assert driver.getTitle().equals("博客登陆页");}

3.查看测试结果,退出代码是0,运行正确

注意 

上面测试代码中没有调用截图方法这里也需要提醒一下,在警告框弹出的时候selenium的截图工具截不了图,会报一个有警告框未处理的错误UnhandledAlertException

Exception in thread "main" org.openqa.selenium.UnhandledAlertException: unexpected alert open: {Alert text : 用户未登录,请登录再操作}(Session info: MicrosoftEdge=128.0.2739.63): 用户未登录,请登录再操作

结合之前警告框的显示等待这里总结就是 

如果需要自动化截图记录测试过程,截图的调用方法,放在警告框之前或者之后,酌情而论 

 这里将截图方法使用上代码如下

 public void noLogin() throws IOException {//显示等待WebDriverWait wait=new WebDriverWait(driver, Duration.ofSeconds(3));wait.until(ExpectedConditions.alertIsPresent());driver.switchTo().alert().accept();String title = driver.getTitle();assert title.equals("博客登陆页");getScreenShot(getClass().getName());driver.get(DetailUrl);//判断强行进入登录页是否会跳转成功String title1 = driver.getTitle();assert title1.equals("博客登陆页");getScreenShot(getClass().getName());driver.get(EditUrl);//进入编辑页,进行编辑,查看是否会提交成功driver.findElement(By.cssSelector("#title")).sendKeys(System.currentTimeMillis()+"测试发送");driver.findElement(By.cssSelector("#submit")).click();wait.until(ExpectedConditions.alertIsPresent());Alert alert = driver.switchTo().alert();String text = alert.getText();alert.accept();assert text.equals("用户未登录,请登录再操作");assert driver.getTitle().equals("博客登陆页");getScreenShot(getClass().getName());

如果想要测试我的项目,自便hahaha,123456

随心笔记icon-default.png?t=N7T8http://47.113.216.119:8080/blog_login.html如果想要我的全部测试代码:直接点击文章的下载链接,拜拜

这篇关于Java使用Selenium进行Web项目的UI自动化测试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1136938

相关文章

Spring Boot @RestControllerAdvice全局异常处理最佳实践

《SpringBoot@RestControllerAdvice全局异常处理最佳实践》本文详解SpringBoot中通过@RestControllerAdvice实现全局异常处理,强调代码复用、统... 目录前言一、为什么要使用全局异常处理?二、核心注解解析1. @RestControllerAdvice2

Spring IoC 容器的使用详解(最新整理)

《SpringIoC容器的使用详解(最新整理)》文章介绍了Spring框架中的应用分层思想与IoC容器原理,通过分层解耦业务逻辑、数据访问等模块,IoC容器利用@Component注解管理Bean... 目录1. 应用分层2. IoC 的介绍3. IoC 容器的使用3.1. bean 的存储3.2. 方法注

Python内置函数之classmethod函数使用详解

《Python内置函数之classmethod函数使用详解》:本文主要介绍Python内置函数之classmethod函数使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 类方法定义与基本语法2. 类方法 vs 实例方法 vs 静态方法3. 核心特性与用法(1编程客

Spring事务传播机制最佳实践

《Spring事务传播机制最佳实践》Spring的事务传播机制为我们提供了优雅的解决方案,本文将带您深入理解这一机制,掌握不同场景下的最佳实践,感兴趣的朋友一起看看吧... 目录1. 什么是事务传播行为2. Spring支持的七种事务传播行为2.1 REQUIRED(默认)2.2 SUPPORTS2

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

Java进程异常故障定位及排查过程

《Java进程异常故障定位及排查过程》:本文主要介绍Java进程异常故障定位及排查过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、故障发现与初步判断1. 监控系统告警2. 日志初步分析二、核心排查工具与步骤1. 进程状态检查2. CPU 飙升问题3. 内存

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

java中新生代和老生代的关系说明

《java中新生代和老生代的关系说明》:本文主要介绍java中新生代和老生代的关系说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、内存区域划分新生代老年代二、对象生命周期与晋升流程三、新生代与老年代的协作机制1. 跨代引用处理2. 动态年龄判定3. 空间分

Java设计模式---迭代器模式(Iterator)解读

《Java设计模式---迭代器模式(Iterator)解读》:本文主要介绍Java设计模式---迭代器模式(Iterator),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录1、迭代器(Iterator)1.1、结构1.2、常用方法1.3、本质1、解耦集合与遍历逻辑2、统一

Java内存分配与JVM参数详解(推荐)

《Java内存分配与JVM参数详解(推荐)》本文详解JVM内存结构与参数调整,涵盖堆分代、元空间、GC选择及优化策略,帮助开发者提升性能、避免内存泄漏,本文给大家介绍Java内存分配与JVM参数详解,... 目录引言JVM内存结构JVM参数概述堆内存分配年轻代与老年代调整堆内存大小调整年轻代与老年代比例元空