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

相关文章

Springboot @Autowired和@Resource的区别解析

《Springboot@Autowired和@Resource的区别解析》@Resource是JDK提供的注解,只是Spring在实现上提供了这个注解的功能支持,本文给大家介绍Springboot@... 目录【一】定义【1】@Autowired【2】@Resource【二】区别【1】包含的属性不同【2】@

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

Elasticsearch 在 Java 中的使用教程

《Elasticsearch在Java中的使用教程》Elasticsearch是一个分布式搜索和分析引擎,基于ApacheLucene构建,能够实现实时数据的存储、搜索、和分析,它广泛应用于全文... 目录1. Elasticsearch 简介2. 环境准备2.1 安装 Elasticsearch2.2 J

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

Java中的String.valueOf()和toString()方法区别小结

《Java中的String.valueOf()和toString()方法区别小结》字符串操作是开发者日常编程任务中不可或缺的一部分,转换为字符串是一种常见需求,其中最常见的就是String.value... 目录String.valueOf()方法方法定义方法实现使用示例使用场景toString()方法方法

Java中List的contains()方法的使用小结

《Java中List的contains()方法的使用小结》List的contains()方法用于检查列表中是否包含指定的元素,借助equals()方法进行判断,下面就来介绍Java中List的c... 目录详细展开1. 方法签名2. 工作原理3. 使用示例4. 注意事项总结结论:List 的 contain

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(