软件测试之自动化测试

目录

1.什么是自动化测试

2.web⾃动化测试

2.1驱动

WebDriverManager 

3. Selenium

3.1selenium+驱动+浏览器的⼯作原理

4.常用函数

4.1元素的定位

 4.1.1cssSelector选择器

4.2.2xpath

4.2操作测试对象

4.3窗⼝

4.4等待

4.5浏览器导航

4.6弹窗

4.7文件上传

 4.8设置无头模式

4.9加载策略


1.什么是自动化测试

自动化测试是指使用专门的软件工具和执行脚本,替代人工操作,自动执行测试用例并验证系统功能、性能或安全性的过程。其核心目标是提高测试效率、减少重复劳动,并提升测试的准确性和覆盖率。

自动化测试主要目的就是用来做回归测试,例如在一个软件当中更新了新的功能,我们不仅要测试历史功能没有问题还要测试新的功能没有问题。此时我们就需要自动化来实现历史功能的测试,手工测试实现新的功能测试。

2.web⾃动化测试

2.1驱动

web系统的测试前提是需要打开浏览器,通过访问web服务器来对服务器界 ⾯进⾏⼀系列的操作。因此程序想要打开web浏览器就需要安装web驱动(即WebDriver),WebDriver以本地化⽅式驱动浏览器。

WebDriverManager 

WebDriverManager 是一个开源 Java 库,用于自动化管理浏览器驱动程序(如 ChromeDriver、GeckoDriver 等)。它解决了 Selenium 测试中手动下载、配置和更新驱动程序的繁琐问题,显著提升自动化测试的效率和可维护性。

导入依赖库:WebDriverManager:自动下载和管理浏览器驱动程序,避免手动配置。

        <dependency><groupId>io.github.bonigarcia</groupId><artifactId>webdrivermanager</artifactId><version>5.8.0</version><scope>test</scope></dependency>

3. Selenium

Selenium 是一个开源的自动化测试框架,主要用于Web应用程序的测试。它允许开发者通过编程方式控制浏览器行为,模拟用户操作,如点击按钮、输入文本等。Selenium的核心优势在于支持多种浏览器(如Chrome、Firefox、Edge)和编程语言(如Python、Java、C#),使其成为功能测试和回归测试的流行工具。

安装selenium库:

 <dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><version>4.0.0</version></dependency>

简单代码示例

public class secondTest {public void test_01() throws InterruptedException {//驱动程序管理的?动化WebDriverManager.edgedriver().setup();EdgeOptions options = new EdgeOptions();//允许访问所有链接options.addArguments("--remote-allow-origins=*");//1、打开浏览器WebDriver driver = new EdgeDriver(options);//2.输?百度?址:https://www.baidu.comdriver.get("https://www.baidu.com");//3、找到输?框并输?“迪丽热巴”driver.findElement(By.xpath("//*[@id=\"kw\"]")).sendKeys("迪丽热巴");//4、找到“百度?下”按钮并点击driver.findElement(By.xpath("//*[@id=\"su\"]")).click();//5、关闭浏览器driver.quit();}
}

3.1selenium+驱动+浏览器的⼯作原理

1. 通过selenium编写的⾃动化脚本代码中在EdgDriverService中创建⼀个服务

2. 通过创建好的服务打开webdriver,安装在本地的驱动服务IP为localhost,PORT为 EdgDriverService中创建的端⼝号,该服务地址为selenium向webdriver发送请求的服务地址。

3. 向浏览器驱动程序发送HTTP请求,浏览器驱动程序解析请求,打开浏览器,并获得sessionid,如果再次对浏览器操作需携带此id

4. 打开浏览器后,所有的selenium的操作(访问地址,查找元素等)均通过创建好的服务链接到 webdriver,然后使⽤execute发送请求

5. 驱动收到请求并对请求进⾏解析,转成浏览器能够解析的脚本并发送给浏览器,浏览器通过请求的 内容执⾏对应动作

6. 浏览器再把执⾏的动作结果通过浏览器驱动程序返回给测试脚本

4.常用函数

4.1元素的定位

web⾃动化测试的操作核⼼是能够找到⻚⾯对应的元素,然后才能对元素进⾏具体的操作。 常⻅的元素定位⽅式⾮常多,如id,classname,tagname,xpath,cssSelector 常⽤的主要由cssSelector和xpath

查找元素:findElement 查找单个元素   ;findElements 查找多个元素。

 4.1.1cssSelector选择器

选中页面中的标签元素,可在页面中直接复制标签元素

driver.findElement(By.cssSelector("#kw"));

4.2.2xpath

XML路径语⾔,不仅可以在XML⽂件中查找信息,还可以在HTML中选取节点。

driver.findElement(By.xpath("//*[@id=\"kw\"]"));

4.2操作测试对象

获取到了⻚⾯的元素之后,接下来就是要对元素进⾏操作了。常⻅的操作有点击、提交、输⼊、清 除、获取⽂本。

点击 :click()

//找到百度⼀下按钮并点击
driver.findElement(By.cssSelector("#su")).click();

模拟按键输入 : sendKey(" ")

 driver.findElement(By.cssSelector("#kw")).sendKeys("输⼊⽂字");

清除⽂本内容: clear

driver.findElement(By.cssSelector("#kw")).sendKeys("
我爱游戏
");driver.findElement(By.cssSelector("#kw")).clear();driver.findElement(By.cssSelector("#kw")).sendKeys("
我爱学习
");

获取文本信息 : getText

//getText()返回类型为string
String bdtext = driver.findElement(By.xpath("//*[@id="title-content"]/span[1]")).getText();
System.out.println("打印的内容是:"+bdtext);

获取当前页标题:getTitle

 System.out.println("跳转之前的标题:" + driver.getTitle());

获取当前URL: getCurrentUrl()

System.out.println("跳转之前的URL:" + driver.getCurrentUrl());

4.3窗⼝

当我们手工测试的时候我们可以通过眼镜去看窗口可是计算机又该怎么去看呢,这是就需要通过句柄来表示窗口。

获取当前⻚⾯句柄: driver.getWindowHandle();

 String currWindow = driver.getWindowHandle();

获取所有⻚⾯句柄: driver.getWindowHandles();

Set<String> allWindow = driver.getWindowHandles();

切换句柄(代表切换了窗口)但在测试大多数不用,当在新的窗口进行操作的时候,就再获取url

//获取当前句柄
String curWindow = driver.getWindowHandle();
//获取所有句柄Set<String> allWindow = driver.getWindowHandles();for( String w : allWindow){if(w!=curWindow){driver.switchTo().window(w);}}

窗口大小设置

 //窗⼝最⼤化driver.manage().window().maximize();//窗⼝最⼩化driver.manage().window().minimize();//全屏窗⼝driver.manage().window().fullscreen();//⼿动设置窗⼝⼤⼩driver.manage().window().setSize(new Dimension(1024, 768));

屏幕截图

我们的⾃动化脚本⼀般部署在机器上⾃动的去运⾏,如果出现了报错,我们是不知道的,可以通过抓 拍来记录当时的错误场景

屏幕截图⽅法需要额外导⼊包:

<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.6</version></dependency>
 //简单版本
File srcfile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
//srcfile转成图片文件
FileUtils.copyFile(srcfile, new File("test.png"));
//高阶版本
SimpleDateFormat sim1 = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat sim2 = new SimpleDateFormat("HH-mm-ss-SS");String dirTime = sim1.format(System.currentTimeMillis());String fileTime = sim2.format(System.currentTimeMillis());//  图片文件名: ./src/test/images/2025-4-21/18-56-57-50.pngString filename = "./src/test/images/" + dirTime + "/" + fileTime + ".png";File srcfile = ((TakesScreenshot)driverManager).getScreenshotAs(OutputType.FILE);FileUtils.copyFile(srcfile,new File(filename));

4.4等待

强制等待: Thread.sleep ();

隐式等待

隐式等待是⼀种智能等待,他可以规定在查找元素时,在指定时间内不断查找元素。如果找到则代码 继续执⾏,直到超时没找到元素才会报错。隐式等待是贯穿全局的只要要driver对象没有被释放掉,就可以一直执行。

 //implicitlyWait() 参数:Duration类中提供的毫秒、秒、分钟等⽅法//隐式等待1000毫秒
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(1000));//隐式等待5秒
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));

显⽰等待

显示等待(Explicit Wait)是自动化测试中用于动态等待特定条件满足的一种机制。与隐式等待(Implicit Wait)不同,显示等待针对特定元素或条件设置等待时间,直到条件成立或超时为止。其核心优势在于灵活性和精确性,避免全局等待导致的性能浪费。

//定义显示等待三秒
WebDriverWait foo = new WebDriverWait(driver, Duration.ofSeconds(3))
//elementToBeClickable(By locator)‒⽤于检查元素的期望是可⻅的并已启⽤,以便您可以单击它。
// ExpectedConditions预定义⽅法还有别的方法以应对不对的对象
foo.until(ExpectedConditions.elementToBeClickable(By.cssSelector("#id")));

4.5浏览器导航

打开网站

 // 更⻓的⽅法driver.navigate().to("https://selenium.dev");// 简洁的⽅法driver.get("https://selenium.dev");

浏览器的前进、后退、刷新

 //后退driver.navigate().back();
//前进driver.navigate().forward();
//更新driver.navigate().refresh();

4.6弹窗

弹窗是在⻚⾯是找不到任何元素的,使⽤selenium提供的Alert接⼝可以去实现弹窗

 Alert alert = driver.switchTo.alert();//确认
alert.accept()//取消
alert.dismiss()
//弹窗的输入alert.sendKeys("hello");

4.7文件上传

 WebElement ele = driver.findElement(By.cssSelector("body > div > div > 
input[type=file]"));ele.sendKeys("D:\\selenium2html\\selenium2html\\upload.html");

 4.8设置无头模式

在测试中不可能随时的去盯着代码的运行,因此需要设置无头模式让代码自己去测试。

//options.addArguments("-headless");

4.9加载策略

在测试网站的过程中有些页面的元素加载过程比较慢可能导致测试的速度慢,所以此时需要页面框架加载完了就往下执行不用一直等待加载

//这种策略会让 WebDriver 等待整个页面完全加载完毕(包括 HTML 内容、CSS、JavaScript 和子资源)。这是默认的策略
options.setPageLoadStrategy(PageLoadStrategy.NORMAL);       
//这种策略会让 WebDriver 只等待初始 HTML 文档(DOMContentLoaded 事件)完成加载,不等待 CSS、JavaScript 和子资源加载完毕。
options.setPageLoadStrategy(PageLoadStrategy.EAGER);
//这种策略会让 WebDriver 完全不等待页面加载,立即执行后续操作。
options.setPageLoadStrategy(PageLoadStrategy.NONE);

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

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

相关文章

sqlserver迁移日志文件和数据文件

sqlserver安装后没有指定日志存储路径或者还原库指定的日志存储位置不理想想要更改&#xff0c;都可以按照这种方式来更换&#xff1b;1.前提准备&#xff1a;数据库的备份bak文件2.查看自己当前数据库的日志文件和数据文件存储路径是否理想选中当前数据库&#xff0c;右键属性…

MFC UI表格制作从专家到入门

文章目录CListCtrl常见问题增强版CGridCtrl&#xff08;第三方&#xff09;第三方库ReoGridCListCtrl 默认情况下&#xff0c;CListCtrl不支持直接编辑单元格&#xff0c;需通过消息处理实现。 1.添加控件到资源视图 在对话框资源编辑器中拖入List Control控件&#xff0c;设…

数字后端APR innovus sroute到底是如何选取宽度来铺power rail的?

吾爱IC社区新一期IC训练营将于7月初开班&#xff08;07.06号晚上第一次直播课&#xff09;&#xff01;社区所有IC后端训练营课程均为直播课&#xff01;全网唯一一家敢开后端直播课的&#xff08;口碑不好招生一定存在困难&#xff0c;自然就无法开直播课&#xff09;&#xf…

LVS集群技术

LVS&#xff08;Linux Virtual Server&#xff09;是一种基于Linux内核的高性能、高可用性服务器集群技术&#xff0c;它通过负载均衡将客户端请求分发到多台后端真实服务器&#xff0c;实现 scalability 和 fault tolerance。LVS工作在传输层&#xff08;OSI Layer 4&#xff…

git项目,有idea文件夹,怎么去掉

要从Git项目中排除.idea文件夹&#xff08;IntelliJ IDEA的配置文件目录&#xff09;&#xff0c;可以通过以下步骤操作&#xff1a; 1. 添加.gitignore规则 在项目根目录创建或编辑.gitignore文件&#xff0c;添加以下内容&#xff1a; .idea/2. 从Git缓存中删除已跟踪的.idea…

springboot+swagger2文档从swagger-bootstrap-ui更换为knife4j及文档接口参数不显示问题

背景 已有springboot项目,且使用的是swagger2+swagger-bootstrap-ui的版本 1.pom依赖如下 <!-- Swagger接口管理工具 --><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9…

mysql数据库表只能查询,对于插入、更新、删除操作一直卡住,直到报错Lost connection to MySQL server during query

诊断步骤1. 查看阻塞进程SELECT * FROM performance_schema.metadata_locks WHERE LOCK_STATUS PENDING;SELECT * FROM sys.schema_table_lock_waits;2. 查看当前活动事务SELECT * FROM information_schema.INNODB_TRX;3. 查看进程列表SHOW PROCESSLIST;通过SELECT * FROM in…

Redis BigKey 深度解析:从原理到实战解决方案

引言&#xff1a;什么是 BigKey&#xff1f;在 Redis 的使用场景中&#xff0c;BigKey&#xff08;大键&#xff09;是指那些数据量异常庞大的键值&#xff0c;通常表现为&#xff1a;String 类型&#xff1a;值大小超过 10KBHash/Set 等&#xff1a;元素数量超过 5000List/ZSe…

Qt 实现新手引导

Qt实现新手引导 对于一个新安装的软件或者一个新的功能&#xff0c;提供一个新手引导步骤&#xff0c;能够让用户快速熟悉。这是最终效果&#xff0c;每一个按钮都会有一个简单引导&#xff0c;通过点击上一步、下一步来切换不同的指导。当前引导的功能&#xff0c;会有一个高光…

Maven+Spring

一、Maven 相关- 本地仓库设置&#xff1a;- 在 IDE&#xff08;如 IntelliJ IDEA&#xff09;中可以设置 Maven 的本地仓库路径&#xff0c;本地仓库用于存储从远程仓库下载的依赖库&#xff0c;方便项目重复使用。- 仓库关系&#xff1a;- 项目&#xff1a;开发中的项目&…

Android Handler 消息机制

常用场景&#xff1a; 子线程发送Message 主线程处理Message 子线程发送消息 public final boolean sendEmptyMessageDelayed(int what, long delayMillis) {Message msg Message.obtain();msg.what what;return sendMessageDelayed(msg, delayMillis);}public final boole…

day9 串口通信

1串口通信串口通信是嵌入式系统和电子设备中最常用的 异步串行通信 方式&#xff0c;核心是通过 TX&#xff08;发送&#xff09; 和 R&#xff08;接收&#xff09; 两根线实现全双工数据传输。2通信协议分类2.1同步/异步通信同步和异步是串行通信中两种根本不同的数据传输方式…

面向对象的设计模式

一、设计模式简介1、什么是设计模式针对反复出现的问题所总结归纳出的通用解决方设计模式是指在软件开发过程中案。这些方案是众多软件开发人员经过大量实践总结出来的&#xff0c;具有高效性、可维护性和可扩展性等优点。使用设计模式可以帮助开发者更高效地构建软件系统&…

每日钉钉API探索:chooseDepartments专注于部门维度的选择接口

在企业级应用开发过程中&#xff0c;针对组织架构中的部门进行操作是非常常见的需求。今天我们要介绍的是钉钉的chooseDepartments API&#xff0c;它允许用户以部门为单位进行选择&#xff0c;并返回所选部门的相关信息。&#x1f4cc; 功能概述chooseDepartments API主要用于…

生产环境CI/CD流水线构建与优化实践指南

生产环境CI/CD流水线构建与优化实践指南 目录 业务场景描述技术选型过程实现方案详解 流水线结构设计并行构建与缓存策略部署策略&#xff1a;滚动、蓝绿、金丝雀回滚与告警自动化 踩过的坑与解决方案总结与最佳实践 业务场景描述 某大型电商平台&#xff0c;为了保证代码持续交…

腾讯云和火山云优劣势对比

从问题本身看&#xff0c;用户没有限定具体场景&#xff0c;说明可能需要一个全面的横向对比。不过云计算服务涉及面太广&#xff0c;我最好先搭建一个框架性的分析结构&#xff0c;再填充具体细节。 首先想到从几个核心维度切入&#xff1a;基础能力&#xff08;计算存储网络&…

Augment AI 0.502.0版本深度解析:Task、Guidelines、Memory三大核心功能实战指南

Augment AI 0.502.0版本深度解析&#xff1a;Task、Guidelines、Memory三大核心功能实战指南 augment最新版辅助功能全解析续杯免费额度再用满教程|memory|userguidlines|tasksaugment最新插件功能教程前言 在AI辅助编程领域&#xff0c;Augment AI作为一款强大的VS Code插件&…

docker搭建、小皮面板搭建、bp使用、msf

docker搭建Vulhub靶场 docker安装 apt-get install docker.io docker-compose#设置docker代理&#xff1a;创建文件夹以及对应的文件 mkdir /etc/systemd/system/docker.service.d#在该文件中配置自己的代理ip以及代理端口 vim /etc/systemd/system/docker.service.d/http-p…

AI优化器美国VPS集成:智能算力部署与性能调优指南

在当今数字化浪潮中&#xff0c;AI优化器与高性能VPS的融合正成为企业技术架构的核心竞争力。本文将深入解析美国VPS服务器如何通过AI驱动的智能优化技术实现算力突破&#xff0c;从资源配置算法到实时流量调度&#xff0c;全面揭示这种创新组合在跨境电商、大数据分析等场景中…

【保姆级图文详解】Spring AI 中的工具调用原理解析,工具开发:文件操作、联网搜索、网页抓取、资源下载、PDF生成、工具集中注册

目录前言一、Spring AI 中的工具调用&#xff08;Tool Calling&#xff09;1.1、概念1.2、工作原理1.3、技术选型1.4、原理解析1.4.1、实现接口1.4.2、工具调用二、工具调用&#xff08;Tool Calling&#xff09;开发2.1、文件操作2.1.1、概念描述2.1.2、概念描述2.2、联网搜索…