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

news/2023/5/28 7:07:43

自动化测试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.exyb.cn/news/show-4578705.html

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

php做日历并能输入,PHP做日历

今天给大家做一个php的日历表,大家可以直接复制代码就可以了,首先给大家一个思路图片发自简书App下面是代码日历$year $_GET[y]?$_GET[y]:date(Y);$month $_GET[m]?$_GET[m]:date(m);$day date(t,mktime(0,0,0,$month,1,$year));//一个月多少天$W …

P2并联Cruise仿真模型,同时Simulink控制策略模型也同步分享,目前模型已经可正常运行,速度跟随效果也很nice

P2并联Cruise仿真模型,同时Simulink控制策略模型也同步分享,目前模型已经可正常运行,速度跟随效果也很nice :4780669572313540Cruise仿真帝

Typora+坚果云实现笔记云同步,真的很nice!

一、认识坚果云 坚果云是一款便捷、安全的专业网盘产品,通过文件自动同步、共享、备份功能,为用户实现智能文件管理,提供高效办公解决方案。 坚果云是微软加速器云存储合作伙伴,IBM全球创业企业扶持计划成员,安全稳定的…

nice值 linux进程,Linux进程优先级和nice值

在学习了Linux的完全公平调度算法(CFS)后,记录下学习轨迹,这篇文章主要讲述,完全公平调度算法的工作方式,和一些调度知识我们可以通过ps -l看到当前正在运行的进程的详细信息其中F:表示进程旗标,标识进程所…

发现一个很nice的API调试工具

以前进行接口发送调试都是用 Postman,最近发现一款很Nice的API工具,可以完全替代postman。 以下是官网介绍: ApiPost是一款支持模拟POST、GET、PUT等常见HTTP请求,支持团队协作,并可直接生成并导出接口文档的API 文档、调试、Mock、测试一体…

一个很Nice的Android Banner轮播图库

Android萌新一枚,最近项目中有一个轮播图的需求,网上搜了很多资料,也看了多开源库,但不是bug多就是库不维护。后来在GitHub上找到一个很棒的轮播图–BannerViewPager库推荐个大家。 它的使用方法很简单,也是我看过其他…

动态规划之背包问题,简洁版本C++代码及分析

小议动态规划之背包问题1、01背包问题2、完全背包问题蒟蒻一枚,本来想把学算法的心得写在笔记本上,想到可以来社区写写博客,和网友们交流心得,第一次写有不好的地方欢迎指正,后续会慢慢改进。下面进入正题,…

用Redis实现微博关注关系的分析

关注关系产生的四种关系状态 关注粉丝双向关注(互粉)无关系需求分析 在微博中,每一个用户都会有一个关注列表,一个粉丝列表。用户可以查看自己的关注,粉丝列表,也可以查看别人的关注,粉丝列表。并且,要展示…

AsyncTask解析(上)——原理分析与超简单demo实现

最近因为在做项目的过程中经常需要进行网络传输,所以打算把几个常用的网络通信框架和GitHub上面的开源框架梳理一遍,本文简单介绍了AsyncTask工作原理以及一个十分简单的应用demo。 当然,了解一个组件,最好是先从Android API文档…

【Redis】用Redis实现微博关注关系

关注关系产生的四种关系状态 关注粉丝双向关注(互粉)无关系 需求分析 在微博中,每一个用户都会有一个关注列表,一个粉丝列表。用户可以查看自己的关注,粉丝列表,也可以查看别人的关注,粉丝列表。并且,要展示…

如何用Redis实现微博关注关系?

戳蓝字“CSDN云计算”关注我们哦!作者 | jockchou责编 | 阿秃关注关系产生的四种关系状态关注粉丝双向关注(互粉)无关系需求分析在微博中,每一个用户都会有一个关注列表,一个粉丝列表。用户可以查看自己的关注,粉丝列表&#xff0…

MapReduce简单需求分析-共同好友及查找互粉的情况

2019独角兽企业重金招聘Python工程师标准>>> MapReduce的设计,最重要的是要找准key,然后制定一系列的数据处理流程。MapReduce的Map中,会把key相同的分配到同一个reduce中,对于key的选择,可以找到某个相同的…

python版mapreduce题目实现寻找共同好友

看到一篇不知道是好好玩还是好玩玩童鞋的博客,发现一道好玩的mapreduce题目,地址http://www.cnblogs.com/songhaowan/p/7239578.html 如图 由于自己太笨,看到一大堆java代码就头晕、心慌,所以用python把这个题目研究了一下。 题目…

相互关注互粉mysql实现

关注关系产生的四种关系状态 关注 粉丝 双向关注(互粉) 无关系 用词follower表示粉丝 -- 追随者 用词following表示关注 -- 追随 设计的结构必须能满足以下功能: 查询关注列表 查询粉丝列表 查询双向关注列表 判断两个用户的关系 查询带关系状态的任一列表 第一种方…

转载:MapReduce--求哪些人两两之间是互粉好友

原文链接:https://www.cnblogs.com/break-lian/p/9780133.html MapReduce--求哪些人两两之间是互粉好友 数据: A:B,C,D,F,E,O B:A,C,E,K C:F,A,D,I D:A,E,F,L E:B,C,D,M,L F:A,B,C,D,E,O,M G:A,C,D,E,F H:A,C,D,E,O I:A,O J:B,O K:A,C,D L:D,E,F M:E,…

Spring-配置

1.有网络时配置(idea版) 新建一个spring项目,选项如下: 生成目录如下: 2.环境测试 结果: 3.创建bean 在spring框架中,使用面向接口编程,实现解耦。 4.配置spring-config.xml 5.获取spring容器中的…

IDEA 社区版本(CE)Spring配置

最近用CE社区版的IDEA构建Spring Boot项目,发现没有Spring相关的选项,去官方网站查阅了下,原来社区版是有限制的:点击查看 但还是有对应插件能补充相关能力。 所以可以下载 Spring Assistant、Springirun、Spring Tools等针对CE版…

云服务器部署前后端分离项目(若依)详细教程

第一次在Linux云服务器上部署前后端分离项目,查了很多资料和视频,踩了许多坑。成功实现部署若依的前后端分离项目后,想记录一下前后端部署的过程,供学习的小伙伴参考。 目录1. 环境准备2. 开放端口3. 下载前后端项目4. 前端部署5.…

Spring基本配置

spring的作用 Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言&a…

Spring配置Druid数据源

文章目录前言纯手写配置导入Spring编写配置提取参数编写XML文件通过IOC容器获取Conncetion前言 闲的没事,刚好最近学校讲到这个数据库,就想用Spring来玩玩,优化一下数据库操作。以前是直接用Mybatis的,但是想玩玩别的方式&#x…