Cypress测试:7个快速解决问题的调试技巧!

以下为作者观点:

快速编写代码是一项宝贵的技能,但能够有效调试和解决错误和bug,更是一个软件开发人员具有熟练技能的标志。调试是开发过程中的一个关键环节,可以确保软件按预期运行并满足用户需求。

Cypress 调试简介

Cypress 的调试功能(https://docs.cypress.io/guides/guides/debugging)被认为是QA 工程师和开发人员的有用工具。这个功能详细的错误消息、交互式测试运行器、与开发人员工具的集成以及专门的调试命令,可以快速有效地解决测试失败。调试 Cypress 测试可以帮助识别测试代码和被测应用程序中的问题。Cypress 提供了多种有效调试的方法和工具。

在本文中,我们将讨论如何使用 Cypress 调试器和其他开发人员工具调试 Cypress 测试。在深入介绍 Cypress 调试的各种方法之前,让我们先了解一下调试为何重要。

为什么调试很重要?

调试是软件开发的一个关键方面,框架中可用的调试工具的质量会显著影响开发过程。下面详细介绍了调试为何如此重要以及选择框架时应考虑的事项:

  • 错误检测:调试工具有助于识别代码中出现错误的位置和原因,从而帮助开发人员查明问题的确切位置。

  • 代码更正:一旦检测到错误,调试工具可帮助了解错误的原因,从而促进解决方案的制定。

  • 性能优化:调试不仅是为了修复错误,也是为了提高代码的性能。它有助于识别程序中的低效率和瓶颈。

  • 确保功能:调试可确保软件运行符合预期、满足指定的要求并提供流畅的用户体验。

  • 增强安全性:通过调试识别和修复漏洞可以防止潜在的安全漏洞。

Cypress 中的调试方法

Cypress 中的调试可以使用多种方法进行,包括命令日志、.pause()、.debug()、cy.log()、console.log() 和原生的 JavaScript 调试器。

以下是在 Cypress 中调试测试用例的各种方法

  • 使用命令日志进行 Cypress 调试

  • 使用方法 .pause() 进行 Cypress 调试

  • 使用 .debug() 方法进行 Cypress 调试

  • 使用 cy.log() 进行 Cypress 调试

  • 使用 console.log() 进行 Cypress 调试

  • 使用原生调试器进行 Cypress 调试

  • 使用屏幕截图和视频进行 Cypress 调试

以下是每种调试方法的详细介绍:

1.使用命令日志进行 Cypress 调试

Cypress 命令日志会自动显示在 Cypress Test Runner 中。它提供了测试期间执行的所有 Cypress 命令的详细日志,包括其状态、持续时间和任何相关错误。

用法:

  • 在 Cypress Test Runner 中运行测试。

  • 观察左侧面板中的命令日志,查看每个命令的逐步执行。

  • 单击单个命令可以查看更多详细信息,包括命令执行前后的 DOM 快照。

好处:

  • 提供所有操作的可视化时间线。

  • 轻松发现测试失败的地方。

在下面的屏幕截图中,左侧面板显示逐步执行的每个命令,而右侧显示相应的结果。这种设置使我们能够有效地查明测试用例失败的原因。例如,在提供的示例中,测试失败是因为 UI 显示了不同的文本。

图片

2.使用方法 .pause() 进行 Cypress 调试

.pause ()方法在特定点暂停测试执行,允许检查应用程序的状态并调试任何问题。

cy.get('.element').pause().click();

好处:

  • 适用于在精确的步骤停止执行来检查 DOM。

  • 可以通过单击“恢复”按钮在 Cypress Test Runner 中手动恢复测试。

例子:

在下面的例子中,我们在密码字段输入数据后在登录按钮上放置了.pause() 。

/// <reference types="cypress" />describe("Verify Login/Logout And Tab functionality", () => { it("Login and Click on 'Codeless' link Under Automation Section", function () {   cy.visit("https://testgrid.io/");   cy.get('[title="Sign in"]').click();   cy.get("#email")     .clear("jarryliurobert@gmail.com")     .type("jarryliurobert@gmail.com");   cy.get("#password").clear().type("Test@1234");   cy.get(".signin-button").click().pause();   cy.contains("Dashboard");   cy.get("#tgtestcase").click();   cy.contains("Lets get you started with codeless");   cy.get("[data-toggle='dropdown']").click();   cy.contains("Logout").click();   cy.contains("Forgot Password?"); });});

因此,在输入电子邮件和密码后,测试执行暂停。代码将仅运行前四个命令,并在运行第五个命令之前暂停。

图片

3.使用 .debug() 进行 Cypress 调试

Cypress 中的Cypress 调试函数.debug()对于调试非常有用,可以链接到任何 Cypress 命令以暂停测试并打开 DevTools。允许检查应用程序和测试运行器的当前状态。

*注意:为了执行 .debug ()命令,我们必须保持正在执行测试用例的浏览器的控制台窗口打开。

在下面的例子中,我们在密码字段输入数据后放置了.debug () 。

/// <reference types="cypress" />describe("Verify Login/Logout And Tab functionality", () => { it("Login and Click on 'Codeless' link Under Automation Section", function () {   cy.visit("https://testgrid.io/");   cy.get('[title="Sign in"]').click();   cy.get("#email")     .clear("jarryliurobert@gmail.com")     .type("jarryliurobert@gmail.com");   cy.get("#password").clear().type("Test@1234")   cy.get(".signin-button").debug().click();   cy.contains("Dashboard");   cy.get("#tgtestcase").click();   cy.contains("Lets get you started with codeless");   cy.get("[data-toggle='dropdown']").click();   cy.contains("Logout").click();   cy.contains("Forgot Password?"); });});

Cypress 中的 subject 变量代表 Cypress 命令的返回值,可以在调试期间在浏览器的控制台中与其交互。当我们运行命令subject.text() 时,这将为我们提供登录按钮内的文本内容。

图片

4.使用 cy.log() 进行 Cypress 调试

Cypress 中的cy.log()函数允许将消息打印到 Cypress 测试运行器的控制台。这对于调试目的以及提供有关测试执行的上下文或其他信息特别有用。

cy.get('.element').then(($el) => {  cy.log('Element text is:', $el.text());});

好处:

  • 帮助将自定义信息打印到 Cypress 控制台日志。

  • 对于为您的测试添加上下文很有用。

在下面的例子中,你可以看到我们正在打印登录链接的文本,该链接在打开 URL https://testgrid.io/后在主页上可用

/// <reference types="cypress" />describe("Verify Login/Logout And Tab functionality", () => { it("Login and Click on 'Codeless' link Under Automation Section", function () {   cy.visit("https://testgrid.io/");   cy.get('[title="Sign in"]').then($signin => {     cy.log("The Value is",$signin.text())   })   cy.get('[title="Sign in"]').click();   cy.get("#email").clear("jarryliurobert@gmail.com").type("jarryliurobert@gmail.com");    cy.get("#password").clear().type("Test@1234")   cy.get(".signin-button").debug().click();   cy.contains("Dashboard");   cy.get("#tgtestcase").click();   cy.contains("Lets get you started with codeless automation");   cy.get("[data-toggle='dropdown']").click();   cy.contains("Logout").click();   cy.contains("Forgot Password?"); });});


可以在命令日志中看到上述代码的输出,其中打印的日志对于调试非常有帮助。

图片

5.使用 console.log() 进行 Cypress 调试

在 Cypress 中,可以使用 console.log() 将消息打印到浏览器的控制台以进行调试。

下面是如何使用 console.log() 的示例

cy.get('.element').then(($el) => {  console.log('Element:', $el);});

好处:

  • 直接将消息输出到浏览器的控制台。

  • 有助于调试更复杂的 JavaScript 代码。

在下面的代码中,可以看到我们在控制台窗口的主页中打印登录链接的文本。

/// <reference types="cypress" />describe("Verify Login/Logout And Tab functionality", () => { it("Login and Click on 'Codeless' link Under Automation Section", function () {   cy.visit("https://testgrid.io/");   cy.get('[title="Sign in"]').then($signin => {     console.log("Text of Sign-in button -->> ",$signin.text())   })   cy.get('[title="Sign in"]').click();   cy.get("#email").clear("jarryliurobert@gmail.com").type("jarryliurobert@gmail.com");    cy.get("#password").clear().type("Test@1234")   cy.get(".signin-button").click();   cy.contains("Dashboard");   cy.get("#tgtestcase").click();   cy.contains("Lets get you started with codeless");   cy.get("[data-toggle='dropdown']").click();   cy.contains("Logout").click();   cy.contains("Forgot Password?"); });
});

图片

6.使用原生调试器进行 Cypress 调试

原生 JavaScript 调试器语句可用于 Cypress 测试中,在代码中设置断点。到达调试器语句时,执行将暂停,浏览器的开发人员工具将打开。

*注意:为了执行本机 调试器命令,我们必须保持正在执行测试用例的浏览器源窗口打开。

cy.get('.element').then(($el) => {  debugger;  // inspect $el in the console});

好处:

  • 允许为代码设置断点。这样可以更轻松地逐行执行代码,并观察应用程序在每个步骤中的确切行为和状态。

  • 完全访问浏览器的调试工具。

在下面的代码中,我们可以在打开 URL https://testgrid.io/后放置本机调试器

/// <reference types="cypress" />describe("Verify Login/Logout And Tab functionality", () => { it("Login and Click on 'Codeless' link Under Automation Section", function () {   cy.visit("https://testgrid.io/");   cy.get('[title="Sign in"]').then($signin => {     debugger;     console.log("Text of Sign-in button -->> ",$signin.text())   })   cy.get('[title="Sign in"]').click();   cy.get("#email").clear("jarryliurobert@gmail.com").type("jarryliurobert@gmail.com");    cy.get("#password").clear().type("Test@1234")   cy.get(".signin-button").click();   cy.contains("Dashboard");   cy.get("#tgtestcase").click();   cy.contains("Lets get you started with codeless");   cy.get("[data-toggle='dropdown']").click();   cy.contains("Logout").click();   cy.contains("Forgot Password?"); });});

在下面的屏幕截图中,测试运行一旦遇到调试器关键字就会暂停,我们可以通过单击“step over”移动到下一行,或者通过单击突出显示区域中的第一个图标来恢复脚本。

图片

7.使用屏幕截图和视频进行 Cypress 调试

在 Cypress 中,通过捕获屏幕截图和视频,我们可以在调试失败的测试时利用这些功能。通过可视化应用程序在发生故障时的确切状态,这可以帮助您快速识别问题。

我们必须更新cypress.config.js文件以启用屏幕截图和视频。

Cypress 提供了截屏选项,当通过“cypress open”或“cypress run”运行测试用例时,即使在 CI/CD 中也是如此。我们必须更新设置“screenshotOnRunFailure”:true。此设置将在测试用例失败时捕获屏幕截图,默认情况下,视频录制处于关闭状态,但可以通过在配置文件中将视频选项设置为true来启用。在 cypress open 期间不会录制视频。

const { defineConfig } = require("cypress");
module.exports = defineConfig({ "screenshotsFolder": "cypress/screenshots", "screenshotOnRunFailure": true, "video": true, "trashAssetsBeforeRun": true, "videosFolder": "cypress/videos", "videoCompression": 32, e2e: {    experimentalStudio:true,   setupNodeEvents(on, config) {     // implement node event listeners here   }, },});

在下面的屏幕截图中,可以看到创建了两个文件夹,分别名为“屏幕截图”和“视频”,我们可以在其中看到有助于调试测试用例的附加屏幕截图和视频。

图片

结论

Cypress 提供了一套全面的调试工具,能够显著简化在您的测试用例中识别和解决问题的过程。无论你是利用命令日志获取详细的逐步说明,使用.pause() 来暂停执行,运用.debug() 进行深入检查,还是利用 cy.log() 和 console.log() 来输出自定义消息,Cypress 都提供了多种方法以适应各种调试需求。

例如,如果你的测试用例在某个特定步骤出现了意外结果,您可以使用.pause() 让测试暂停在该步骤,然后仔细检查当前的页面状态和相关变量的值。

又如,当你需要输出一些特定的调试信息来跟踪测试的流程时,cy.log() 和 console.log() 就非常有用。你可以在关键位置添加这些日志输出,以便在测试运行时清楚地了解每个阶段的情况。

总之,Cypress 的这些调试工具为开发者提供了强大的支持,有助于提高测试的效率和质量。

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

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

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

相关文章

【Linux】—Xshell、Xftp安装

文章目录 前言一、下载Xshell、Xftp二、安装Xshell三、使用XShell连接Linux服务器四、修改windows的主机映射文件&#xff08;hosts文件&#xff09;五、远程连接hadoop102/hadoop103/hadoop104服务器六、安装Xftp 前言 XShell远程管理工具&#xff0c;可以在Windows界面下来访…

uniapp + vue3 + Script Setup 写法变动 (持续更新)

一、uniapp 应用生命周期&#xff1a; https://uniapp.dcloud.net.cn/tutorial/vue3-composition-api.html 注意&#xff1a; 应用生命周期仅可在App.vue中监听&#xff0c;在其它页面监听无效。 二 、uniapp页面生命周期&#xff1a; https://uniapp.dcloud.net.cn/tutori…

3.js - 色调映射(renderer.toneMapping)

// ts-nocheck// 引入three.js import * as THREE from three// 导入轨道控制器 import { OrbitControls } from three/examples/jsm/controls/OrbitControls// 导入lil.gui import { GUI } from three/examples/jsm/libs/lil-gui.module.min.js// 导入tween import * as TWEEN…

昇思25天学习打卡营第11天|基于MindSpore通过GPT实现情感分类

学AI还能赢奖品&#xff1f;每天30分钟&#xff0c;25天打通AI任督二脉 (qq.com) 基于MindSpore通过GPT实现情感分类 %%capture captured_output # 实验环境已经预装了mindspore2.2.14&#xff0c;如需更换mindspore版本&#xff0c;可更改下面mindspore的版本号 !pip uninsta…

【目标检测】DINO

一、引言 论文&#xff1a; DINO: DETR with Improved DeNoising Anchor Boxes for End-to-End Object Detection 作者&#xff1a; IDEA 代码&#xff1a; DINO 注意&#xff1a; 该算法是在Deformable DETR、DAB-DETR、DN-DETR基础上的改进&#xff0c;在学习该算法前&#…

决策树算法的原理与案例实现

一、绪论 1.1 决策树算法的背景介绍 1.2 研究决策树算法的意义 二、决策树算法原理 2.1 决策树的基本概念 2.2 决策树构建的基本思路 2.2 决策树的构建过程 2.3 决策树的剪枝策略 三、决策树算法的优缺点 3.1 决策树算法的优势 3.2 决策树算法的局限性 3.3 决策树算…

Vue报错:Component name “xxx” should always be multi-word vue/multi-word-component

问题&#xff1a;搭建脚手架时报错&#xff0c;具体错误如下&#xff1a; ERROR in [eslint] E:\personalProject\VueProjects\vueproject2\src\components\Student.vue10:14 error Component name "Student" should always be multi-word vue/multi-word-compon…

【分布式数据仓库Hive】常见问题及解决办法

目录 一、启动hive时发现log4j版本和hadoop的版本有冲突 解决办法&#xff1a;删除hive下高版本的slf4j 二、启动hive报错 Exception in thread "main" java.lang.NoSuchMethodError:com.google.common.base.Preconditions.checkArgument(ZLjava/lang/Object;)V …

Elasticsearch (1):ES基本概念和原理简单介绍

Elasticsearch&#xff08;简称 ES&#xff09;是一款基于 Apache Lucene 的分布式搜索和分析引擎。随着业务的发展&#xff0c;系统中的数据量不断增长&#xff0c;传统的关系型数据库在处理大量模糊查询时效率低下。因此&#xff0c;ES 作为一种高效、灵活和可扩展的全文检索…

分别使用netty和apache.plc4x测试读取modbus协议的设备信号

记录一下常见的工业协议数据读取方法 目录 前言Modbus协议说明Netty 读取测试使用plc4x 读取测试结束语 前言 Modbus 是一种通讯协议&#xff0c;用于在工业控制系统中进行数据通信和控制。Modbus 协议主要分为两种常用的变体&#xff1a;Modbus RTU 和 Modbus TCP/IP Modbus …

嵌入式Linux之Uboot简介和移植

uboot简介 uboot 的全称是 Universal Boot Loader&#xff0c;uboot 是一个遵循 GPL 协议的开源软件&#xff0c;uboot是一个裸机代码&#xff0c;可以看作是一个裸机综合例程。现在的 uboot 已经支持液晶屏、网络、USB 等高级功能。 也就是说&#xff0c;可以在没有系统的情况…

苹果手机收不到短信怎么恢复?90%的人都在这么做

在使用苹果手机的过程中&#xff0c;有时候会遇到无法接收短信的问题。这不仅影响正常的沟通&#xff0c;还可能错过重要的通知和验证码。那么&#xff0c;手机收不到短信怎么恢复呢&#xff1f;别担心&#xff0c;90%的人都在使用这些简单而有效的方法来解决这一问题。 本文将…

Halcon支持向量机

一 支持向量机 1 支持向量机介绍&#xff1a; 支持向量机(Support Vector Machine&#xff0c;SVM)是Corinna Cortes和Vapnik于1995年首先提出的&#xff0c;它在解决小样本、非线性及高维模式识别表现出许多特有的优势。 2 支持向量机原理: 在n维空间中找到一个分类超平面…

14 卡尔曼滤波及代码实现

文章目录 14 卡尔曼滤波及代码实现14.0 基本概念14.1 公式推导14.2 代码实现 14 卡尔曼滤波及代码实现 14.0 基本概念 卡尔曼滤波是一种利用线性系统状态方程&#xff0c;通过系统输入输出观测数据&#xff0c;对系统状态进行最优估计的算法。由于观测数据包括系统中的噪声和…

React Native V0.74 — 稳定版已发布

嗨,React Native开发者们, React Native 世界中令人兴奋的消息是,V0.74刚刚在几天前发布,有超过 1600 次提交。亮点如下: Yoga 3.0New Architecture: Bridgeless by DefaultNew Architecture: Batched onLayout UpdatesYarn 3 for New Projects让我们深入了解每一个新亮点…

移动智能终端数据安全管理方案

随着信息技术的飞速发展&#xff0c;移动设备已成为企业日常运营不可或缺的工具。特别是随着智能手机和平板电脑等移动设备的普及&#xff0c;这些设备存储了大量的个人和敏感数据&#xff0c;如银行信息、电子邮件等。员工通过智能手机和平板电脑访问企业资源&#xff0c;提高…

【vue3】【vant】 移动端中国传统文化和民间传说案例

更多项目点击&#x1f446;&#x1f446;&#x1f446;完整项目成品专栏 【vue3】【vant】 移动端中国传统文化和民间传说案例 获取源码方式项目说明&#xff1a;其中功能包括项目包含&#xff1a;项目运行环境运行截图和视频 获取源码方式 加Q群&#xff1a;632562109项目说…

Linux_管道通信

目录 一、匿名管道 1、介绍进程间通信 2、理解管道 3、管道通信 4、用户角度看匿名管道 5、内核角度看匿名管道 6、代码实现匿名管道 6.1 创建子进程 6.2 实现通信 7、匿名管道阻塞情况 8、匿名管道的读写原子性 二、命名管道 1、命名管道 1.1 命名管道通信 …

源代码层面分析Appium-inspector工作原理

Appium-inspector功能 Appium Inspector 基于 Appium 框架&#xff0c;Appium 是一个开源工具&#xff0c;用于自动化移动应用&#xff08;iOS 和 Android&#xff09;和桌面应用&#xff08;Windows 和 Mac&#xff09;。Appium 采用了客户端-服务器架构&#xff0c;允许用户通…

C++初学者指南-3.自定义类型(第一部分)-异常

C初学者指南-3.自定义类型(第一部分)-异常 文章目录 C初学者指南-3.自定义类型(第一部分)-异常简介什么是异常&#xff1f;第一个示例用途:报告违反规则的行为异常的替代方案标准库异常处理 问题和保证资源泄露使用 RAII 避免内存泄漏&#xff01;析构函数&#xff1a;不要让异…