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集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数

Java中读取YAML文件配置信息常见问题及解决方法

《Java中读取YAML文件配置信息常见问题及解决方法》:本文主要介绍Java中读取YAML文件配置信息常见问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录1 使用Spring Boot的@ConfigurationProperties2. 使用@Valu

创建Java keystore文件的完整指南及详细步骤

《创建Javakeystore文件的完整指南及详细步骤》本文详解Java中keystore的创建与配置,涵盖私钥管理、自签名与CA证书生成、SSL/TLS应用,强调安全存储及验证机制,确保通信加密和... 目录1. 秘密键(私钥)的理解与管理私钥的定义与重要性私钥的管理策略私钥的生成与存储2. 证书的创建与

浅析Spring如何控制Bean的加载顺序

《浅析Spring如何控制Bean的加载顺序》在大多数情况下,我们不需要手动控制Bean的加载顺序,因为Spring的IoC容器足够智能,但在某些特殊场景下,这种隐式的依赖关系可能不存在,下面我们就来... 目录核心原则:依赖驱动加载手动控制 Bean 加载顺序的方法方法 1:使用@DependsOn(最直

linux解压缩 xxx.jar文件进行内部操作过程

《linux解压缩xxx.jar文件进行内部操作过程》:本文主要介绍linux解压缩xxx.jar文件进行内部操作,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、解压文件二、压缩文件总结一、解压文件1、把 xxx.jar 文件放在服务器上,并进入当前目录#

SpringBoot中如何使用Assert进行断言校验

《SpringBoot中如何使用Assert进行断言校验》Java提供了内置的assert机制,而Spring框架也提供了更强大的Assert工具类来帮助开发者进行参数校验和状态检查,下... 目录前言一、Java 原生assert简介1.1 使用方式1.2 示例代码1.3 优缺点分析二、Spring Fr

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

java使用protobuf-maven-plugin的插件编译proto文件详解

《java使用protobuf-maven-plugin的插件编译proto文件详解》:本文主要介绍java使用protobuf-maven-plugin的插件编译proto文件,具有很好的参考价... 目录protobuf文件作为数据传输和存储的协议主要介绍在Java使用maven编译proto文件的插件

Java中的数组与集合基本用法详解

《Java中的数组与集合基本用法详解》本文介绍了Java数组和集合框架的基础知识,数组部分涵盖了一维、二维及多维数组的声明、初始化、访问与遍历方法,以及Arrays类的常用操作,对Java数组与集合相... 目录一、Java数组基础1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问