【测试】自动化测试02
努力经营当下,直至未来明朗!
文章目录
- 前言 + 回顾 + 预告
- 一、常见的元素操作
- 1. 输入文本sendKeys()
- 2. 点击click
- 3. 提交submit(通过回车键提交)
- 4. 清除clear
- 5. 获取文本getText()
- 6. 获取属性对应的值getAttribute()
- 7. 查看title和url:getTitle()、getCurrentUrl()
- 二、窗口(了解即可)
- 1. 窗口大小的设置
- 2. 窗口的切换
- 3. 屏幕截图
- 三、等待
- 1. 强制等待Thread.sleep()
- 2. 隐式等待
- 3. 显式等待
- 四、 浏览器导航
- 五、 弹窗
- 六、下拉选择框的处理
- 七、执行脚本
- 八、文件的上传
- 九、浏览器的参数设置
- 无头模式
- JUnit
- 1. 注解
- 1. @Test
- 2. @BeforeEach
- 3. @BeforeAll
- 4. @AfterEach
- 5. @AfterAll
- 2. 断言(Assertions类)
- 小结
前言 + 回顾 + 预告
- 执行性能测试工具:loadrunner
- 性能调优:硬件、软件
- 开发:后端、前端、客户端
- 注:影响程序性能的因素实在太多了,所以并不好学
【回顾】
-
为什么要执行自动化测试?
历史在线功能/版本需要进行回归测试,而自动化回归时间<<人力回归时间
(不仅要考虑版本和功能是否在线,也要考虑是否还有用户在使用) -
自动化测试分类:
1)接口自动化测试
2)UI自动化测试(界面测试):Web自动化测试、移动端自动化测试
【注:selenium针对的只能是web自动化测试】 -
选择selenium工具的原因:
1)开源免费
2)支持多浏览器
3)支持多系统
4)支持多语言编程
5)提供了丰富的web自动化测试API -
常见API
1)查找页面元素:findElement()、findElements()[查找某一类元素]
2)元素定位方式:xpath、selector
① 通常情况下,不需要手动来编写xpath或selector,选择页面元素后复制粘贴就行。
② 另外,自动化里要求元素的定位必须要唯一,如果复制出来的元素在页面不唯一(在开发者工具中使用ctrl+f进行查看唯一性),需要手动进行小范围的修改
【预告】
主要内容:
1.常见的元素操作
2.窗口
3.执行脚本
4.等待
5.浏览器的操作
6.弹窗
7.选择器
8.文件上传
9.浏览器参数
普通小孩也要热爱生活!
一、常见的元素操作
对元素操作的前提是找到元素!可以使用开发者工具
1. 输入文本sendKeys()
1)仅适用于文本字段和内容可编辑的元素(如果反向操作代码也不会报错,如修改按钮的文字)
2)前端代码中可能存在其他的代码命名跟关键词重复了,此情况并不是元素定位不唯一,在ctrl+f中进行详细查看。
3)如果反向操作代码也不会报错,如修改按钮的文字,程序可以正常执行退出,但是页面也不会受到任何干扰。
2. 点击click
[测试个人博客系统的登录]
1)个人博客系统地址:个人博客登录
2)测试登录:
3. 提交submit(通过回车键提交)
1)使用较少,仅适用于表单元素。
2)Selenium官方不推荐使用submit,更推荐click
4. 清除clear
使用较少,需要频繁测试是否可以重复输入时使用
5. 获取文本getText()
1)getText()返回的是String类型,可以在终端打印查看。
2)查看如超链接等元素对应的文本是否正确。
3)注意:不是所有在页面中可以看到的元素对应的文字都是文本,一定要区分属性与文本!
4)区分属性和文本:属性=”值” ,文本是在标签之间的文字
6. 获取属性对应的值getAttribute()
注意:返回类型也是String
7. 查看title和url:getTitle()、getCurrentUrl()
二、窗口(了解即可)
1. 窗口大小的设置
最大化、最小化、全屏窗口、手动设置窗口大小
2. 窗口的切换
1)打开百度首页,点击图片超链接进入到百度图片首页,获取百度图片的“百度一下”按钮,结果报错?
因为:当标签页多个时,程序就会不知道具体操作的是哪个标签页。
2)浏览器每次打开一个标签页时,会自动地给每个标签页进行标识(句柄)
① 获取所有标签页的句柄getWindowHandles()
返回类型是Set<String>
② 获取当前页面的句柄getWindowHandle()
返回类型是String
③ 注意窗口的切换:switchTo()
④ 补充:自动化是基本上没有“浏览器打开很多窗口进行切换”的场景的,此情况下可以直接使用get跳转到当前页面。
3. 屏幕截图
① 屏幕截图需要使用的依赖(记得刷新)
② 屏幕截图可以用来<保存现场>
③ 当代码执行到查找结果的元素时,页面还没有完全加载出来:代码执行速度>页面渲染速度。
所以:当程序执行的时候我们需要在代码中添加等待机制。
④ 当文件名为固定格式(已经存在重名的文件),程序多次执行生成的图片文件就会被覆盖。
如果需要保存每次截图,那就可以将文件的命名添加动态数据**(时间戳)**
三、等待
- 程序执行速度是要比浏览器渲染的速度快很多的,所以在执行自动化的过程中就需要进行等待。
- 四种等待:强制等待、隐式等待、显式等待、流畅等待
1. 强制等待Thread.sleep()
- 强制等待就是程序阻塞进行
- 强制等待会用到,但是自动化里不能频繁使用(会拖慢执行速度)
- 每一个自动化方法就是一个自动化测试用例
2. 隐式等待
-
会自动检查元素在不在,如果在的话就执行,不在就等待到出现该元素
-
隐式等待(注:Millis是毫秒)
-
隐式等待会作用于driver的整个生命周期
-
隐式等待会一直轮询判断元素是否存在,如果不存在就在等待设置好的时间里不断地进行轮询,直到元素能够被找到。
【注:每一行代码最多只等待设置好的等待时间,如果在该时间内没有找到就会报错】
3. 显式等待
WebDriverWait(WebDriver,Duration)
四、 浏览器导航
浏览器有前进、后退以及刷新操作
五、 弹窗
- 弹窗的类型:警告弹窗、确认弹窗、提示弹窗
- 会发现:使用开发者工具时是无法定位到弹窗的元素的
- 处理弹窗的步骤:
1)将driver对象作用到弹窗上(切换到弹窗):driver.switchTo.alert()
2)选择确认accept()、取消dismiss()、提示弹窗输入文本sendKeys() - 注意:get的参数是url(浏览器),而不是文件的路径。在本地打开html文件后需要复制的是浏览器的链接而不是文件的路径!
- 会发现:在弹窗上输入文本sendKeys时看不到输入文本,但是页面是有结果的
- 警告弹窗只有确认按钮,但是accept和dismiss都是可以处理的
- 虽然警告弹窗和确认弹窗都没有输入文本的地方,但是如果执行
alert.sendKeys()
代码是不会报错的,只是页面没有任何反应的。
六、下拉选择框的处理
-
可以使用开发者工具定位到下拉选择框,但是会发现无法定位到可选选项的元素
-
选项的选择方式:
1)根据文本来选择
2)根据属性值来选择
3)根据序号来选择:是从0开始的,与xpath进行区分! -
需要创建选择框对象,是对选择框对象进行操作的:
new Select(WebElement)
七、执行脚本
-
写js代码来执行原生的代码
-
执行脚本:
executeScript(参数:js代码)
-
js代码可以在开发者工具中的console控制台上测试,然后直接作为参数传入
-
控制台测试
-
代码:(js之间使用分号;隔开)
-
有时候就是必须要使用js原生代码执行(如果js代码不会写可以进行百度)
八、文件的上传
- 当我们选择文件之后,其实只是将文件的路径进行了上传,并不是直接将文件进行了上传。
- 所以我们的操作方法:使用sendKeys来写入文件路径就行(注意是文件夹下的路径而不是浏览器!)。
九、浏览器的参数设置
在实际工作中,测试人员将自动化部署在机器上自动执行,测试人员不会每次都一直盯着自动化执行的过程,而是直接查看自动化执行的结果。
无头模式
- 无头模式:只关注结果,不在乎过程。(即:页面上不会有任何操作显示)
- 无头模式创建浏览器驱动是有参数的
- 只能在终端进行查看,桌面上无任何显示。
- 默认是有头模式
- 浏览器参数设置需要在创建浏览器驱动对象之前
JUnit
- 自动化是使用selenium脚本来实现的;JUnit是java的单元测试工具,只不过我们在实现自动化的时候需要借用一下下junit库中提供的一些方法。
- 期望写完自动化测试方法后可以直接进行调用运行。
- 使用junit5进行自动化的优化。
- junit5支持的java最低版本为8
- 如果之前已经下载过其他版本的junit,再下载junit5可能就会失败。此时需要先找到下载好的其他版本的junit删除后再下载junit5.(删除是在external libraries底下找到并 open in,然后删除目标的整个文件夹)
- 需要添加junit依赖(参考Gitee片段)
1. 注解
Junit中提供了非常强大的注解功能
1. @Test
1)表示该方法是测试方法,执行当前类的时候会自动执行该类下所有带@Test注解的用例。(一般来说一个方法就是一个测试用例)
2)当我们使用了junit之后,可以非常方便地看到本次执行了多少用例以及执行的结果。
3)如果方法使用static修饰,即使加上@Test注解也是无法执行的
2. @BeforeEach
1)表明当前方法需要在每个用例执行之前都执行一次
2)修饰的方法不是用例
3. @BeforeAll
1)当前的方法需要在当前类下所有用例执行之前执行一次
2)@BeforeAll修饰的方法必须是static修饰的静态方法
3)同样,修饰的方法不是用例
4)当@BeforeAll和@BeforeEach同时存在时,@BeforeAll修饰的方法先进行执行
4. @AfterEach
当前的方法需要在每个用例执行之后都执行一次
5. @AfterAll
1)当前的方法在当前类下所有的用例执行之后执行一次
2)当@AfterAll和@AfterEach同时存在时,@AfterAll修饰的方法最后执行
3)被该注解修饰的方法必须为静态方法
4)可以存放释放驱动对象的语言
2. 断言(Assertions类)
断言实际值和预期值是否符合,不要忘记在方法上加上@Test注解。
- assertEquals(预期值, 实际值); 断言匹配
- assertNotEquals(预期值, 实际值); 断言不匹配
- assertTrue(参数必须有真假); 断言结果为真
- assertFalse(参数必须有真假); 断言结果为假
- assertNull(参数可以只有一个实际值,也可以有多个参数); 断言结果为空
- assertNotNull(实际值); 断言结果不为空
注:空字符串””不是null,String str=null才是null
【补充】
如果在自动化测试过程中因为输入本来就错误的而报错了,此时并不是测试完成,应该要进行断言判断。
如:根据登录错误后or登录正确后会出现的页面的元素进行判定。
小结
- 常见的元素操作:sendKeys()、click()
- 窗口:大小、切换、截图
- 等待:强制、隐式、显式
- 浏览器导航
- 弹窗
- 下拉选择框的处理(选择框对象Select)
- 执行脚本
- 文件上传
- 无头模式(选项对象)
- JUnit注解、断言
相关文章:
【测试】自动化测试02
努力经营当下,直至未来明朗! 文章目录前言 回顾 预告一、常见的元素操作1. 输入文本sendKeys()2. 点击click3. 提交submit(通过回车键提交)4. 清除clear5. 获取文本getText()6. 获取属性对应的值getAttribute()7. 查看title和ur…...
Python空间分析| 02 利用Python计算空间局部自相关(LISA)
局部空间自相关 import esda import numpy as np import pandas as pd import libpysal as lps import geopandas as gpd import contextily as ctx import matplotlib.pyplot as plt from geopandas import GeoDataFrame from shapely.geometry import Point from pylab im…...
idea快捷编码:生成for循环、主函数、判空非空、生成单例方法、输出;自定义快捷表达式
前言 idea可根据输入的简单表达式进行识别,快速生成语句 常用的快捷编码:生成for循环、主函数、判空非空、生成单例方法、输出 自定义快捷表达式 博客地址:芒果橙的个人博客 【http://mangocheng.com】 一、idea默认的快捷表达式查看 Editor…...
【Spring】@Value注入配置文件 application.yml 中的值失败怎么办
本期目录一、 问题背景二、 问题原因三、 解决方法一、 问题背景 今天碰到的问题是用 Value 注解无法注入配置文件 application.yml 中的配置值。 检查过该类已经交给 Spring 容器管理了,即已经在类上加了 Configuration 和 ConfigurationProperties(prefix &quo…...
CleanMyMac清理工具软件功能优势介绍
CleanMyMac更新最新版本x4.12,完美适配新版系统macOS10.14,拥有全新的界面。CleanMyMac可以让您安全、智能地扫描和清理整个系统,删除大型未使用的文件,减少iPod库的大小,最精确的应用程序卸载,卸载不必要的…...
【面试题】对JS中的事件冒泡、事件捕获、事件委托的理解
大厂面试题分享 面试题库后端面试题库 (面试必备) 推荐:★★★★★地址:前端面试题库DOM事件流(event flow )存在三个阶段:事件捕获阶段、处于目标阶段、事件冒泡阶段。Dom标准事件流的触发的先…...
SAP 理解合并会计报表
随着企业集团的发展,集团内部会出现越来越多的公司;复杂的公司结构和复杂的集团内业务,使得集团内部管理困难重重,信息渠道严重失灵。除了内部管理的需要,企业还有义务向相关方提供详细的和及时的信息。ERP中的合并会计…...
Ubuntu 命令常用命令——定时启动程序
crontab -e 语法 crontab[ -u user ] file或 crontab[ -u user ] { -l | -r | -e }说明: crontab是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。 -U Lser 是指设定指定user的时程表,这个前提是你必…...
笔试题(十三):走迷宫
# 描述 # 定义一个二维数组 N*M ,如 5 5 数组下所示: # int maze[5][5] { # 0, 1, 0, 0, 0, # 0, 1, 1, 1, 0, # 0, 0, 0, 0, 0, # 0, 1, 1, 1, 0, # 0, 0, 0, 1, 0,}; # 它表示一个迷宫,其中的1表示墙壁,0表示可以走的路&#…...
Gradle相关的知识学习
这里有一套博客文章写的比较通俗易懂:https://www.jianshu.com/p/8e1ddd19083a...
SpringMVC的工作原理
SpringMVC的工作原理流程图 SpringMVC流程 1、 用户发送请求至前端控制器DispatcherServlet。 2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。 3、 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截…...
问卷数据分析流程
文章目录一、数据合并1. 读取数据2. 数据预览二、数据清洗1. 检验ID是否重复,剔除ID重复项2. 剔除填写时间小于xx分钟的值3.处理 量表题 一直选一个选项的问题三、数据清洗1.1 将问卷单选题的选项code解码,还原成原来的选项1.2 自动获取单选题旧的选项列…...
【观察】Solidigm P44 Pro SSD评测:原厂品质+软硬兼施=性能怪兽
众所周知,目前SSD(固态硬盘)已取代HDD(机械硬盘)成为电脑中常见的存储设备,特别是在技术创新的持续推动下,如今SSD的速度和效率都在不断地提高,从SATA2 3GB发展到SATA3 6GBÿ…...
String对象的创建和比较
String类的概述 String类:代表字符串。 Java 程序中的所有字符串字面值(如 “abc” )都作 为此类的实例实现。 String是JDK中内置的一个类:java.lang.string 。 String表示字符串类型,属于引用数据类型,不…...
09 OpenCV图形检测
1 轮廓描边 cv2.findContours() 函数是OpenCV中用于寻找轮廓的函数之一。它可以用于在二值图像中查找并检测出所有的物体轮廓,以及计算出这些轮廓的各种属性,例如面积、周长、质心等。 cv2.findContours() 函数的语法如下: contours, hiera…...
解密Teradata与中国市场“分手”背后的原因!国产数据库能填补空白吗?
2月15日,西方的情人节刚刚过去一天,国内IT行业就爆出一个大瓜。 继Adobe、甲骨文、Tableau、Salesforce之后,又一个IT巨头要撤离中国市场。 Teradata天睿公司官宣与中国市场“分手”,结束在中国的直接运营。目前,多家…...
Bernstein-Vazirani算法
B-V算法 (1) 问题描述 给定布尔函数f:{0,1}n→0,1f:{\left\{ {0,1} \right\}^n} \to{0,1}f:{0,1}n→0,1, 函数fff的值是由输入比特串xxx和确定的比特串sss做模2意义下的内积:f(x)x⋅s(mod2),f\left( x \right) x \cdot s\left( {\bmod 2} \right),f(x)x⋅s(mod2),…...
华为OD机试 - 相对开音节 | 备考思路,刷题要点,答疑 【新解法】
最近更新的博客 【新解法】华为OD机试 - 关联子串 | 备考思路,刷题要点,答疑,od Base 提供【新解法】华为OD机试 - 停车场最大距离 | 备考思路,刷题要点,答疑,od Base 提供【新解法】华为OD机试 - 任务调度 | 备考思路,刷题要点,答疑,od Base 提供【新解法】华为OD机试…...
MyBatis
一、MyBatis环境搭建创建工程启动idea开发工具,选择工具栏中的“file”--“new”--“project”选项弹出“new project”对话框,编辑项目名称 选择maven项目,项目路径 单击 create 创建即可。引入相关依赖<dependencies><dependency&…...
良好的作息表
今天给大家带来“传说中”的“世界上最健康的作息时间表”(仅供参考),随时提醒自己吧,毕竟身体可是自己的哦。 7:30 起床:英国威斯敏斯特大学的研究人员发现,那些在早上5:22-7:21分起床的人,其血液中有一种能引起心脏病…...
【郭东白架构课 模块一:生存法则】01|模块导学:是什么在影响架构活动的成败?
你好,我是郭东白。这节课是我们模块一的导入部分,我会先来介绍模块的主要内容,以及为什么我要讲生存法则这个话题。 一名软件架构师要为相对复杂的业务制定,并且引导实施一个结构化的软件方案。这个发现最终方案和推动实施的过程&…...
webshell免杀之函数与变量玩法
webshell免杀之函数与变量玩法 前言 前文列举了一些用符号免杀的例子,此篇文章就以函数和变量来尝试下免杀。 本文以PHP为例,用PHP中函数和变量及语法特性,在不隐藏函数关键字情况下进行免杀。 动态函数 PHP中支持一个功能叫 variable fu…...
【新解法】华为OD机试 - 去重求和 | 备考思路,刷题要点,答疑,od Base 提供
华为 OD 清单查看地址:blog.csdn.net/hihell/category_12199275.html 去重求和 | 备考思路,刷题要点,答疑,od Base 提供 给定一个数组,编写一个函数, 计算他的最大N个数和最小N个数的和, 需要对数组进行去重。 输入 第一行输入M,M表示数组大小 第二行输入M个数,表…...
MySQL 服务正在启动.MySQL 服务无法启动.服务没有报告任何错误。请键入 NET HELPMSG 3534 以获得更多的帮助。总结较全 (已解决)
输入以下命令启动mysql: net start mysql出现以下错误提示: MySQL 服务正在启动 .MySQL 服务无法启动。服务没有报告任何错误。请键入 NET HELPMSG 3534 以获得更多的帮助。 出现这个问题的话,一般有几个情况: 一、MySQL安装文…...
【数据结构与算法】数组2:双指针法 二分法(螺旋矩阵)
文章目录今日任务1.Leetcode977:有序数列的平方(1)题目(2)思路(3)暴力排序(4)双指针法2.Leetcode209:长度最小的子数组(1)题目&#x…...
librtmp优化
librtmp是一个RTMP的开源库,很多地方用它来做推流、拉流。它是RTMPDump开源软件里的一部分,librtmp的下载地址:RTMPDump,目前最新版是V2.3。本文重点介绍librtmp优化。 1、调整网络输出块大小。 RTMP_Connect0函数中LibRTMP是关…...
数据结构与算法(二):线性表
上一篇《数据结构与算法(一):概述》中介绍了数据结构的一些基本概念,并分别举例说明了算法的时间复杂度和空间复杂度的求解方法。这一篇主要介绍线性表。 一、基本概念 线性表是具有零个或多个数据元素的有限序列。线性表中数据…...
IOS安全区域适配
对于 iPhone 8 和以往的 iPhone,由于屏幕规规整整的矩形,安全区就是整块屏幕。但自从苹果手机 iphoneX 发布之后,前端人员在开发移动端Web页面时,得多注意一个对 IOS 所谓安全区域范围的适配。这其实说白了就是 iphoneX 之后的苹果…...
在Java 中 利用Milo通信库,实现OPCUA客户端,并生成证书
程序结构: 配置文件resources: opcua.properties 西门子PLC端口号为4840,kepserver为49320 #opcua服务端配置参数 #opcua.server.endpoint.urlopc.tcp://192.168.2.102:49320 opcua.server.endpoint.urlopc.tcp://192.168.2.11:4840 opcu…...
三分钟学会用Vim
Vim知识点 目录Vim知识点一:什么是vim二:vim常用的三种模式三:vim的基本操作一:什么是vim vim最小集 vim是一款多模式的编辑器—各种模式—每种模式的用法有差别—每种模式之间可以互相切换 但是我们最常用的就是3~5个模式 vi…...
php编程/推送者seo
java Spring Controller 获取请求参数的几种方法1、直接把表单的参数写在Controller相应的方法的形参中,适用于get方式提交,不适用于post方式提交。若"Content-Type""application/x-www-form-urlencoded",可用post提交url形式&#…...
关于茶网站模板/在线crm
第一次备份,没什么经验,搜了一下,发现很简单,但是大多都是win7上面的demo,我这里用的Windows Server 2008,备份之后发现.dump文件找不到,搜了一下才发现,生成备份的文件,…...
如何做起一个网站推广/百度app下载官方
什么是binlogbinlog日志用于记录所有更新了数据或者已经潜在更新了数据(例如,没有匹配任何行的一个DELETE)的所有语句。语句以“事件”的形式保存,它描述数据更改。binlog作用因为有了数据更新的binlog,所以可以用于实…...
网站后台做完文章不显示/四种营销策略
有scp命令,传输文件却显示报错无此命令今天下午在一台服务器上使用scp命令向另外一台服务器传文件的时候,报此错误 bash: scp: command not found ,lost connection,以为是该服务器没有安装此命令,w ...学习mongo系列(五) AND,$or,&…...
信阳高端网站建设/凡科建站
jQuery演示代码段可将QuickTime视频播放器动态插入您的网页。 这是带有最少控件的原始视频播放,如果要自定义,可以非常容易地在播放器对象中设置参数。 要使用该代码,请记住要更改视频的网址,并且您需要一个id为“ player”的div。…...
做app推广上哪些网站吗/2345浏览器网站进入
1001:枚举保留题目的集合,然后模拟(二进制状态压缩 暴力所选的问题k 0~1<<m-1。再把n个人的状态进行按位&) 1002:直接在输入的时候扫一遍就行了,顺便用前缀和统计出每个字母的出现次数 ÿ…...