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

相关文章

Java中Arrays类和Collections类常用方法示例详解

《Java中Arrays类和Collections类常用方法示例详解》本文总结了Java中Arrays和Collections类的常用方法,涵盖数组填充、排序、搜索、复制、列表转换等操作,帮助开发者高... 目录Arrays.fill()相关用法Arrays.toString()Arrays.sort()A

Spring Boot Maven 插件如何构建可执行 JAR 的核心配置

《SpringBootMaven插件如何构建可执行JAR的核心配置》SpringBoot核心Maven插件,用于生成可执行JAR/WAR,内置服务器简化部署,支持热部署、多环境配置及依赖管理... 目录前言一、插件的核心功能与目标1.1 插件的定位1.2 插件的 Goals(目标)1.3 插件定位1.4 核

如何使用Lombok进行spring 注入

《如何使用Lombok进行spring注入》本文介绍如何用Lombok简化Spring注入,推荐优先使用setter注入,通过注解自动生成getter/setter及构造器,减少冗余代码,提升开发效... Lombok为了开发环境简化代码,好处不用多说。spring 注入方式为2种,构造器注入和setter

MySQL中比较运算符的具体使用

《MySQL中比较运算符的具体使用》本文介绍了SQL中常用的符号类型和非符号类型运算符,符号类型运算符包括等于(=)、安全等于(=)、不等于(/!=)、大小比较(,=,,=)等,感兴趣的可以了解一下... 目录符号类型运算符1. 等于运算符=2. 安全等于运算符<=>3. 不等于运算符<>或!=4. 小于运

使用zip4j实现Java中的ZIP文件加密压缩的操作方法

《使用zip4j实现Java中的ZIP文件加密压缩的操作方法》本文介绍如何通过Maven集成zip4j1.3.2库创建带密码保护的ZIP文件,涵盖依赖配置、代码示例及加密原理,确保数据安全性,感兴趣的... 目录1. zip4j库介绍和版本1.1 zip4j库概述1.2 zip4j的版本演变1.3 zip4

从入门到进阶讲解Python自动化Playwright实战指南

《从入门到进阶讲解Python自动化Playwright实战指南》Playwright是针对Python语言的纯自动化工具,它可以通过单个API自动执行Chromium,Firefox和WebKit... 目录Playwright 简介核心优势安装步骤观点与案例结合Playwright 核心功能从零开始学习

Python 字典 (Dictionary)使用详解

《Python字典(Dictionary)使用详解》字典是python中最重要,最常用的数据结构之一,它提供了高效的键值对存储和查找能力,:本文主要介绍Python字典(Dictionary)... 目录字典1.基本特性2.创建字典3.访问元素4.修改字典5.删除元素6.字典遍历7.字典的高级特性默认字典

Java堆转储文件之1.6G大文件处理完整指南

《Java堆转储文件之1.6G大文件处理完整指南》堆转储文件是优化、分析内存消耗的重要工具,:本文主要介绍Java堆转储文件之1.6G大文件处理的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言文件为什么这么大?如何处理这个文件?分析文件内容(推荐)删除文件(如果不需要)查看错误来源如何避

MySQL进行数据库审计的详细步骤和示例代码

《MySQL进行数据库审计的详细步骤和示例代码》数据库审计通过触发器、内置功能及第三方工具记录和监控数据库活动,确保安全、完整与合规,Java代码实现自动化日志记录,整合分析系统提升监控效率,本文给大... 目录一、数据库审计的基本概念二、使用触发器进行数据库审计1. 创建审计表2. 创建触发器三、Java

SpringBoot整合Dubbo+ZK注册失败的坑及解决

《SpringBoot整合Dubbo+ZK注册失败的坑及解决》使用Dubbo框架时,需在公共pom添加依赖,启动类加@EnableDubbo,实现类用@DubboService替代@Service,配... 目录1.先看下公共的pom(maven创建的pom工程)2.启动类上加@EnableDubbo3.实