自动化测试selenium(1)

news2024/11/27 0:18:06

自动化测试📪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.coloradmin.cn/o/764463.html

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

相关文章

Vue通过微软官方链接预览pptx docx xlsx

目录&#xff1a; 一、实现步骤 二、实现效果 代码真实可用&#xff01; 一、实现步骤&#xff1a; 1、使用的是vue和elementUI&#xff0c; 假设有这些变量&#xff1a;attachment是附件的意思 data() {return {previewDialog: false,attachmentSrc: ,attachmentList: [{name:…

第六次CCF计算机软件能力认证

第一题&#xff1a;数位之和 给定一个十进制整数 n&#xff0c;输出 n 的各位数字之和。 输入格式 输入一个整数 n。 输出格式 输出一个整数&#xff0c;表示答案。 数据范围 1≤n≤1e9 输入样例&#xff1a; 20151220输出样例&#xff1a; 13样例解释 20151220 的各位数字之和…

PhaseNet论文阅读总结

PhaseNet论文阅读总结 PhaseNet: a deep-neural-network-based seismic arrival-time pickingmethod 背景 地震监测和定位是地震学的基础 地震目录的质量主要取决于到达时间测量的数量和精度相位拾取一般都是网络分析员来执行但是地震仪越来越多&#xff0c;数据流增加&#…

记录自己的程序移植经历(裸机软PLC C语言程序移植到Linux)

先说一下本人的基础&#xff0c;本人是一个小公司初来乍到的实习生&#xff0c;拿到这个任务的时候&#xff0c;不懂PLC&#xff0c;而对于linux只懂一点点皮毛的操作。结果硬是把程序移植完毕且能顺利运行。 该程序是嵌入式软PLC&#xff0c;主要代码是对四元式指令的解析。说…

解决Hadoop集群hive库建表中文和表数据乱码问题

最近在测试环境,发现DDL建表后,发现中文注释和表数据乱码的问题,如下 查询元数据 原因是hive 的 metastore 支持的字符集是 latin1,所以中文写入的时候会有编码问题。 解决方案如下: 对MySQL的编码设置 [client]下面增加 default-character-set=utf8 在[mysqld]下面增…

Pytorch如何打印与Keras的model.summary()类似的输出

1 Keras的model.summary() 2 Pytorch实现 2.1 安装torchsummary包 pip install torchsummary2.2 代码 import torch import torch.nn as nn import torch.nn.functional as F from torchsummary import summaryclass Net(nn.Module):def __init__(self):super(Net, self).__…

微服务Gateway网关(自动定位/自定义过滤器/解决跨域)+nginx反向代理gateway集群

目录 Gateway网关 1.0.为什么需要网关&#xff1f; 1.1.如何使用gateway网关 1.2.网关从注册中心拉取服务 1.3.gateway自动定位 1.4.gateway常见的断言 1.5.gateway内置的过滤器 1.6.自定义过滤器-全局过滤器 1.7.解决跨域问题 2.nginx反向代理gateway集群 2.1.配置…

Matplotlib坐标轴格式

在一个函数图像中&#xff0c;有时自变量 x 与因变量 y 是指数对应关系&#xff0c;这时需要将坐标轴刻度设置为对数刻度。Matplotlib 通过 axes 对象的xscale或yscale属性来实现对坐标轴的格式设置。 示例&#xff1a;右侧的子图显示对数刻度&#xff0c;左侧子图则显示标量刻…

61、Mysql中MVCC是什么

什么是MVCC 多版本并发控制&#xff1a;读取数据时通过一种类似快照的方式将数据保存下来&#xff0c;这样读锁就和写锁不冲突了&#xff0c;不同的事务session会看到自己特定版本的数据&#xff0c;版本链 MVCC只在 READ COMMITTED 和 REPEATABLE READ 两个隔离级别下工作。…

apache ozone详细介绍

Ozone是哪路神 Apache Ozone https://github.com/apache/ozone Ozone是Apache软件基金会下的一个项目&#xff0c;其定位是&#xff1a;一个用户大数据分析和云原生应用、具有高扩展性、强一致性的分布式Key-Value对象存储。 HDFS是业界默认的大数据存储系统&#xff0c;在业…

ThunderScope开源示波器

简介 4CH&#xff0c;1GSa/S 开源示波器。前端很简洁&#xff0c;BUF802LMH6518&#xff0c;ADC是HMCAD1511&#xff0c;用Xilinx A7 FPGA进行控制&#xff0c;数据通过PCIE总线传输到上位机处理。目前这个项目已经被挂到了Xilinx官网&#xff0c;强。 设计日志&#xff1a;h…

设计自己的脚手架

如何设计自己的脚手架 前言前置知识如何搭建一个脚手架搭建自己的脚手架初始化项目安装依赖packagejson 配置lint 和typescript配置 加入bin字段调试npm link调试核心代码实现获取所有命令create实现 美化项目添加logo 发包源码仓库 前言 ​ 在工程中&#xff0c;不仅是软件工…

车载测试:CANoe中环境变量和系统变量的区别

目录 环境变量和系统变量相同点&#xff1a; 环境变量和系统变量不同点&#xff1a; 环境变量和系统变量相同点&#xff1a; 都可以作为ECU、面板和CAPL程序相连接的媒介。例如&#xff0c;在CAPL程序中&#xff0c;通过改变或监控某一环境变量的值可以触发特定的动作&#x…

Java处理doc类型的Word文档转换成html(按顺序保留格式+图片)

最新有个新需求&#xff0c;就是doc文档转换html内容倒不是很难&#xff0c;给大家分享一下&#xff0c;总体思路就是按doc转html的思路来走&#xff0c;唯一缺点是不会自动转换图片&#xff0c;图片是要手动转成base64&#xff0c;默认是有html、body、head、meta等等标签&…

基于深度学习的高精度农作物机器与行人目标检测系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度农作物机器与行人目标检测系统可用于日常生活中或野外来检测与定位农作物机器与行人目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的农作物机器与行人目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果…

查询自己档案存在哪里

查询自己档案存在哪里 百度搜索“全国人力资源和社会保障政务服务平台” 或者点击下方的官网链接登陆后点击“个人服务”&#xff0c;选择“档案存档情况查看”就可以看到自己的存档情况了。 全国人力资源和社会保障政务服务平台 http://zwfw.mohrss.gov.cn/portal/index

【Linux】生产者消费者模型 -- RingQueue

文章目录 1. 生产者消费者模型的理解1.1 生产者消费者模型的概念1.2 生产者消费者模型的特点1.3 生产者消费者模型的优点 2. 基于BlockQueue的生产者消费者模型 1. 生产者消费者模型的理解 1.1 生产者消费者模型的概念 生产者消费者模型就是通过一个容器来解决生产者和消费者的…

从iPhone恢复已删除音视频的5种主要方法

“我需要从iPhone恢复已删除的音视频。我真的很喜欢我的音视频文件。我玩了很多封面&#xff0c;并检查听我可以改进的地方和不可以改进的地方。 iPhone是我完成这项任务的首选手机&#xff0c;因为我喜欢保持非常简单&#xff0c;我喜欢听我的iPhone。但是&#xff0c;我确实删…

4.Cesium中实体Entity的增删改查及性能优化(超详细)

前言 Cesium 作为一个功能强大的 WebGL 三维地球仪库,内置了丰富的三维地图展示能力。在 Cesium 中,我们可以通过 Entity(实体)在三维场景中添加和控制各种三维对象,如点、线、面、模型等。本文将介绍 Cesium 中实体的增删改查操作。 概述 添加到场景中的实体都保存在 viewer.…

【AI绘画】Stable-Diffusion-Webui本地部署-简单绘画图片

这里写目录标题 前言一、Stable Diffusion是什么&#xff1f;二、安装stable-diffusion-webui1. python安装2. 下载模型3. 开始安装&#xff1a;4. 汉化&#xff1a;5. 模型使用&#xff1a;6. 下载新模型&#xff1a;7. 基础玩法 三、总结 前言 本文将借助stable-diffusion-w…