【自动化测试】---Selenium+Java
1.自动化测试分类
- 接口自动化测试
- UI自动化测试(移动端自动化测试、Web端自动化测试)
2.选择Selenium作为web自动化工具原因(面试题)
- 开源免费
- 支持多个浏览器
- 支持多个系统
- 支持多语言
- Selenium包提供很多供测试使用的API
3.自动化是什么?为什么要做自动化?
- 自动化是测试人员为了提高效率或者保证测试质量,减少人力消耗,让代码辅助测试人员来执行测试的一个过程
4.自动化脚本打开浏览器的工作原理
- 编写的自动化脚本----创建http请求发送给浏览器驱动----浏览器驱动包含一个http server请求---操控浏览器----执行测试步骤
- 驱动作用:驱动接收自动化脚本发送过来的http请求,并解析请求发送给浏览器,当浏览器执行完成后,会把结果返回给脚本
5. 使用Java编写Selenium编写的自动化脚本的步骤
- 创建maven项目,在pom.xml里将依赖导入
<dependencies><dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><version>4.0.0</version></dependency> </dependencies>
- 开始进行自动化脚本的编写
public void dilireba(){//创建驱动对象ChromeOptions options=new ChromeOptions();options.addArguments("--remote-allow-origins=*");ChromeDriver driver=new ChromeDriver(options);//访问网络driver.get("http://baidu.com");//查找元素并且操作元素driver.findElement(By.cssSelector("#kw")).sendKeys("迪丽热巴");driver.findElement(By.cssSelector("#su")).click();//结束会话driver.quit();}
6.查找元素
- findElement() 查找当前的一个元素 ,返回值为WebElement
driver.findElement(By.cssSelector("#kw"))
- findElenments() 查找当前相同多个元素, 返回值为List<WebElement>
List<WebElement> eles=driver.findElements(By.className("hotsearch-item"));//打印每个名称for (WebElement els: eles ) {System.out.println(els.getText());}
7.元素定位 (自动化要求元素定位必须唯一)
- 选择器:Selector ,选择页面指定元素
driver.findElement(By.cssSelector("#kw"))
- Xpath
driver.findElement(By.xpath(//*[@id="kw"]))
8.常见元素操作
- 输入文本 sendkeys,仅使用于文字字段
driver.findElement(By.cssSelector("#kw")).sendKeys("小嘉");
- 点击 click
driver.findElement(By.cssSelector("#su")).click();
- 提交 submit,仅适用于表单元素
driver.findElement(By.cssSelector("#su")).submit();
- 获取文本 getText(),打印这个属性的值
String ret=driver.findElement(By.className("title-content-title")).getText();System.out.println(ret);
- 清除 clear ,测试是否可以频繁输入
driver.findElement(By.cssSelector("#su")).clear();
- 获取标题 getTitle()
System.out.println(driver.getTitle());
- 获取url geturl()
System.out.println(driver.getCurrentUrl());
- 获取属性的值 getAttribute()
System.out.println(driver.findElement(By.cssSelector("#su")).getAttribute("value"));
9.窗口设置
- 窗口最大化
//窗口最大化driver.manage().window().maximize();
- 窗口最小化
//窗口最小driver.manage().window().minimize();
- 窗口全屏
driver.manage().window().fullscreen();
- 手动设置窗口大小
//手动设置driver.manage().window().setSize(new Dimension(1024,4444));
- 窗口切换(浏览器每次打开一个标签页,就会自动给每个标签页有一个标识,叫做句柄)10
//输入网址driver.get("http://baidu.com");//点击更多标签页driver.findElement(By.cssSelector("#s-top-left > div > a")).click();//先获取所有标签的句柄Set<String>handles =driver.getWindowHandles();//获取当前页面句柄String curhandle=driver.getWindowHandle();System.out.println("当前页面句柄:"+curhandle);//获取所有的句柄for (String handle: handles) {if (handle!=curhandle){//进行页面切换driver.switchTo().window(handle);}}//查找更多页面的某个元素Thread.sleep(2000);driver.findElement(By.cssSelector("#content > div:nth-child(2) > div:nth-child(2) > a"));Thread.sleep(2000);driver.quit();
10.屏幕截图
- 在pom.xml里面导入依赖
<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.6</version></dependency>
- 进行截图
public void test1() throws IOException {//启动驱动ChromeOptions options=new ChromeOptions();options.addArguments("--remote-allow-origins=*");ChromeDriver driver=new ChromeDriver(options);//输入网址driver.get("http:baidu.com");//找到输入框去输入元素driver.findElement(By.cssSelector("#kw")).sendKeys("迪丽热巴");//屏幕截图以文件形式File srcfile=driver.getScreenshotAs(OutputType.FILE);//把它放在指定路径String filename="my.png";FileUtils.copyFile(srcfile,new File(filename));driver.quit();}
11.等待
- 强制等待:Thread.sleep(时间)
- 隐式等待:作用于driver的整个生命周期,会一直轮寻判断元素是否存在,如果不存在就等待设置好的时间里不断进行轮询,等到元素全被访问
public void test2(){//启动驱动ChromeOptions options=new ChromeOptions();options.addArguments("--remote-allow-origins=*");ChromeDriver driver=new ChromeDriver(options);//开始隐式等待driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));//输入网址driver.get("http:baidu.com");//找到输入框去输入元素driver.findElement(By.cssSelector("#kw")).sendKeys("迪丽热巴");driver.quit();}
- 显示等待: 针对代码一条去设置
new WebDriverWait(driver,Duration.ofSeconds(间)).until(driver.findElement(By.cssSelector("")));
12.浏览器导航
//后退回之前状态driver.navigate().back();//前进driver.navigate().forward();//刷新driver.navigate().refresh();
13.弹窗
- 将driver对象作用到弹窗上(切换弹窗) driver.switchTo.alert()
- 确认--accept 取消---dismiss 输入文本----sendkeys
- 警告弹窗--只有1个按钮 确认弹窗--可以选择确定和取消 提示弹窗--可以输入文本
14.选择框 (可以根据文本选择、根据属性值选择、根据文本选择)
void selectControll() throws InterruptedException {
// driver.get("file:///D:/file/%E6%AF%94%E7%89%B9%E6%95%99%E5%8A%A1/%E6%B5%8B%E8%AF%95/selenium4html/selenium-html/select.html");
// Thread.sleep(3000);
// WebElement ele = driver.findElement(By.cssSelector("#ShippingMethod"));
// //先创建选择框对象
// Select select = new Select(ele);
// Thread.sleep(3000);
// //根据文本来选择select.selectByVisibleText("UPS Next Day Air ==> $12.51");
// //根据属性值来选择select.selectByValue("12.51");
// //根据序号来选择
// select.selectByIndex(1); 序号从0开始
// Thread.sleep(3000);
// driver.quit();
// }
15.执行脚本 executeScript(js代码)
void scriptControll() throws InterruptedException {driver.get("https://baidu.com/");Thread.sleep(3000);//执行js命令:让页面置顶/置底//如果想要滑到最小面,值设置的大一些就行 driver.executeScript("document.documentElement.scrollTop=500");Thread.sleep(3000);//0就是顶部driver.executeScript("document.documentElement.scrollTop=0");driver.get("https://www.baidu.com");Thread.sleep(3000);driver.executeScript("var texts = document.querySelector('#kw');texts.value='1111'");Thread.sleep(3000);driver.quit();}
16.文件上传
void fileUploadControll() throws InterruptedException { driver.get("url的路径");
Thread.sleep(3000);driver.findElement(By.cssSelector("body > div > div > input[type=file]")).sendKeys("D:\\file\\比特教务\\测试\\selenium4html\\selenium-html\\upload.html");
//写入上传文件的文件夹路径和文件名Thread.sleep(3000);driver.quit();
17.浏览器参数的设置(需要在创建对象之前设置)
测试人员只会查看结果,不关注过程,所以需要设置无头模式(自动执行,我们在界面上看不到的),我们只可以在终端看见效果
void paramsControll(){//百度搜索迪丽热巴//先创建选项对象,然后再设置浏览器参数ChromeOptions options = new ChromeOptions();options.addArguments("-headless");ChromeDriver driver = new ChromeDriver(options);driver.get("https://www.baidu.com");driver.findElement(By.cssSelector("#kw")).sendKeys("迪丽热巴");driver.findElement(By.cssSelector("#su")).click();driver.quit();
相关文章:

【自动化测试】---Selenium+Java
1.自动化测试分类 接口自动化测试UI自动化测试(移动端自动化测试、Web端自动化测试) 2.选择Selenium作为web自动化工具原因(面试题) 开源免费支持多个浏览器支持多个系统支持多语言Selenium包提供很多供测试使用的API 3.自动化是什…...
uniapp新增一条数据增加一个折叠栏
//折叠栏 <uni-collapse classcollapse refcollapse><uni-collapse-item v-for"(item, index) in dataForm.beefCattleNums" :key"index" :title"item.fatCalfNum" classcollapse-item title-bordershow :borderfalse clicktoggleItem(…...

【Netty技术专题】「原理分析系列」Netty强大特性之Native transports扩展开发实战
Netty强大特性之Native transports技术原理分析 背景介绍JNI概念介绍不同平台的JNI实现 使用Native transports库Maven的分类器(Classifier)使用Linux native transport使用MacOS/BSD native transport库构建native transport库Linux版本要求MacOS/BSD版…...
1-1 动手学深度学习v2-线性回归-笔记
简化核心模型 假设1: 影响房价的关键因素是卧室个数,卫生间个数和居住面积,记为 x 1 x_{1} x1, x 2 x_{2} x2, x 3 x_{3} x3假设2: 成交价是关键因素的加权和 y w 1 x 1 w 2 x 2 w 3 x 3 b yw_{1}x_{1}w_{2}x_{2}w_{3…...

算法每日一题: 使用循环数组所有元素相等的最少秒数 | 哈希
大家好,我是星恒,今天给大家带来的是一道需要感觉规律的题目,只要读懂题目中的规律,就可以做出来了 这道题用到了哈希,还有一个关键点比较类似循环队列 题目:leetcode 2808 给你一个下标从 0 开始长度为 n…...

canvas实现涂鸦画板功能
查看专栏目录 canvas实例应用100专栏,提供canvas的基础知识,高级动画,相关应用扩展等信息。canvas作为html的一部分,是图像图标地图可视化的一个重要的基础,学好了canvas,在其他的一些应用上将会起到非常重…...

6-3、T型加减速单片机程序【51单片机+L298N步进电机系列教程】
↑↑↑点击上方【目录】,查看本系列全部文章 摘要:根据前两节内容,已完成所有计算工作,本节内容介绍具体单片机程序流程及代码 一、程序流程图 根据前两节文章内容可知,T型加减速的关键内容是运动类型的判断以及定时…...

Flutter组件 StatefulWidget、StatelessWidget 可继承写法
前言 学过Java的同学,应该都知道面向对象语言的三大特征,封装、继承、多态; Dart也是面向对象的语言,但是在Flutter中的很多组件都被下划线 _ 标记为私有,导致无法继承,本文将介绍一种非私有的创建组件写…...

skywalking链路追踪
skywalking 1.简介1.1 skywalking介绍1.2 链路追踪框架对比1.3 Skywalking架构 2 环境构建2.1 windows环境2.1.1 启动skywalking服务和UI界面2.1.2 在IDEA启动项目中使用Skywalking2.1.3 skywalking持久化 2.2 linux环境 1.简介 微服务架构已经是一个很通用的系统架构…...

如何在苹果Mac上进行分屏,多任务处理?
Apple 在 macOS Catalina 中引入了 Split View,让您可以同时查看两个应用程序。如果同时处理多个应用程序,但在它们之间切换时感到沮丧,小编教给大家在 Macbook Pro/Air 或 iMac 上使用分屏功能流畅地进行多任务处理。 注意:您可…...

【Java EE】----Spring框架创建和使用
1.Spring框架创建 创建一个maven项目 添加Spring框架支持 <dependencies> 上下文<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.3.RELEASE</version></depende…...

UE4 C++ 静态加载类和资源
静态加载类和资源:指在编译时加载,并且只能在构造函数中编写代码 .h //增加所需组件的头文件 #include "Components/SceneComponent.h" //场景组件 #include "Components/StaticMeshComponent.h" //静态网格体组件 #include &qu…...

洛谷C++简单题小练习day9—[AHOI2017]寻找探监点
day9--[AHOI2017]寻找探监点--2.7 习题概述 题目描述 一个nn 的网格图(标号由 1,1 开始)上有 m 个探测器,每个探测器有个探测半径 r ,问这 nn 个点中有多少个点能被探测到。 输入格式 第一行 3 个整数 n,m,r。 接下来 m 行&…...

JVM双亲委派机制
双亲委派模型是一种组织类加载器之间关系的一种规范,他的工作原理是:如果一个类加载器收到了类加载的请求,它不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,这样层层递进,最终所有的加载请求都被传到最顶层的启动类加载器中,只有当父类加载器无法完成这个加载…...

思科模拟器实验合集
目 录 实验一 常用网络命令的使用.................................... 1 实验二 双绞线制作.................................................. 12 实验三 网络模拟软件.............................................. 15 实验四 交换机基本配置..................…...

18.AUTOSAR 网络管理系统(一)
目录 1.为什么需要整车网络管理 2.本地唤醒和网络唤醒 3.小结 1.为什么需要整车网络管理 在描述AUTOSAR网络管理细节前,大家可以思考几个问题: 1.网络管理为整车系统提供了什么样的服务? 2.整车网络视角看,每个ECU的上下电是…...
802.11 MAC帧介绍
控制帧 RTS(Request To Send):用于申请无线媒介的使用时间CTS(Clear To Send):用于回复RTS帧ACK:对MAC帧的肯定确认PS-POLL:STA用于从AP中获取因省电模式而缓存的数据,只…...

【高阶数据结构】B-树详解
文章目录 1. 常见的搜索结构2. 问题提出使用平衡二叉树搜索树的缺陷使用哈希表的缺陷 3. B-树的概念4. B-树的插入分析插入过程分析插入过程总结 5. B-树的代码实现5.1 B-树的结点设计5.2 B-树的查找5.3 B-树的插入实现InsertKey插入和分裂测试 6. B-树的删除(思想&…...

elementui常用组件-个人版(间断更新)
Dialog 对话框 el-dialog <el-dialogtitle"提示":visible.sync"dialogVisible"width"30%":before-close"handleClose"><span>这是一段信息</span><span slot"footer" class"dialog-footer"…...

无人机在化工消防救援中的应用,消防无人机应用场景分析
火灾对社会环境具有较大影响,因此需要重视消防灭火救援工作,注重现代化技术的运用,将无人机应用到救援过程并保障其应用质量。无人机是一项重要技术,便于消防灭火救援操作,使救援过程灵活展开,排除不利影响…...

华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...

图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...