Cypress系列(3)- Cypress 的初次体验
如果想从头学起Cypress,可以看下面的系列文章哦
https://www.cnblogs.com/poloyy/category/1768839.html
前言
这里的栗子项目时 Cypress 提供的,在 github 上,所以要 clone 到本地的话需要装 Git 哦!
下载被测应用
进入要安装该应用的目录,cmd 敲
git clone git@github.com:cypress-io/cypress-example-recipes.git
进入项目目录下,安装项目所需依赖包,敲
npm install
安装成功后,项目的文件结构如下图;所有被测应用栗子都在 examples 文件夹中

启动被测应用
启动测试应用时,可以进入不同子项目文件夹来启动不同的应用;
假如,我们要测试表单类型的登录,可以打开以下被测应用
cd examples\logging-in__html-web-forms>
启动本地server
npm start
启动成功后,cmd窗口将显示服务器的地址和端口

打开浏览器访问:http://localhost:7077/,即可看到登录页面

快速测试登录页面
首先,设计测试用例步骤
- 访问http://localhost:7077
- 输入用户名、密码,点击登录
- 如果用户名和密码正确,则登录成功,否则登录失败
接下来,我们来看看实现测试用例的步骤
创建测试
在此目录下 cypress安装路径\node_modules\.bin\cypress\integration ,创建一个 js 文件,比如:testLogin.js
integration文件夹
- Cypress 安装完毕后自动生成的文件夹
- 也是 Cypress 默认存放测试用例的根目录,任何创建在此目录下的文件都将被当作测试用例
编写测试用例
首先,要在网页上定位到用户名、密码输入框,此案例中使用标签+属性名来定位;最终测试代码如下

咱们在后面再讲解代码的意思哦
运行测试
进入 Cypress 安装文件夹,cmd执行命令
yarn cypress:open
单击 testLogin.js,Cypress 会启动 Test Runner 运行测试,运行成功后,将看到运行结果页面;运行时长是真的快....

调试测试用例
前言
- 测试用例运行时,难免会发生各种情况导致运行失败;快速定位发生错误的位置,了解错误信息,一直是自动化测试的痛点
- 而 Cypress 提供了多种 debug 能力,可以在测试运行错误时直达错误位置,并支持回放错误发生时的上下文信息,可直接看到测试失败的原因
Cypress Debug 能力介绍
每个命令均有快照且支持回放
像下图,左侧就是测试步骤,右侧是测试页面
- 鼠标 hover 测试步骤,在右侧可以看到执行该命令时的页面效果
- 鼠标点击测试步骤,可以锁定该步骤,然后查看上下文信息

支持查看测试运行时发生的特殊页面事件
包括:
- 网络 XHR 请求
- URL 哈希更改
- 页面加载
- 表单提交
例如,上面测试用例中,点击【submit】后产生的就是提交表单的请求,看下图
可以看到一个 submit 操作,分成了三步走
- form sub:提交表单
- page load:页面加载
- new url:访问新的页面

Console 输出每个命令的详细信息
浏览器F12即可见到熟悉的开发者工具页面了
以上图为栗子,一个 submitting form 表单提交的请求,在 Console 中打印了详细的信息,可以快速了解在运行时的详细状态信息
暂停测试并逐步运行、恢复执行
在调试测试代码时,Cypress 提供了两个命令来暂停测试运行
- cy.pause()
- cy.debug()
cy.pause() 的栗子

在表单提交之前暂停测试,我们来看看运行结果

左上角有两个按钮,从左往右分别是
- Resume:继续执行测试用例并运行到结束
- Next:get:测试会变成逐步运行,点一下执行下一个命令
cy.debug() 的栗子

运行测试看看下图结果

测试运行在找到表单的时候,暂停运行并等待用户操作
顶部的Paused in debugger,右边两个按钮分别是
- Resume Script Execution(F8):继续执行测试用例并运行到结束
- Step Over next function call(F10):跳转到下一个调用debug()函数的地方
当找到隐藏或多个元素时,可视化
更改 username 输入框的定位器,使他匹配到不止一个元素

运行测试看看下面结果

因为定位表达式匹配到不止一个元素,所以执行 type() 方法时以失败告终
总结
这一节咱们以测试一个登录界面为需求,写了一个简单的测试用例来做栗子,后面将详细讲解 Cypress 的各部分内容哦
Cypress系列(3)- Cypress 的初次体验的更多相关文章
- Cypress系列(1)- Window下安装 Cypress 并打开
如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html 系统要求 Cypress 是一个被安装在 ...
- Cypress系列(2)- Cypress 框架的详细介绍
如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html Cypress 简介 基于 JavaSc ...
- Cypress系列(4)- 解析 Cypress 的默认文件结构
如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html 默认文件结构 在使用 cypress o ...
- Cypress系列(5)- 自定义 Cypress
如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html 前言 Cypress 不仅支持用户自定义 ...
- Cypress系列(14)- 环境变量详解
如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html 前言 环境变量,其实就是根据环境的变化, ...
- Cypress系列(13)- 详细介绍 Cypress Test Runner
如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html 前言 Test Runner 也叫运行器 ...
- Cypress系列(41)- Cypress 的测试报告
如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html 注意 51 testting 有一篇文章 ...
- Cypress系列(44)- 命令行运行 Cypress
如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html 前言 前面也介绍过 Cypress 命令 ...
- Cypress系列(65)- 测试运行失败自动重试
如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html 重试的介绍 学习前的三问 什么是重试测试 ...
- Cypress系列(67)- 环境变量设置指南
如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html 常见的环境变量设置方式 可参考这篇文章: ...
随机推荐
- Shell脚本(二)数学运算
直接上代码. #!/bin/bash no1= no2= echo "using let ..." let result=no1+no2 echo "result is: ...
- E. Marbles 状压dp
E. Marbles 这个是一个状压dp 题目大意是:给你一个数组,数组的数在1到20之间,有一个操作就是交换相邻的两个数,问 让所有相同的数相邻的最小操作次数 dp[s] 表示s状态下的操作次数,w ...
- Java常见的集合的数据结构
数据结构 数据结构__栈:先进后出 栈:stack,又称堆栈,它是运算受限的线性表,其限制是仅允许在标的一端进行插入和删除操作,不允许在其他任何位置进行添加.查找.删除等操作. 简单的说:采用该结构的 ...
- 【FPGA篇章七】FPGA系统任务:详述常用的一些系统函数以及使用方法
欢迎大家关注我的微信公众账号,支持程序媛写出更多优秀的文章 系统任务和系统函数是Verilog标准的一部分,都以字符"$"为开头.系统任务可划分为六类,下面分别给出一些常用任务的用 ...
- OpenCV 经纬法将鱼眼图像展开
文章目录 前言 理论部分 鱼眼展开流程 鱼眼标准坐标计算 标准坐标系与球坐标的转换 代码实现 测试效果如下图 总结 this demo on github 前言 鱼眼镜头相比传统的镜头,视角更广,采集 ...
- [hdu4628 Pieces]二进制子状态,DP
题意:给一个长度为16的字符串,每次从里面删掉一个回文序列,求最少需要几次才能删掉所有字符 思路:二进制表示每个字符的状态,那么从1个状态到另一个状态有两种转移方式,一是枚举所有合法的回文子序列,判断 ...
- [whu1564]后缀数组
http://acm.whu.edu.cn/land/problem/detail?problem_id=1564 思路:先把串复制一遍,在末尾补个标记,后缀数组跑一下,扫一遍就ok了(过滤后缀在后半 ...
- 在本地运行Kubernetes的3种主流方式
作者简介 Chris Tozzi,曾担任记者和Linux管理员.对开源技术.敏捷基础架构以及网络问题兴趣浓厚.目前担任高级内容编辑,并且是Fixate IO的DevOps分析师. 原文链接: http ...
- Linux --remote (ssh and VNC)
远程管理 与个人计算机不同,服务器一般都是运行IDC机房中,所以我们通常不会接触到服务器硬件,而是通过各种远程管理方式对服务器进行控制. 常见的远程管理工具方式: -RDP(remote deskto ...
- vue 兄弟组件之间的传值
一. 子传父,父传子. 二. 1.兄弟之间传递数据需要借助于事件车,通过事件车的方式传递数据 2.创建一个Vue的实例,让各个兄弟共用同一个事件机制. 3.传递数据方,通过一个事件触发bus.$emi ...