自动化测试selenium(1)

自动化测试📪selenium

  • 自动化测试📪selenium
    • 自动化测试📑
      • selenium定位元素📍
    • 实战测试百度搜索🔍
      • 安装测试环境
        • Idea中进行自动化脚本编写
          • 打开网页:
          • 实现搜索功能:
          • 浏览器清空效果`clear()`:
          • 获取元素名称

自动化测试📪selenium

测试是一个软件或者程序运行的保障,想要一个程序得到预期效果不可避免地会进行一些测试,常见的测试有很多,比如:黑盒测试,白盒测试,灰盒测试,单元测试,回归测试等等,这些测试都是对于代码方向上的分类标准,而对于代码的运行模式又分为两种模式。

  1. 手工测试
  2. 自动化测试

这两类测试的区别相信自己从字眼中可以看出区别。

两类测试的应用领域:

手工测试:不经常使用到的一些功能

自动化测试:操作重复性高的功能

接下来主要介绍自动化测试中的selenium的使用。

自动化测试📑

自动化测试中会经常使用到自动化测试框架,而selenium是用于对web自动化测试的一个框架,其作用范围广泛原因就是selenium的特点。

  1. 支持各种浏览器
  2. 支持各种系统平台
  3. 支持各种计算机语言
  4. 有非常丰富的API

要认识selenium首先要认识其工作原理,才可以更加正确的认识和使用。

自动化脚本 ----> 浏览器驱动 -----> 浏览器

在这里插入图片描述

那么具体是如何实现一个自动化脚本呢?

selenium定位元素📍

selenium定位元素常用的两种方法:

  1. CSS选择器
  2. Xpath选择器

在网页上的操作:

在这里插入图片描述

在这里插入图片描述

copy element: 拷贝这一个元素中所有内容

copy outerHTML:拷贝这一条HTML语句

copy selector : css选择器

copy JS path: 拷贝js路径

copy styles : 拷贝样式

copy Xpath :拷贝相对路径

copy full Xpath : 拷贝绝对路径

CSS选择器使用的是CSS语法进行元素定位,常见的有以下几种:

  • id选择器
  • 类选择器
  • 后代选择器
  • 标签选择器
  • ……

而对于Xpath选择器有以下两种:

  • 相对路径【以//开始】
  • 绝对路径

针对相对路径绝对路径,推荐使用相对路径,原因是相对路径效率高,因为效率高,所以也经常使用,对于绝对路径来说,效率低,想要查找一个元素时要从底层目录开始查找,不太可观。

而相对路径中又被细分为四种匹配模式:

  1. 相对路径 + 索引(下标)匹配

    例如://from/span[1]/input意思是定位到from标签中第一个span标签中的input标签

  2. 相对路径 + 属性值

    例如://input[class='s_ipt']意思是定位到一个input标签使用了s_ipt

  3. 相对路径 + 通配符

    例如://*[@*='su']定位到所有使用了su的元素

  4. 相对路径 + 文本匹配

    例如://a[text = '新闻]定位到a标签中文本内容为“新闻”的元素

两个选择器的对比CSS选择器的效率更高。

实战测试百度搜索🔍

安装测试环境

测试浏览器:chrome

使用语言:Java

首先安装一个chrome浏览器:

chrome下载链接

安装之后查看浏览器版本:

在这里插入图片描述

再根据浏览器版本下载一个chromeDriver.

chromeDirver下载地址

根据电脑的系统选择相对的版本:

在这里插入图片描述

在这里插入图片描述

下载之后解压,然后配置Java的环境变量(已经配置可以略过):

在这里插入图片描述

将解压后的文件加入配置好的jdkbin目录下:

在这里插入图片描述

Idea中进行自动化脚本编写

首先需要创建一个maven项目

在这里插入图片描述

pom.xml中添加包并刷新maven仓库。

<dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><version>3.141.59</version>
</dependency>

创建一个Main.class文件。在Main中创建一个main函数直接调用方法即可。

打开网页:
//这段代码的主要功能是确认浏览器和输入浏览器打开的网页
public static void test01()throws InterruptedException {//支持的浏览器启动ChromeOptions options = new ChromeOptions();//允许读取所有请求options.addArguments("--remote-allow-origins=*");//注册驱动WebDriver webDriver = new ChromeDriver(options);//打开百度首页webDriver.get("https://www.baidu.com");
}
实现搜索功能:

有预期结果和实际结果之间的对比打印

public static void test01()throws InterruptedException {ChromeOptions options = new ChromeOptions();//允许读取所有请求options.addArguments("--remote-allow-origins=*");WebDriver webDriver = new ChromeDriver(options);//打开百度首页webDriver.get("https://www.baidu.com");//使用css选择器来寻找//        WebElement element = webDriver.findElement(By.cssSelector(".s_ipt"));//使用xpath选择器来寻找WebElement element = webDriver.findElement(By.xpath("//*[@id=\"kw\"]"));//输入软件测试element.sendKeys("软件测试");//找到百度搜索然后进行点击操作webDriver.findElement(By.cssSelector("#su")).click();//为了观察效果,强制休眠 3 秒sleep(3000);//校验//找到搜索结果List<WebElement> elements = webDriver.findElements(By.cssSelector("a em"));for (int i = 0; i < elements.size(); i++) {System.out.println(elements.get(i).getText());//如果返回结果包含软件测试,证明测试通过,直接结束本次搜索测试if(elements.get(i).getText().contains("软件测试")){System.out.println("测试通过");return;}}//如果不通过就不会退出函数,而会打印这个内容System.out.println("测试不通过");
}
浏览器清空效果clear()
public static void test02() throws InterruptedException {ChromeOptions options = new ChromeOptions();options.addArguments("--remote-allow-origins=*");WebDriver webDriver = new ChromeDriver(options);webDriver.get("https://www.baidu.com");webDriver.findElement(By.cssSelector("#kw")).sendKeys("软件测试");//点击webDriver.findElement(By.cssSelector("#su")).click();sleep(2000);//清空搜索框webDriver.findElement(By.cssSelector("#kw")).clear();//重新填写搜索词    webDriver.findElement(By.cssSelector("#kw")).sendKeys("前端Vue");//点击webDriver.findElement(By.cssSelector("#su")).click();
}
获取元素名称
private static void test04() {ChromeOptions options = new ChromeOptions();options.addArguments("--remote-allow-origins=*");WebDriver webDriver = new ChromeDriver(options);webDriver.get("https://www.baidu.com/");//获取元素中'value'的值String text = webDriver.findElement(By.cssSelector("#su")).getAttribute("value");System.out.println(text.equals("百度一下")?"测试通过":"测试不通过");
}

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用typora+PicGo+Gitee简单实现图片上传功能

本文通过配置PicGoGitee来实现typora图片上传功能&#xff0c;系统是window 注意下载的清单有&#xff1a;PicGo&#xff0c;node.js&#xff0c;配置有&#xff1a;PicGo&#xff0c;node.js&#xff0c;gitee&#xff0c;typora 看着复杂实际上并不难&#xff0c;只是繁琐&am…

基于时域特征和频域特征组合的敏感特征集,再利用CNN进行轴承故障诊断(python编程)

1.文件夹介绍&#xff08;使用的是CWRU数据集&#xff09; 0HP-3HP四个文件夹装载不同工况下的内圈故障、外圈故障、滚动体故障和正常轴承数据。 2.模型 按照1024的长度分割样本&#xff0c;构建内圈故障、外圈故障、滚动体故障和正常轴承样本集 2.1.计算11种时域特征值 # 计…

专题-【线索二叉树】

15年三-1&#xff09; 20年一-11&#xff09;

MYSQL表操作(DML,DDL)

建表并插入数据&#xff1a; mysql> create table worker(-> dept_id int(11) not null,-> emp_id int (11) not null,-> work_time date not null,-> salary float(8,2) not null,-> poli_face varchar(10) not null default 群众,-> name varchar(20) …

【云原生】k8s图形化管理工具之rancher

前言 在前面的k8s基础学习中&#xff0c;我们学习了各种资源的搭配运用&#xff0c;以及命令行&#xff0c;声明式文件创建。这些都是为了k8s管理员体会k8s的框架&#xff0c;内容基础。在真正的生产环境中&#xff0c;大部分的公司还是会选用图形化管理工具来管理k8s集群&…

『分割』 平面模型分割

PCL提供的几个常见模型&#xff1a; pcl::SACMODEL_PLANE&#xff1a;平面模型&#xff0c;用于拟合平面结构的点云数据。 pcl::SACMODEL_SPHERE&#xff1a;球体模型&#xff0c;适用于拟合球体结构的点云数据。 pcl::SACMODEL_CYLINDER&#xff1a;圆柱体模型&#xff0c;用…

Java阶段五Day08

Java阶段五Day08 文章目录 Java阶段五Day08内容回顾学习内容目的自动配置原理SPI-API:一对类似的概念 自定义Starter属性配置问题 网关组件SpringCloud Gateway网关架构微服务网关介绍Spring Cloud Gateway&#xff08;技术选型&#xff09;网关转发入门案例明确案例需求实现案…

LCD-STM32液晶显示中英文-(5.字符编码)

目录 字符编码 字符编码说明参考网站 字符编码 ASCII编码 ASCII编码介绍 ASCII编码表 中文编码 1. GB2312标准 区位码 2. GBK编码 3. GB18030 各个标准的对比说明 4. Big5编码 字符编码 字符编码说明参考网站 字符编码及转换测试&#xff1a;导航菜单 - 千千秀字 …

Linux5.17 Ceph应用

文章目录 计算机系统5G云计算第四章 LINUX Ceph应用一、创建 CephFS 文件系统 MDS 接口1.服务端操作2.客户端操作 二、创建 Ceph 块存储系统 RBD 接口三、创建 Ceph 对象存储系统 RGW 接口四、OSD 故障模拟与恢复 计算机系统 5G云计算 第四章 LINUX Ceph应用 一、创建 CephF…

C语言#define和宏

C语言#define和宏 #define定义标识符#define定义宏#define的替换规则# 和 ####的作用带副作用的宏参数宏和函数对比命名约定 #define定义标识符 #define MAX 1000 #define reg register //为 register这个关键字&#xff0c;创建一个简短的名字 reg #define do_forev…

不满足于RPC,详解Dubbo的服务调用链路

系列文章目录 【收藏向】从用法到源码&#xff0c;一篇文章让你精通Dubbo的SPI机制 面试Dubbo &#xff0c;却问我和Springcloud有什么区别&#xff1f; 超简单&#xff0c;手把手教你搭建Dubbo工程&#xff08;内附源码&#xff09; Dubbo最核心功能——服务暴露的配置、使用…

代码随想录day20

654. 最大二叉树 思路&#xff1a;这道题的目的是从给定的nums数组中找到一个最大值当做二叉树的根节点&#xff0c;然后以最大值左右两边的元素分别构建二叉树。也就是一个左中右的顺序&#xff0c;所以构建二叉树这种题用前序遍历是再合适不过了&#xff0c;因为根节点把左右…