自动化测试Selenium【基础篇一】

news2024/11/17 9:25:14

自动化测试Selenium【基础篇一】

  • 🍎一.什么是自动化测试
    • 🍒1.1 自动化测试介绍
    • 🍒1.2 单元测试
    • 🍒1.3 接口自动化
    • 🍒1.4 UI自动化
    • 🍒1.5 为什么选择selenium作为我们的web自动化工具?
    • 🍒1.6什么是驱动
  • 🍎二.Selenium基本语法
    • 🍒2.1 创建驱动
    • 🍒2.2 定位元素方法
      • 🍉2.2.1 css
      • 🍉2.2.2 xpath
    • 🍒2.3 元素的操作
      • 🍉2.3.1 模拟按键输入 sendKeys
      • 🍉2.3.2 点击 click 提交 submit
      • 🍉2.3.3 清除对象输入的文本 clear
      • 🍉2.3.4 获取文本getText()
    • 🍒2.4 等待
      • 🍉2.4.1 强制等待
      • 🍉2.4.2 隐式等待(整个生命周期)
      • 🍉2.4.3 显示等待

🍎一.什么是自动化测试

🍒1.1 自动化测试介绍

自动化测试指软件测试的自动化,在预设状态下运行应用程序或者系统,预设条件包括正常和异常,最后评估运行结果。将人为驱动的测试行为转化为机器执行的过程

自动化测试包括UI自动化,接口自动化,单元测试自动化
按照这个金字塔模型来进行自动化测试规划,可以产生最佳的自贡话测试产出投入比(ROI),可以用较少的投入获得很好的收益

图片来源百度
在这里插入图片描述

🍒1.2 单元测试

最大的投入应该在单元测试上,单元测试运行的频率也更加高

🍒1.3 接口自动化

接口测试就是API测试,相对于UI自动化API自动化更加容易实现,执行起来也更稳定。
接口自动化的有以下特点:
● 可在产品前期,接口完成后介入
● 用例维护量小
● 适合接口变动较小,界面变动频繁的项目

常见的接口自动化测试工具有,RobotFramework,JMeter,SoapUI,TestNG+HttpClient,Postman等

🍒1.4 UI自动化

虽然测试金字塔告诉我们尽量多做API层的自动化测试,但是UI层的自动化测试更加贴近用户的需求和软件系统的实际业务。并且有时候我们不得不进行UI层的测试

UI自动化的特点:
● 用例维护量大
● 页面相关性强,必须后期项目页面开发完成后介入
● UI测试适合与界面变动较小的项目

UI自动化测试的好处:
降低大型系统的由于变更或者多期开发引起的大量的回归测试的人力投入,这可能是自动化测试最主要的任务,特别是在程序修改比较频繁,效果是非常明显的,自动化测试前期人力投入较多,但后期进入维护期后,可节省大量人力,而手工测试后期需要增加大量人力用于回归测试,减少重复测试的时间,实现快速回归测试,创建优良可靠的测试过程,减少人为错误,可以运行更多更繁琐的测试,可以执行一些手工测试困难或不可能进行的测试,更好的利用资源,测试脚本的重用性

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

选择它原因的:

(1)开源免费
(2〉支持多浏览器。如Chrome、Firefox、IE、edge、Safari. .3)支持多系统。如Linux、Windows、MacOS
(4)支持多语言。如java、python. . . .
(5) selenium包底层有很多可使用的API

🍒1.6什么是驱动

驱动的工作原理是:
汽车有驱动,两轮驱动、四轮驱动可以让汽车跑起来计算机里也有驱动程序,可以驱动计算机和设备工作起来打开浏览器也需要驱动
人工测试情况下(人工手动的驱动打开浏览器)自动化来说﹐代码不能够直接打开浏览器,需要借助驱动程序来协助打开浏览器
代码可以驱使驱动来打开浏览器
selenium驱动浏览器三者之间的关系
在这里插入图片描述

🍎二.Selenium基本语法

🍒2.1 创建驱动

这里我们只需要获取一个浏览器驱动就可以了
在这里插入图片描述

public class seleniumTest {
    ChromeDriver driver1 = new ChromeDriver();   // 创建谷歌浏览器驱动

    FirefoxDriver driver2 = new FirefoxDriver(); // 创建火狐浏览器驱动

}

🍒2.2 定位元素方法

我们先使用driver.findElement()来定位页面元素
之后我们在.findElement()方法中可以看到两种定位元素的方法一个是 css定位元素,另一个是xpath定位元素方法

在这里插入图片描述
fn + F12就可以进行获取元素
使用这个箭头就可以获取到你想要获取的元素
在这里插入图片描述
使用箭头点击输入框,然后右击3那点击复制就可以获取到元素,

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

🍉2.2.1 css

driver.findElement(By.cssSelector("输入你想获取到的元素"));

在这里插入图片描述

🍉2.2.2 xpath

driver.findElement(By.xpath("输入你想获取到的元素"));

在这里插入图片描述

🍒2.3 元素的操作

🍉2.3.1 模拟按键输入 sendKeys

放我们进行测试时就需要在输入框内输入我们想要输入测试的数据 记得要加 " "
driver.findElement(By.cssSelector("#kw")).sendKeys("迪丽热巴");
在这里插入图片描述

🍉2.3.2 点击 click 提交 submit

click和lsubmit都可以操作按钮
可以click不一定可以submit但是页面的任何元素都可以click , selenium官方文档里不建议使用submit

driver.findElement(By.cssSelector("##su")).click();

在这里插入图片描述

🍉2.3.3 清除对象输入的文本 clear

driver.findElement(By.cssSelector("#kw")).clear();
在这里插入图片描述
在这里插入图片描述

🍉2.3.4 获取文本getText()

String str = driver.findElement(By.cssSelector("##su")).getText();

🍒2.4 等待

代码的执行速度比较快,而前端页面渲染的速度相对较慢一点,可能导致的结果是:代码已经执行到下一步了,页面还没有渲染出来,元素找不到
等待又分为三个:强制等待、隐式等待、显式等待

🍉2.4.1 强制等待

让程序暂停一会,等待指定的时间之后继续执行下一步

   //不添加等待的话页面没有渲染完成,导致最后一步的查找页面元素失败,添加强制等待3s再进行页面元素查找,结果成功   
        driver.findElement(By.cssSelector("#kw")).sendKeys("迪丽热巴");
        driver.findElement(By.cssSelector(" #su ")).click();
        Thread.sleep( 3000);

优点:语法简单,适合调试的时候用

缺点:需要等待固定的时间,造成测试时间的大量消耗,大大的减少了自动化的测试效率

1个测试用例使用强制等待,平均时间为3~5s以5s为例
假如说web自动化有100个,那么强制等待的时间100*5S=500s=8min20s自动化执行的时间还没有加上,预计自动化执行时间可能就超过15min甚至更久

🍉2.4.2 隐式等待(整个生命周期)

隐式等待作用在webdriver整个生命周期,只要没有走到driver.quit即没有退出浏览器,隐式等待都是一直存在的

在规定的时间范围内,轮询等待元素出现之后就立即结束,如果在规定的时间内元素仍然没有出现,则会抛出一MoSuchElementException异常

        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));

优点:节省了大量的等待时间,元素展示之后就可以直接执行下一步,执行效率高

缺点:需要等待所有的元素都展现才会执行下一步,仍然会有额外的时间上的浪费

🍉2.4.3 显示等待

WebDriverWait webDriverWait = new WebDriverWait(driver, Duration.ofSeconds(10));
第一参数: webdriver对象
第二个参数:Duration类方法,用于设置强制等待的时间

等待什么时候为止,即等待括号里的条件满足为止,如果条件在指定时间内没有满足,就抛出异常

优点:针对某一个元素来进行等待,极大降低了自动化整体的等待时间

缺点:写法更为复杂presenceOfElementLocated:检查页面是否存在对应的元素textToBe:检查页面元素对应的文本信息是否正确

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

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

相关文章

DaVinci:限定器 - RGB

调色页面:限定器Color:Qualifier限定器 - RGB Qualifier - RGB根据像素的三原色通道(红、绿、蓝)的值来选择画面上的对应区域,从而限制节点调色的范围。限定器 - RGB 根据指定的各个原色通道的色阶范围来选择连续的近似…

Java 对象处理流(ObjectOutputStream\ObjectInputStream)

文章目录前言什么是对象流?基本介绍ObjectOutputStreamObjectInputStream对象处理流的使用细节前言 处理流:是对一个已存在的流进行处理和封装,通过所封装的流的功能调用实现对数据的操作。而处理流中也有不同的分类,此片介绍的是…

C规范编辑笔记(十一)

往期文章: C规范编辑笔记(一) C规范编辑笔记(二) C规范编辑笔记(三) C规范编辑笔记(四) C规范编辑笔记(五) C规范编辑笔记(六) C规范编辑笔记(七) C规范编辑笔记(八) C规范编辑笔记(九) C规则编辑笔记(十) 正文: 因为太久没有更新了,今天就…

Elasticsearch7.8.0版本高级查询—— 多关键字精确查询文档

目录一、初始化文档数据二、多关键字精确查询文档2.1、概述2.2、示例一、初始化文档数据 在 Postman 中,向 ES 服务器发 POST 请求 :http://localhost:9200/user/_doc/1,请求体内容为: {"name":"张三","…

干货 | 算力网络节点可信度评估和安全管控方案

以下内容整理自清华大学《数智安全与标准化》课程大作业期末报告同学的汇报内容。第一部分:算力网络第二部分:可信度评估一、可信度评估在整个算力网络处理任务的实施流程中,不同部分有不同可信度评估的方法,具体包括:…

忙活了一年的开源社区,终于赶上了春节前的末班车!

随着春节的临近,忙碌了一年的小伙伴们,是不是都已经踏上了回乡的列车?我呢也终于在春节前,完成了 HelloGitHub.com 的重构。HelloGitHub.com 是我在 2017 年的时候用 FlaskjQuery 开发的网站,最初的想法很简单就是为了…

MySQL34道练习题

1、取得每个部门最高薪水的人员名称(要求显示部门编号、人员名称和薪资) 第一步:查询每个部门的最高薪资 SELECT deptno,max(sal) as maxsal FROM emp GROUP BY deptno; 第二步:把上面查询结果当做临时表t&#xff0…

Pagoda panel宝塔面板

宝塔面板是干什么的?有哪些典型的功能作用?宝塔面板是开发的服务器管理工具,是一家专业从事服务器相关软件和服务研发的公司。宝塔的愿景是让用户更容易使用服务器。宝塔面板是一款服务器管理软件,支持Windows和Linux系统,服务器…

【SpringCloud18】SpringCloud Alibaba Nacos服务注册和配置中心

1.Nacos简介 1.1为什么叫Nacos 前四个字母分别为Naming和Configuration的前两个字母,最后的s为Service 1.2 是什么 一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台Nacos:Dynamic Naming and Configuration ServiceNacos就是注册中心 配置中心…

简单双向LSTM模型实战项目

前言 数据来自于kaggle比赛Ventilator Pressure Prediction,数据背景介绍请看官方说明代码来自于当前排名第一的团队Shujun, Kha, Zidmie, Gilles, B,他们在获得第一名的成绩以后发了一篇博客,提供了他们在比赛中使用的模型,包括…

[C/C++]对象指针

对象指针 1.对象指针变量 和基本类型变量一样,对象在初始化之后也会在内存中占有若干字节的内存空间。因此在程序中,我们可以通过对象名或对象的地址来访问该对象。对象指针变量就是一个用于保存对象在内存中存储空间首地址的指针变量,它与普…

Python Matplotlib 中如何用 plt.savefig 存储图片

目录前言正文前言 plt.show()展示图片的时候,截图进行保存,图片不是多么清晰 如何保存高清图也是一知识点 函数包名:import matplotlib.pyplot as plt 正文 主要功能:保存绘制数据后创建的图形。使用此方法可以将创建的图形保…

MobaXterm的安装与使用

安装: 分为开箱即用和逐步配置版本,这里选择开箱即用的版本,网址如下: MobaXterm Xserver with SSH, telnet, RDP, VNC and X11 - Home EditionFree X server for Windows with tabbed SSH terminal, telnet, RDP, VNC and X11-forwarding - Home Editionhttps://mobaxterm.m…

Java面试题(2),这是一篇会一直更新的博客!欢迎大家留言~

Java面试题第二篇1. 并发的三大特性2、线程池、解释线程池参数3、BeanFactory和ApplicationContext有什么区别?4、描述一下Spring Bean的生命周期5、Spring的几种Bean的作用域6、单例Bean是线程安全的吗?7、Spring框架用到了哪些设计模式8、Spring事务的…

Magic Leap CEO:我们的目标是再回到消费级AR市场

相比于几年前,Magic Leap在CEO换人后经历了一系列变化,其中更明显的变化,就是这家公司似乎变得更低调、更务实。此前,Magic Leap的内容库包括了大量趣味、娱乐的AR应用,而现在则主要改成B端解决方案,随着ML…

小程序商城源码代码分析

微信平台开发直播插件后,许多传统的商家开始加入小程序商城源码开发的队伍中,以此来自主管理自己的产品。下文,小编将为大家盘点一下小程序商城源码的优势,以及代码分析。 一、小程序商城源码有什么优势? 1、拓展私域…

定时任务中将redis数据存入数据库相关问题

我的GitHub:Powerveil GitHub我的Gitee:Powercs12 (powercs12) - Gitee.com皮卡丘每天学Java觉得昨天晚上只是分析和解决问题,很多人可能不知道出bug的场景,今天决定重现bug,让代码改回错误代码,重现看到一…

科研快报|PacBio 16S全长测序探究游离唾液微生物群失调在牙周病中的潜在作用

背景介绍唾液是口腔中最重要的介质。唾液中游离细菌的生态失调可能与牙周病的发生、发展、预后和复发有关,但这种潜在的关系尚不清楚。本研究的目的是探讨游离唾液微生物群在不同牙周状态下的潜在作用,它们对非手术牙周治疗的反应,以及治疗后…

年后旺季,服装实体店如何利用微信做新款宣传?

每年过完大年开工后,我们服装的旺季就来临了,对于很多服装店铺来说,无疑是一个必须把握的大好机会。就拿这几天的天气来说,广东最高温度达到了26度,很多人又把自己春夏的衣服拿出来了,而年后气温必然回暖&a…

Swin Transformer代码实战篇

🍊作者简介:秃头小苏,致力于用最通俗的语言描述问题 🍊往期回顾:CV攻城狮入门VIT(vision transformer)之旅——近年超火的Transformer你再不了解就晚了! CV攻城狮入门VIT(vision transformer)之旅——VIT原…