当前位置: 首页 > news >正文

【测试】自动化测试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类)
  • 小结


前言 + 回顾 + 预告

  1. 执行性能测试工具:loadrunner
  2. 性能调优:硬件、软件
  3. 开发:后端、前端、客户端
  4. 注:影响程序性能的因素实在太多了,所以并不好学

回顾

  1. 为什么要执行自动化测试?
    历史在线功能/版本需要进行回归测试,而自动化回归时间<<人力回归时间
    (不仅要考虑版本和功能是否在线,也要考虑是否还有用户在使用)

  2. 自动化测试分类:
    1)接口自动化测试
    2)UI自动化测试(界面测试):Web自动化测试、移动端自动化测试
    【注:selenium针对的只能是web自动化测试

  3. 选择selenium工具的原因:
    1)开源免费
    2)支持多浏览器
    3)支持多系统
    4)支持多语言编程
    5)提供了丰富的web自动化测试API

  4. 常见API
    1)查找页面元素:findElement()、findElements()[查找某一类元素]
    2)元素定位方式:xpath、selector

① 通常情况下,不需要手动来编写xpath或selector,选择页面元素后复制粘贴就行。
② 另外,自动化里要求元素的定位必须要唯一,如果复制出来的元素在页面不唯一(在开发者工具中使用ctrl+f进行查看唯一性),需要手动进行小范围的修改

预告
主要内容:
1.常见的元素操作
2.窗口
3.执行脚本
4.等待
5.浏览器的操作
6.弹窗
7.选择器
8.文件上传
9.浏览器参数


普通小孩也要热爱生活!

一、常见的元素操作

对元素操作的前提是找到元素!可以使用开发者工具

1. 输入文本sendKeys()

1)仅适用于文本字段和内容可编辑的元素(如果反向操作代码也不会报错,如修改按钮的文字)
0
2)前端代码中可能存在其他的代码命名跟关键词重复了,此情况并不是元素定位不唯一,在ctrl+f中进行详细查看。
1
3)如果反向操作代码也不会报错,如修改按钮的文字,程序可以正常执行退出,但是页面也不会受到任何干扰。

2. 点击click

2

[测试个人博客系统的登录]
1)个人博客系统地址:个人博客登录
2)测试登录:
3

3. 提交submit(通过回车键提交)

1)使用较少,仅适用于表单元素
2)Selenium官方不推荐使用submit,更推荐click

4. 清除clear

使用较少,需要频繁测试是否可以重复输入时使用
5

5. 获取文本getText()

1)getText()返回的是String类型,可以在终端打印查看。
2)查看如超链接等元素对应的文本是否正确。
3)注意:不是所有在页面中可以看到的元素对应的文字都是文本,一定要区分属性与文本!
4)区分属性和文本:属性=”值” ,文本是在标签之间的文字
67

6. 获取属性对应的值getAttribute()

注意:返回类型也是String
8
9

7. 查看title和url:getTitle()、getCurrentUrl()

10
11


二、窗口(了解即可)

1. 窗口大小的设置

最大化、最小化、全屏窗口、手动设置窗口大小
12

2. 窗口的切换

1)打开百度首页,点击图片超链接进入到百度图片首页,获取百度图片的“百度一下”按钮,结果报错?
因为:当标签页多个时,程序就会不知道具体操作的是哪个标签页。
13

2)浏览器每次打开一个标签页时,会自动地给每个标签页进行标识(句柄
① 获取所有标签页的句柄getWindowHandles()
返回类型是Set<String>
15

② 获取当前页面的句柄getWindowHandle()
返回类型是String

③ 注意窗口的切换:switchTo()
16

④ 补充:自动化是基本上没有“浏览器打开很多窗口进行切换”的场景的,此情况下可以直接使用get跳转到当前页面。

3. 屏幕截图

① 屏幕截图需要使用的依赖(记得刷新)
20

② 屏幕截图可以用来<保存现场>
21

③ 当代码执行到查找结果的元素时,页面还没有完全加载出来:代码执行速度>页面渲染速度。
所以:当程序执行的时候我们需要在代码中添加等待机制。
④ 当文件名为固定格式(已经存在重名的文件),程序多次执行生成的图片文件就会被覆盖
如果需要保存每次截图,那就可以将文件的命名添加动态数据**(时间戳)**


三、等待

  1. 程序执行速度是要比浏览器渲染的速度快很多的,所以在执行自动化的过程中就需要进行等待。
  2. 四种等待:强制等待、隐式等待、显式等待、流畅等待

1. 强制等待Thread.sleep()

  1. 强制等待就是程序阻塞进行
  2. 强制等待会用到,但是自动化里不能频繁使用(会拖慢执行速度)
  3. 每一个自动化方法就是一个自动化测试用例

2. 隐式等待

  1. 会自动检查元素在不在,如果在的话就执行,不在就等待到出现该元素

  2. 隐式等待(注:Millis是毫秒)
    22

  3. 隐式等待会作用于driver的整个生命周期

  4. 隐式等待会一直轮询判断元素是否存在,如果不存在就在等待设置好的时间里不断地进行轮询,直到元素能够被找到。
    【注:每一行代码最多只等待设置好的等待时间,如果在该时间内没有找到就会报错

3. 显式等待

WebDriverWait(WebDriver,Duration)
23


四、 浏览器导航

浏览器有前进、后退以及刷新操作
25


五、 弹窗

  1. 弹窗的类型:警告弹窗、确认弹窗、提示弹窗
  2. 会发现:使用开发者工具时是无法定位到弹窗的元素的
  3. 处理弹窗的步骤:
    1)将driver对象作用到弹窗上(切换到弹窗):driver.switchTo.alert()
    2)选择确认accept()、取消dismiss()、提示弹窗输入文本sendKeys()
  4. 注意:get的参数是url(浏览器),而不是文件的路径。在本地打开html文件后需要复制的是浏览器的链接而不是文件的路径!
  5. 会发现:在弹窗上输入文本sendKeys时看不到输入文本,但是页面是有结果的
  6. 警告弹窗只有确认按钮,但是accept和dismiss都是可以处理的
  7. 虽然警告弹窗和确认弹窗都没有输入文本的地方,但是如果执行alert.sendKeys()代码是不会报错的,只是页面没有任何反应的。
    26

六、下拉选择框的处理

  1. 可以使用开发者工具定位到下拉选择框,但是会发现无法定位到可选选项的元素

  2. 选项的选择方式:
    1)根据文本来选择
    2)根据属性值来选择
    3)根据序号来选择:是从0开始的,与xpath进行区分!

  3. 需要创建选择框对象,是对选择框对象进行操作的: new Select(WebElement)
    27


七、执行脚本

  1. 写js代码来执行原生的代码

  2. 执行脚本:executeScript(参数:js代码)

  3. js代码可以在开发者工具中的console控制台上测试,然后直接作为参数传入

  4. 控制台测试
    28

  5. 代码:(js之间使用分号;隔开)
    29
    30

  6. 有时候就是必须要使用js原生代码执行(如果js代码不会写可以进行百度)


八、文件的上传

  1. 当我们选择文件之后,其实只是将文件的路径进行了上传,并不是直接将文件进行了上传。
  2. 所以我们的操作方法:使用sendKeys来写入文件路径就行(注意是文件夹下的路径而不是浏览器!)。
    31

九、浏览器的参数设置

在实际工作中,测试人员将自动化部署在机器上自动执行,测试人员不会每次都一直盯着自动化执行的过程,而是直接查看自动化执行的结果。

无头模式

  1. 无头模式:只关注结果,不在乎过程。(即:页面上不会有任何操作显示)
  2. 无头模式创建浏览器驱动是有参数的
  3. 只能在终端进行查看,桌面上无任何显示。
  4. 默认是有头模式
  5. 浏览器参数设置需要在创建浏览器驱动对象之前
    32

JUnit

  1. 自动化是使用selenium脚本来实现的;JUnit是java的单元测试工具,只不过我们在实现自动化的时候需要借用一下下junit库中提供的一些方法。
  2. 期望写完自动化测试方法后可以直接进行调用运行。
  3. 使用junit5进行自动化的优化。
  4. junit5支持的java最低版本为8
  5. 如果之前已经下载过其他版本的junit,再下载junit5可能就会失败。此时需要先找到下载好的其他版本的junit删除后再下载junit5.(删除是在external libraries底下找到并 open in,然后删除目标的整个文件夹)
  6. 需要添加junit依赖(参考Gitee片段)

1. 注解

Junit中提供了非常强大的注解功能

1. @Test

1)表示该方法是测试方法,执行当前类的时候会自动执行该类下所有带@Test注解的用例。(一般来说一个方法就是一个测试用例)
2)当我们使用了junit之后,可以非常方便地看到本次执行了多少用例以及执行的结果。
3)如果方法使用static修饰,即使加上@Test注解也是无法执行的
33

2. @BeforeEach

1)表明当前方法需要在每个用例执行之前都执行一次
2)修饰的方法不是用例

3. @BeforeAll

1)当前的方法需要在当前类下所有用例执行之前执行一次
2)@BeforeAll修饰的方法必须是static修饰的静态方法
35
3)同样,修饰的方法不是用例
4)当@BeforeAll和@BeforeEach同时存在时,@BeforeAll修饰的方法先进行执行

4. @AfterEach

当前的方法需要在每个用例执行之后都执行一次

5. @AfterAll

1)当前的方法在当前类下所有的用例执行之后执行一次
2)当@AfterAll和@AfterEach同时存在时,@AfterAll修饰的方法最后执行
3)被该注解修饰的方法必须为静态方法
4)可以存放释放驱动对象的语言


2. 断言(Assertions类)

断言实际值和预期值是否符合,不要忘记在方法上加上@Test注解
36
37

  1. assertEquals(预期值, 实际值); 断言匹配
  2. assertNotEquals(预期值, 实际值); 断言不匹配
  3. assertTrue(参数必须有真假); 断言结果为真
  4. assertFalse(参数必须有真假); 断言结果为假
  5. assertNull(参数可以只有一个实际值,也可以有多个参数); 断言结果为空
  6. assertNotNull(实际值); 断言结果不为空

注:空字符串””不是null,String str=null才是null

补充
如果在自动化测试过程中因为输入本来就错误的而报错了,此时并不是测试完成,应该要进行断言判断。
如:根据登录错误后or登录正确后会出现的页面的元素进行判定。


小结

  1. 常见的元素操作:sendKeys()、click()
  2. 窗口:大小、切换、截图
  3. 等待:强制、隐式、显式
  4. 浏览器导航
  5. 弹窗
  6. 下拉选择框的处理(选择框对象Select)
  7. 执行脚本
  8. 文件上传
  9. 无头模式(选项对象)
  10. JUnit注解、断言

5555

相关文章:

【测试】自动化测试02

努力经营当下&#xff0c;直至未来明朗&#xff01; 文章目录前言 回顾 预告一、常见的元素操作1. 输入文本sendKeys()2. 点击click3. 提交submit&#xff08;通过回车键提交&#xff09;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可根据输入的简单表达式进行识别&#xff0c;快速生成语句 常用的快捷编码&#xff1a;生成for循环、主函数、判空非空、生成单例方法、输出 自定义快捷表达式 博客地址&#xff1a;芒果橙的个人博客 【http://mangocheng.com】 一、idea默认的快捷表达式查看 Editor…...

【Spring】@Value注入配置文件 application.yml 中的值失败怎么办

本期目录一、 问题背景二、 问题原因三、 解决方法一、 问题背景 今天碰到的问题是用 Value 注解无法注入配置文件 application.yml 中的配置值。 检查过该类已经交给 Spring 容器管理了&#xff0c;即已经在类上加了 Configuration 和 ConfigurationProperties(prefix &quo…...

CleanMyMac清理工具软件功能优势介绍

CleanMyMac更新最新版本x4.12&#xff0c;完美适配新版系统macOS10.14&#xff0c;拥有全新的界面。CleanMyMac可以让您安全、智能地扫描和清理整个系统&#xff0c;删除大型未使用的文件&#xff0c;减少iPod库的大小&#xff0c;最精确的应用程序卸载&#xff0c;卸载不必要的…...

【面试题】对JS中的事件冒泡、事件捕获、事件委托的理解

大厂面试题分享 面试题库后端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★地址&#xff1a;前端面试题库DOM事件流&#xff08;event flow &#xff09;存在三个阶段&#xff1a;事件捕获阶段、处于目标阶段、事件冒泡阶段。Dom标准事件流的触发的先…...

SAP 理解合并会计报表

随着企业集团的发展&#xff0c;集团内部会出现越来越多的公司&#xff1b;复杂的公司结构和复杂的集团内业务&#xff0c;使得集团内部管理困难重重&#xff0c;信息渠道严重失灵。除了内部管理的需要&#xff0c;企业还有义务向相关方提供详细的和及时的信息。ERP中的合并会计…...

Ubuntu 命令常用命令——定时启动程序

crontab -e 语法 crontab[ -u user ] file或 crontab[ -u user ] { -l | -r | -e }说明: crontab是用来让使用者在固定时间或固定间隔执行程序之用&#xff0c;换句话说&#xff0c;也就是类似使用者的时程表。 -U Lser 是指设定指定user的时程表&#xff0c;这个前提是你必…...

笔试题(十三):走迷宫

# 描述 # 定义一个二维数组 N*M &#xff0c;如 5 5 数组下所示&#xff1a; # 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,}; # 它表示一个迷宫&#xff0c;其中的1表示墙壁&#xff0c;0表示可以走的路&#…...

Gradle相关的知识学习

这里有一套博客文章写的比较通俗易懂&#xff1a;https://www.jianshu.com/p/8e1ddd19083a...

SpringMVC的工作原理

SpringMVC的工作原理流程图 SpringMVC流程 1、 用户发送请求至前端控制器DispatcherServlet。 2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。 3、 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找)&#xff0c;生成处理器对象及处理器拦截…...

问卷数据分析流程

文章目录一、数据合并1. 读取数据2. 数据预览二、数据清洗1. 检验ID是否重复&#xff0c;剔除ID重复项2. 剔除填写时间小于xx分钟的值3.处理 量表题 一直选一个选项的问题三、数据清洗1.1 将问卷单选题的选项code解码&#xff0c;还原成原来的选项1.2 自动获取单选题旧的选项列…...

【观察】Solidigm P44 Pro SSD评测:原厂品质+软硬兼施=性能怪兽

众所周知&#xff0c;目前SSD&#xff08;固态硬盘&#xff09;已取代HDD&#xff08;机械硬盘&#xff09;成为电脑中常见的存储设备&#xff0c;特别是在技术创新的持续推动下&#xff0c;如今SSD的速度和效率都在不断地提高&#xff0c;从SATA2 3GB发展到SATA3 6GB&#xff…...

String对象的创建和比较

String类的概述 String类&#xff1a;代表字符串。 Java 程序中的所有字符串字面值&#xff08;如 “abc” &#xff09;都作 为此类的实例实现。 String是JDK中内置的一个类&#xff1a;java.lang.string 。 String表示字符串类型&#xff0c;属于引用数据类型&#xff0c;不…...

09 OpenCV图形检测

1 轮廓描边 cv2.findContours() 函数是OpenCV中用于寻找轮廓的函数之一。它可以用于在二值图像中查找并检测出所有的物体轮廓&#xff0c;以及计算出这些轮廓的各种属性&#xff0c;例如面积、周长、质心等。 cv2.findContours() 函数的语法如下&#xff1a; contours, hiera…...

解密Teradata与中国市场“分手”背后的原因!国产数据库能填补空白吗?

2月15日&#xff0c;西方的情人节刚刚过去一天&#xff0c;国内IT行业就爆出一个大瓜。 继Adobe、甲骨文、Tableau、Salesforce之后&#xff0c;又一个IT巨头要撤离中国市场。 Teradata天睿公司官宣与中国市场“分手”&#xff0c;结束在中国的直接运营。目前&#xff0c;多家…...

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意义下的内积&#xff1a;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开发工具&#xff0c;选择工具栏中的“file”--“new”--“project”选项弹出“new project”对话框&#xff0c;编辑项目名称 选择maven项目&#xff0c;项目路径 单击 create 创建即可。引入相关依赖<dependencies><dependency&…...

良好的作息表

今天给大家带来“传说中”的“世界上最健康的作息时间表”(仅供参考)&#xff0c;随时提醒自己吧&#xff0c;毕竟身体可是自己的哦。 7:30 起床&#xff1a;英国威斯敏斯特大学的研究人员发现&#xff0c;那些在早上5:22-7:21分起床的人&#xff0c;其血液中有一种能引起心脏病…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...