【软件测试】理论杂记 + Selenium

文章目录

  • 测试用例万能公式
  • 基于测试对象
  • 黑盒测试
    • 方法
  • 白盒测试
  • Selenium
    • 选择器
      • CSS选择器
      • XPath选择器
    • 等待
    • 常用API
      • 浏览器操作

测试用例万能公式

功能,界面,易用,兼容,安全,性能,网络
在这里插入图片描述

在这里插入图片描述

基于测试对象

在这里插入图片描述

界面测试
在这里插入图片描述

兼容性测试

  • 系统自身版本的兼容,用户已有数据的兼容
  • 测试与应用环境的兼容,如操作系统,应用平台,浏览器(浏览器版本)
  • 测试与第三方系统以及第三方数据的兼容性(不同APP)

安装卸载测试
在这里插入图片描述

黑盒测试

把程序当作一个黑盒子,不关心内部实现,注重输入输出
缺点:代码覆盖率低
优点:可以测试模块之间的联调

方法有:等价类,边界值,判定表->正交表,场景设计法,错误猜测法(凭经验)

方法

等价类
在这里插入图片描述
例子:要求输入8~16的数字
有效等价类:10
无效等价类:7


边界值
要求输入(8, 15]的值,左开右闭

  • 上点:边界值 — — 8和15
  • 内点:边界范围内的点 — — 10
  • 离点:距离上点最近的点,开区间往区内外找,闭区间往区间外找 — — 9 和 16

判定表
在这里插入图片描述


正交表
充分理解需求 -> 确定因素水平 -> 画正交表 -> 补充正交表 -> 将正交表转化为测试用例

在这里插入图片描述

在这里插入图片描述


场景设计法

在这里插入图片描述

白盒测试

语句覆盖,条件覆盖,判定覆盖,分支覆盖,路径覆盖

Selenium

Selenium是一个广泛使用的开源自动化测试工具,专门用于Web应用程序的测试。它支持多种浏览器和操作系统,使得用户能够编写在不同环境下运行的测试脚本

本篇博客介绍Selenium3
在这里插入图片描述

选择器

CSS选择器

在这里插入图片描述

  • id选择器:#id 例:#kw
WebElement element = webDriver.findElement(By.cssSelector("#kw"));//id选择器
  • 类选择器:.类名 例:.s_ipt
WebElement search = webDriver.findElement(By.cssSelector(".s_ipt"));//CSS——类选择器
  • 标签选择器:标签名 例:input
  • 后代选择器:父类标签 子类标签.... 例:form span input
List<WebElement> elements= webDriver.findElements(By.cssSelector("a em"));

XPath选择器

Idea快捷键:alt + ctrl + v 自动补齐接收函数返回值

  • 绝对路径(不常用)://html/head/title

在这里插入图片描述

  • 相对路径:
  1. 相对路径 + 索引://form/span[1]/input span[1]表示form下的第一个span,下标从1开始
WebElement button = webDriver.findElement(By.xpath("//form/span[2]/input"));
  1. 相对路径 + 属性名://input[@class=\"s_ipt\"]
  2. 相对路径 + 通配符://*[@*=\"kw\"]
  3. 相对路径 + 文本匹配://a[@text=\"新闻\"]
WebElement element = webDriver.findElement(By.xpath("//a[text()=\"新闻\"]"));

等待

浏览器的加载会随着网速,网页渲染,网页元素数量而变化,大部分情况我们都需要等网页加载好才进行下一步操作。通过等待实现

静态等待
调用Thread.sleep()进行强制等待,单位是毫秒,3000毫秒等于3秒

public static native void sleep(long millis) throws InterruptedException;

智能等待
智能等待有隐式等待和显示等待。
二者都可以设置最长等待时间,隐式等待结束等待的条件是页面加载完成,而显示等待可以自定义结束条件

  • 隐式等待
//隐式等待一天
webDriver.manage().timeouts().implicitlyWait(1, TimeUnit.DAYS);
  • 显示等待
WebDriverWait wait = new WebDriverWait(webDriver, 10);
//显示等待标题是否为指定内容
wait.until(ExpectedConditions.titleIs("520_百度搜索"));
//显示等待该元素可见
wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#\\31  > div > div._content-border_zc167_4.content-border_r0TOp.cu-border.sc-aladdin.sc-cover-card > div > div:nth-child(2) > div > div > div:nth-child(1) > div > div > div > div > div > div._info-mask_bo7t2_25")));

常用API

  • 查找返回单个元素
WebElement findElement(By var1);//参数是选择器
  • 查找返回多个元素
List<WebElement> findElements(By var1);//参数是选择器
  • 点击
void click();//通常使用这个void submit();//非form标签内的元素使用会报错
  • 输入文字
void sendKeys(CharSequence... var1);
  • 清空输入
void clear();
  • 获取数据
String getAttribute(String var1);//获取标签属性String getText();//获取输入框的内容String getCurrentUrl();//获取当前URLString getTitle();//获取当前页面的Title

浏览器操作

  • 页面回退
void back();
webDriver.navigate().back();
  • 页面刷新
void refresh();
webDriver.navigate().refresh();
  • 页面前进
void forward();
webDriver.navigate().forward();
  • 滑动条滑动,需要使用JS
((JavascriptExecutor)webDriver).executeScript("document.documentElement.scrollTop=10000");
  • 页面最大化
webDriver.manage().window().maximize();
  • 页面充满屏幕
webDriver.manage().window().fullscreen();
  • 设置页面大小
webDriver.manage().window().setSize(new Dimension(700, 900));
  • 浏览器关闭
webDriver.quit();
webDriver.close();

使用quit会将整个浏览器关闭
使用close会将webDirver管理的那个页面关闭

  • 键盘操作
//Ctrl + V
webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL, "V");
  • 鼠标右击
//找到图片
sleep(2000);
WebElement webElement = webDriver.findElement(By.cssSelector("#\\31  > div > h3 > a > div > div > p > span > span"));
sleep(2000);
//鼠标对象
Actions actions = new Actions(webDriver);
//鼠标移到图片
actions.moveToElement(webElement);
//右击
actions.contextClick().perform();
  • 切换 frame
webDriver.switchTo().frame("f1");
webDriver.findElement(By.cssSelector("body > div > div > a")).click();
  • 下拉框,下标从0开始
WebElement webElement = webDriver.findElement(By.cssSelector("#ShippingMethod"));
Select select = new Select(webElement);
//select.selectByIndex(3);//选择下标为3的元素
select.selectByValue("12.51");//通过f12里的value值选择
  • 弹窗
// alert弹窗取消
webDriver.switchTo().alert().dismiss();
// 在alert弹窗中输入内容
webDriver.switchTo().alert().sendKeys("alert Test");
// alert弹窗确认
webDriver.switchTo().alert().accept();
  • 选择文件

选择文件是通过弹窗选择的,可以通过输入框选择文件
在这里插入图片描述

//输入框通过"input"定位
webDriver.findElement(By.cssSelector("input")).sendKeys("D:\\untitled");
  • 切换 webDriver 驱动管理的页面
WebDriver webDriver = new ChromeDriver();
webDriver.get("https://www.baidu.com/");
//点击百度的“新闻”
webDriver.findElement(By.cssSelector("#s-top-left > a:nth-child(1)")).click();
sleep(3000);// 通过getWindowHandle获取的驱动当前管理的页面窗口句柄
System.out.println(webDriver.getWindowHandle());
// 通过getWindowHandles获取所有的窗口句柄
Set<String> handles = webDriver.getWindowHandles();
String target_handle = "";
for(String handle:handles) {target_handle = handle;
}
//通过句柄切换
webDriver.switchTo().window(target_handle);
  • 截图
WebDriver webDriver = new ChromeDriver();
webDriver.get("https://www.baidu.com/");
//搜索"软件测试"
webDriver.findElement(By.cssSelector("#kw")).sendKeys("软件测试");
webDriver.findElement(By.cssSelector("#su")).click();
sleep(3000);
//截图,并保存
File file = ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(file, new File("D://20230521jietu.png"));

以上就是本篇博客的所有内容,感谢你的阅读
如果觉得本篇文章对你有所帮助的话,不妨点个赞支持一下博主,拜托啦,这对我真的很重要。
在这里插入图片描述

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

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

相关文章

SpringCloud学习记录|day6

学习材料 2024最新SpringCloud微服务开发与实战&#xff0c;java黑马商城项目微服务实战开发&#xff08;涵盖MybatisPlus、Docker、MQ、ES、Redis高级等&#xff09; 复习MQ&#xff0c;学过的&#xff0c;应该会轻松一点吧。 RabbitMQ 交换机没有存储功能&#xff0c;必须…

Jupyter Notebook汉化(中文版)

原版jupyter notebook是英文的&#xff0c;想要将其改为中文 在jupyter notebook所在环境输入以下命令 pip install jupyterlab-language-pack-zh-CN打开jupyter notebook&#xff0c;在设置语言中将其设置为中文

Java中的进程与线程(如果想知道Java中有关进程与线程的知识点,那么只看这一篇就足够了!)

前言&#xff1a;在现代计算机系统中&#xff0c;进程和线程是实现并发和高效任务管理的核心概念。理解这两者的区别和联系&#xff0c;不仅对软件开发者至关重要&#xff0c;还能帮助用户更好地理解计算机的工作原理。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容…

12、论文阅读:SpikeYOLO:高性能低能耗目标检测网络

SpikeYOLO:高性能低能耗目标检测网络 前言解释介绍相关工作论文提出的方法网络输入SpikeYOLO架构概述网络输出宏观设计微观设计I-LIF脉冲神经元LIFI-LIF实验代码前言 脉冲神经网络(Spiking Neural Networks, SNNs)具有生物合理性和低功耗的优势,相较于人工神经网络(Artif…

SCCB协议与IIC协议不同

SCCB开始信号与结束信号都与IIC协议的大概一致&#xff0c;这里就不细讲了 开始、结束信号参考&#xff1a;【I2C】IIC读写时序_iic读时序-CSDN博客 SSCB写时序&#xff1a; 即&#xff1a;start phase_1 phase_2 phase_3 stop SCCB读时序&#xff1a; 即&#xff…

推荐IDE中实用AI编程插件,目前无限次使用

插件介绍 一款字节跳动推出的“基于豆包大模型的智能开发工具” 以vscode介绍【pycharm等都可以啊】&#xff0c;这个插件提供智能补全、智能预测、智能问答等能力&#xff0c;节省开发时间 直接在IDE中使用&#xff0c;就不用在网页中来回切换了 感觉还可以&#xff0c;响应速…

2024/10/23 (easycovery密匙激活码为什么这么贵)

2023年12月23号出现的问题又在今天遇到了&#xff0c;fuck. 已知文件删除前原位置路径和最后访问时间&#xff0c;如何恢复文件数据。

SpringBoot中大量数据导出方案:使用EasyExcel并行导出多个excel文件并压缩zip后下载

文章目录 前言一、控制器层代码二、服务层代码三、代码亮点分析 前言 SpringBoot的同步excel导出方式中&#xff0c;服务会阻塞直到Excel文件生成完毕&#xff0c;如果导出数据很多时&#xff0c;效率低体验差。有效的方案是将导出数据拆分后利用CompletableFuture&#xff0c;…

oracle数据库---基本查询(单表查询、多表查询、子查询、分页查询、oracle内置函数、行列转换、集合运算)

思维导图 单表查询 数据准备 -- 练习的表如果存在 请先删除 -- 如果不存在直接创建 drop table t_owners;--业主表 create table t_owners (id number primary key,name varchar2(30),addressid number,housenumber varchar2(30),watermeter varchar2(30),adddate date,owner…

docker环境安装mongoDB实现平滑迁移实战

docker环境安装mongoDB实现平滑迁移实战 一、备份原始数据&#xff08;从别的服务器备份到当前服务器&#xff09;二、数据迁移三、迁移过程日志打印四、验证迁移数据准确性 一、备份原始数据&#xff08;从别的服务器备份到当前服务器&#xff09; 使用mongodump工具对原始mo…

【C++ 算法进阶】算法提升四

数组查询问题 &#xff08;数组优化&#xff09; 题目 数组为 {3 &#xff0c; 2&#xff0c; 2 &#xff0c;3 &#xff0c;1} 查询为&#xff08;0 &#xff0c;3 &#xff0c;2&#xff09; 这个查询的意义是 在数组下标0~3这个范围上 有多少个2 &#xff08;答案为2&…

《PP-OCRv1》论文精读:PaddleOCR是目前SOTA级别的OCR开源技术(截止2024年10月)

PP-OCR: A Practical Ultra Lightweight OCR System论文地址PP-OCRv2: Bag of Tricks for Ultra Lightweight OCR System论文地址PP-OCRv3: More Attempts for the Improvement of Ultra Lightweight OCR System论文地址PaddleOCR Github OCR工具库 43.5K个star PP-OCRv1由百度…

医院信息化与智能化系统(6)

医院信息化与智能化系统(6) 这里只描述对应过程&#xff0c;和可能遇到的问题及解决办法以及对应的参考链接&#xff0c;并不会直接每一步详细配置 如果你想通过文字描述或代码画流程图&#xff0c;可以试试PlantUML&#xff0c;告诉GPT你的文件结构&#xff0c;让他给你对应的…

Java项目-基于springboot框架的疫苗接种管理系统项目实战(附源码+文档)

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 开发运行环境 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBoot、Vue、Mybaits Plus、ELementUI工具&#xff1a;IDEA/…

PYQT5 简单项目实践

在VSCode编辑器我们通过引入pyqt5&#xff0c;用QTdesigner 实现拖拽实现图形化界面 下面我们实现一个简单项目实践一下吧 效果图&#xff1a; 用法&#xff1a;Python编写逻辑&#xff0c;用pyqt实现界面显示。 功能&#xff1a; 第一行把处理的数据文件拖拽到文本框中第二…

powerdesign字体太小,powerdesign Sql preview字体太小

一。powerdesign字体太小修改兼容性 右键点击PowerDesign软件图标-->点击属性-->兼容性-->点击下图中的红框 打勾“使用此设置修复此程序的缩放问题&#xff0c;而不是设置中的缩放问题” 打勾“替代高DPI缩放行为” 缩放执行改为“系统增强”&#xff0c;确定 重启…

页面中包含多个el-popover,点击其中一个显示,其他的关闭(多个el-popover,click触发,点击都不消失的问题)

问题背景&#xff1a;需求是el-tree中的每个树节点后都有一个按钮&#xff0c;点击触发el-popover的显示&#xff0c;但是由click触发的el-popover&#xff0c;在点击下一个节点时&#xff0c;之前的都不消失。 解决办法&#xff1a;注&#xff1a;最主要的就是:ref"data…

Git_IDEA集成Git

Git_IDEA集成Git 配置 Git 忽略文件 创建忽略规则文件 引用忽略配置文件 定位 Git 程序 初始化本地库 添加到暂存区 提交到本地库 切换版本 创建分支 切换分支 合并分支 解决冲突 配置 Git 忽略文件 创建忽略规则文件 引用忽略配置文件 在 .gitconfig 文件中进行&…

房屋租赁网站毕业设计基于SpringBootSSM框架的计算机毕业设计

计算机毕业设计/springboot/javaWEB/J2EE/MYSQL数据库/vue前后分离小程序 目录 一、项目背景与目的‌ ‌二、系统需求分析‌ 2.1功能需求 2.2 技术需求 2.3 可执行性 ‌三、系统设计与实现‌ ‌3.1系统架构设计‌&#xff1a; ‌3.2功能模块开发‌&#xff1a; ‌3.3…

AWD的复现

学习awd的相关资料&#xff1a;速成AWD并获奖的学习方法和思考记录- Track 知识社区 - 掌控安全在线教育 - Powered by 掌控者&#xff08;包含使用脚本去批量修改密码&#xff09; 在复现之前去了解了以下AWD的相关脚本 资料&#xff1a;AWD批量攻击脚本使用教程-CSDN博客 …