【测试】自动化

目 录

  • 一.什么是自动化
  • 二.自动化测试分类
  • 三.selenium工具(web自动化测试工具)
  • 四.环境部署
  • 五.什么是驱动?
  • 1.常见的元素操作
  • 2.窗口
  • 3.执行脚本
  • 4.等待
  • 5.浏览器的操作
  • 6.弹窗
  • 7.选择器
  • 8.文件上传`
  • 9.浏览器参数

一.什么是自动化

有效的减少人力的消耗,同时提高生活的质量

通过自动化测试有效减少人力的投入,同时提高了测试的质量和效率

回归测试,版本越来越多,版本回归的压力越来越大,仅仅通过人工测试来回归所有的版本肯定是不现实的,所以我们需要借助自动化测试


二.自动化测试分类

  • 接口自动化测试

  • UI自动化测试(界面测试,分为一下两种)

  1. 移动端自动化测试
  2. web端自动化测试(我们目前要学习的)

三.selenium工具(web自动化测试工具)

为什么选择 selenium 作为我们的 web 自动化测试工具?

  1. 开源免费
  2. 支持多浏览器。如 Chrome、Firefox、IE浏览器等等~
  3. 支持多系统。如 Linux、Windows、MacOS
  4. 支持多语言。(Java Python CSharp Ruby JavaScript Kotlin)
  5. selenium 包提供了很多可供测试使用的 API

四.环境部署

如果想要使用 selenium 实施 web 自动化测试,需要的环境是什么?

  • Chrome浏览器
  • 谷歌驱动(ChromeDriver)
  • selenium工具包

在这里插入图片描述


五.什么是驱动?

汽车有驱动可以让汽车跑起来

计算机也有驱动程序可以驱动计算机和设备工作起来

人工测试的情况下,人来手动的打开浏览器,那么驱动就是人力

自动化来说,代码不能够直接打开浏览器,需要借助驱动程序才能打开浏览器

selenium 编写的自动化脚本是如何打开浏览器 (selenium Driver 浏览器三者之间的关系)

实现一个自动搜索迪丽热巴的自动化脚本

在这里插入图片描述
在这里插入图片描述

简单自动化示例主要包含五个步骤:

  1. 创建驱动实例,创建会话
  2. 访问网站
  3. 查找元素
  4. 操作元素
  5. 结束会话

selenium 常用方法

  1. 查找页面元素:findElement ()

参数:By 类(提供通过什么方式来查找元素)

返回值:webElement

当元素可以在页面找到的情况下,程序正确退出

当元素在页面找不到的情况下,程序执行报错

  1. 元素的定位:By类
  • selector

基础选择器 / 复合选择器

功能︰选中页面中指定的标签元素

通过开发者工具以及箭头指引 我们可以找到如下搜索框的标签元素,然后进行 copy 复制即可

在这里插入图片描述

  • xpath

语法:

层级:/子级 //跳级
属性:@
函数::contains()…

自动化里要求元素的定位必须要唯一

但是手动在页面复制 selector 或者 xpath 元素不一定是唯一的,需要我们进行手动修改到唯一


1.常见的元素操作

对元素的操作前提:能够找到元素

在这里插入图片描述
在这里插入图片描述

上面代码就是在百度浏览器输入 hahaha!!! ,最后返回。

当我们复制好选择器定位元素的方式后,发现数据显示不一定,难道真的重复吗?

前端代码里可能存在其他的代码命令跟关键词重复了,并不是元素定位不唯一

  1. 输入文本
WebElement ele = driver.findElement(By.cssSelector("#kw"));
ele.sendKeys("hahaha!!!");

或者

driver.findElement(By.cssSelector("#kw")).sendKeys("hahaha!!!");

其中两行没有缩写的代码仅适用于文本字段和内容可编辑的元素(如果反向操作代码也不会报错)

  1. 点击 click
driver.findElement(By.cssSelector("#kw")).click();
  1. 提交 submit(仅适用于表单元素)
driver.findElement(By.cssSelector("#su")).submit();

selenium 官方不推荐使用 submit ,更推荐 click。

  1. 清除 clear

当输入错误的时候可以清除重新再输入

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

多数使用场景:频繁测试输入是否可以重复输入

  1. 获取文本

可以通过这个方法获取到元素对应的文本

String text = driver.findElement(By.cssSelector("#s-top-left > div > a")).getText();
System.out.println("获取到的文本 " + text);

但是如果想打印按钮 “百度一下” 这个文本是打印不出来的,因为 “百度一下” 是属于 属性,而不是文本。

在这里插入图片描述

获取属性对应的值 getAttribute();

  1. 获取页面的标题和URL
System.out.println(driver.getTitle());
System.out.println(driver.getCurrentUrl());

2.窗口

  1. 窗口大小的设置:最大化、最小化、全屏窗口、手动设置窗口大小

在这里插入图片描述

  1. 窗口的切换

打开百度首页,点击图片超链接进入到百度图片首页,获取百度图片页面的“百度一下”按钮,结果报错?
在这里插入图片描述

当浏览器每次打开一个标签页的时候,会自动的给每个标签页进行标识(句柄)

在这里插入图片描述
在这里插入图片描述

哪个是百度首页的句柄?哪个是百度图片首页的句柄?看不出来

在这里插入图片描述
在这里插入图片描述

当我们打开了好几个窗口,怎么切换呢?基本在自动化中不会遇到

  1. 屏幕截图(保存现场)

在浏览器中搜索 “蔡徐坤” 之后,转到第二个页面,继续打印人物名字 “蔡徐坤”,发现程序报错!此时就需要所以屏幕截图(保存现场)来保存数据再来打印

在这里插入图片描述

此处屏幕保存截图文件需要用到一个包

在这里插入图片描述

经过上述操作之后发现还是不行,因为当代码执行到查找结果页的元素时候,页面还没有加载完全,页面渲染的速度和程序执行的速度相比属实小巫见大巫,所以此处就需要在代码里添加等待机制。

当文件名为固定格式(已经存在重名的文件),程序多次执行生成的图片文件会被同名覆盖。所以此时可以将文件名的命名添加动态数据 (时间戳)


3.执行脚本

executeScript ()

在这里插入图片描述


4.等待

四种等待:强制等待、,隐式等待、显示等待、流畅等待

 

  • 强制等待:程序阻塞进行,Thread.sleep(),会用到,但是自动化里不能用的特别的多。每一个自动化方法就是一个自动化测试用例。一个用例就需要10s的时间100个用例,1000s;200个用例,2000s。只能接受十几秒或者几分钟之内。
  • 隐式等待:隐式等待会作用于driver的整个生命周期在这里插入图片描述
    隐式等待会一直轮询判断元素是否存在,如果不存在就等待设置好的时间里不断的进行轮询,直到元素能够被找到
  • 显示等待:只等待某一行需要等待的元素,避免在其他代码行去等待浪费时间
    在这里插入图片描述

显示等待和隐式等待不能同时使用,同时使用可能会出现意想不到的等待结果

有时候隐式等待和显示等待不生效/达不到目的的时候可以加上强制等待


5.浏览器的操作

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

在这里插入图片描述

在这里插入图片描述


6.弹窗

弹窗的类型:警告弹窗、确认弹窗、提示弹窗

  • 警告弹窗:
    在这里插入图片描述

  • 确认弹窗:
    在这里插入图片描述

  • 提示弹窗:
    在这里插入图片描述

处理弹窗的步骤:

  1. 将driver对象作用到弹窗上(切换到弹窗)driver. switchTo.alert()
  2. 选择 确认accept() / 取消dismiss() (提示弹窗输入文本)sendKeys ()(在页面上看不到输入文本的执行效果)

虽然警告弹窗只有确认按钮,注意:accept和dismiss都能处理

虽然警告弹窗和确认弹窗都没有输入文本的地方,但如果要执行 alert.sendKeys 代码也不会报错


7.选择器

选项的选择方式

  1. 根据文本来选择
  2. 根据属性值来选择
  3. 根据序号来选择

在这里插入图片描述

在这里插入图片描述


8.文件上传`

sendKeys("本地文件路径+文件")
在这里插入图片描述


9.浏览器参数

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

无头模式

在这里插入图片描述

浏览器的参数设置需要在创建浏览器对象之前

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于PPNSA+扰动算子的车间调度最优化matlab仿真,可以任意调整工件数和机器数,输出甘特图

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于PPNSA扰动算子的车间调度最优化matlab仿真,可以任意调整工件数和机器数,输出甘特图和优化收敛曲线。 2.测试软件版本以及运行结果展示 MATLAB2022a版本运行…

[力扣 Hot100]Day27 合并两个有序链表

题目描述 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 出处 思路 简单题,两个指针就能解决。 代码 class Solution { public:ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {if(!list1)…

蓝桥杯嵌入式学习记录——按键的使用

目录 一、按键原理简介 二、cubeMX的配置 三、按键的短按代码 四、按键的长按代码 一、按键原理简介 在STM32中,按键连接通常使用GPIO(通用输入/输出)端口来实现。当按键未被按下时,GPIO端口处于高电平状态(即1&am…

CSS 评分器星星效果

<template><view class="rating"><!-- 5颗星 --><input value="5" name="rating" id="star5" type="radio"><label for="star5"></label><!-- 4颗星 --><input val…

每日一练:LeeCode-530、二叉搜索树的最小绝对差【二叉搜索树+pre辅助节点+DFS】

本文是力扣LeeCode-530、二叉搜索树的最小绝对差【二叉搜索树pre辅助节点DFS】 学习与理解过程&#xff0c;本文仅做学习之用&#xff0c;对本题感兴趣的小伙伴可以出门左拐LeeCode。 给你一个二叉搜索树的根节点 root &#xff0c;返回 树中任意两不同节点值之间的最小差值 。…

Docker容器运行

1、通过--name参数显示地为容器命名&#xff0c;例如:docker run --name “my_http_server” -d httpd 2、容器重命名可以使用docker rename。 3、两种进入容器的方法&#xff1a; 3.1、Docker attach 例如&#xff1a; 每间隔一秒打印”Hello World”。 Sudo docker run…

杂题——字符串——试题 算法训练 二元函数

分析&#xff1a; 关键在于&#xff0c;如果处理输入的字符串成表达式字符串分三种情况&#xff1a; 如果 S 中只包含一个整数&#xff0c;则该整数就是表达式 S 的值&#xff1b;如果 S 中包含 f 函数&#xff0c;则递归计算 f 函数的参数&#xff0c;并将计算结果代入 f 函数…

第三百五十一回

文章目录 1. 概念介绍2. 获取方法3. 示例代码4. 对比与总结4.1 横向对比4.2 内容总结 我们在上一章回中介绍了"如何获取当前系统语言"相关的内容&#xff0c;本章回中将介绍获取当前时区.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们使用的北京…

线程池 ThreadPool

文章目录 线程池一、线程池概述1、什么是线程池&#xff1f;2、为什么需要线程池&#xff1f;3、线程池的优势4、基本原理 二、线程池相关接口与方法1、Executor2、ExecutorService3、ScheduledExecutorService4、Runnable & Callable5、Future & FutureTask6、execute…

永久内核映射

内存就像墙上的气球&#xff0c;32体系就好比是小孩&#xff0c;64位体系好比是大人。对于位置比较低的气球&#xff0c;抬抬脚就可以够到&#xff0c;这些气球相当于DMA内存(可用于设备直接内存访问)&#xff1b;位置再高一点的气球&#xff0c;小孩伸手可以够到&#xff0c;这…

AutoKeras(Python自动化机器学习)多模态数据和多任务

要点拓扑 AutoKeras 拓扑 要点 常规机器学习&#xff1a;scikit-learn示例探索性数据分析和数据预处理&#xff0c;线性回归&#xff0c;决策树图像分类ResNet模型示例&#xff0c;合成数据集DenseNet模型示例绘图线性回归和决策树模型使用Python工具seaborn、matplotlib、pan…

import tensorflow_hub报错

问题&#xff1a; 导入tensorflow_hub报ModuleNotFoundError: No module named ‘tensorflow.python.checkpoint’ 解决&#xff1a; tensorflow-estimator版本不对 和tensorflow&#xff08;2.6.0&#xff09;版本一致 。 pip install -U tensorflow-estimator2.6.0 验证&a…

一个收集了大量的C#/.NET/.NET Core项目宝库组织

项目宝库介绍 为.NET开发者提供一个寻找优秀C#/.NET/.NET Core项目和框架的入口&#xff0c;通过了解和对比更多的项目和框架来选择最适合我们自己学习、工作开发的一套项目或者框架。优秀的项目不应该被埋没&#xff0c;欢迎大家一起加入这个组织共同完善、发展.NET社区&…

线程和进程【并发和并行、线程上下文切换、线程的状态】

线程和进程【并发和并行、线程上下文切换、线程的状态】 什么是并发与并行&#xff1f;什么是线程上下文切换&#xff1f;线程状态&#xff1a;一个线程的一生 转自 极客时间 进程&#xff1a;是指内存中运行的一个应用程序&#xff0c;每个进程都有自己独立的内存空间&#x…

RapidMiner数据挖掘2 —— 初识RapidMiner

本节由一系列练习与问题组成&#xff0c;这些练习与问题有助于理解多个基本概念。它侧重于各种特定步骤&#xff0c;以进行直接的探索性数据分析。因此&#xff0c;其主要目标是测试一些检查初步数据特征的方法。大多数练习都是关于图表技术&#xff0c;通常用于数据挖掘。 为此…

51_蓝桥杯_蜂鸣器与继电器

一 电路 二 蜂鸣器与继电器工作原理 2.1蜂鸣器与继电器 2.2 十六进制与二进制 二进制 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 十六进制 0 1 2 3 4 5 6 7 8 9 A B C D E F 2.3非门 二 代码 …

C++初阶(十一) list

一、list的介绍及使用 1.1 list的介绍 list的文档介绍 1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。 2. list的底层是双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点…

第三节作业:基于 InternLM 和 LangChain 搭建你的知识库

参考文档&#xff1a;https://github.com/InternLM/tutorial/tree/main/langchain 基础作业&#xff1a;复现课程知识库助手搭建过程 (截图) 1.环境配置 2.知识库搭建 &#xff08;1&#xff09;数据收集 收集由上海人工智能实验室开源的一系列大模型工具开源仓库作为语料库来…

004 - Hugo, 分类

004 - Hugo, 分类content文件夹 004 - Hugo, 分类 content文件夹 ├─.obsidian ├─categories │ ├─Python │ └─Test ├─page │ ├─about │ ├─archives │ ├─links │ └─search └─post├─chinese-test├─emoji-support├─Git教程├─Hugo分类├─…

STL:优先级队列的实现

STL中优先级队列本质上就是堆。在上一篇博客中讲到过&#xff1a;堆是一种完全二叉树&#xff0c;逻辑结构上看起来像树&#xff0c;但在物理结构中是存储在线性表中。与普通线性表不同的是&#xff0c;堆中数据大小是规律排列的&#xff1a;小堆中每个节点都大于它的父节点&am…