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

news2024/11/19 3:20:05

以下为作者观点:

快速编写代码是一项宝贵的技能,但能够有效调试和解决错误和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.coloradmin.cn/o/1890668.html

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

相关文章

可充电纽扣电池ML2032充电电路设计

如图&#xff0c;可充电纽扣电池ML2032充电电路设计。 图中二极管是为了防止电流倒灌&#xff0c; 电阻分压出3.66v&#xff0c;再减掉二极管压降&#xff08;约0.4v)得3.26V&#xff0c;加在电池正负极充电。 随着电池电量的积累&#xff0c;充电电流逐步减小&#xff0c;极限…

Eslint与Prettier搭配使用

目录 前置准备 Eslint配置 Prettier配置 解决冲突 前置准备 首先需要安装对应的插件 然后配置settings.json 点开之后就会进入settings.json文件里&#xff0c;加上这两个配置 // 保存的时候自动格式化 "editor.formatOnSave": true, // 保存的时候使用prettier进…

ctfshow sql注入 web234--web241

web234 $sql "update ctfshow_user set pass {$password} where username {$username};";这里被过滤了&#xff0c;所以我们用\转义使得变为普通字符 $sql "update ctfshow_user set pass \ where username {$username};";那么这里的话 pass\ where…

一文包学会ElasticSearch的大部分应用场合

ElasticSearch 官网下载地址&#xff1a;Download Elasticsearch | Elastic 历史版本下载地址1&#xff1a;Index of elasticsearch-local/7.6.1 历史版本下载地址2&#xff1a;Past Releases of Elastic Stack Software | Elastic ElasticSearch的安装(windows) 安装前所…

深入了解激光粒度分析仪:检测物质粒度分布的利器

在科研、工业生产以及环境监测等多个领域中&#xff0c;精确测量物质粒度分布是确保产品质量、研究准确性和环境安全的重要步骤。 近年来&#xff0c;激光粒度分析仪以其独特的技术优势&#xff0c;在这些领域发挥着越来越重要的作用。 在这篇文章中&#xff0c;佰德将带您了…

人工智能--图像语义分割

个人主页&#xff1a;欢迎来到 Papicatch的博客 课设专栏 &#xff1a;学生成绩管理系统 专业知识专栏&#xff1a;专业知识 ​ 文章目录 &#x1f349;引言 &#x1f349;介绍 &#x1f348;工作原理 &#x1f34d;数据准备 &#x1f34d;特征提取 &#x1f34d;像素分…

1.2 ROS2安装

1.2.1 安装ROS2 整体而言&#xff0c;ROS2的安装步骤不算复杂&#xff0c;大致步骤如下&#xff1a; 准备1&#xff1a;设置语言环境&#xff1b;准备2&#xff1a;启动Ubuntu universe存储库&#xff1b;设置软件源&#xff1b;安装ROS2&#xff1b;配置环境。 请注意&…

linux命令行操作

一、看二进制文件 od -t x1 1.txt | less 二、看信号 kill -l man 7 signal 三、查看当前进程的pid号 echo $$

统一开放平台实现方案(访微信SDK)

需求分析 在互联中&#xff0c;我们的服务是不对外开放的&#xff0c;但是有先场景下我们可以对外开放&#xff0c;但是必须是系统所允许的用户才可以&#xff0c;这样做一方面保证安全&#xff0c;另一方面可以提升平台的能力&#xff0c;比如调用微信的接口必须要进行微信开…

如何快速掌握一门编程语言

学习一门新的编程语言可能是一个具有挑战性的过程&#xff0c;但通过一些系统的方法&#xff0c;可以大大加快这个过程。 目录 第一步&#xff1a;通过书籍和视频课程掌握基本语法1. **学习编程语言的基础知识**2. **掌握字符串处理**3. **掌握正则表达式和解析器**4. **掌握面…

AnyView 对 SwiftUI 性能的影响

文章目录 前言测试设置动画卡顿浏览数据没有 AnyView 有 AnyView在浏览数据时修改没有 AnyView 有 AnyView分析结果总结 前言 AnyView 是一种类型擦除的视图&#xff0c;对于 SwiftUI 容器中包含的异构视图非常方便。在这些情况下&#xff0c;你不需要指定视图层次结构中所有视…

【大数据】—美国交通事故分析(2016 年 2 月至 2020 年 12 月)

引言 在当今快速发展的数字时代&#xff0c;大数据已成为我们理解世界、做出决策的重要工具。特别是在交通安全领域&#xff0c;大数据分析能够揭示事故模式、识别风险因素&#xff0c;并帮助制定预防措施&#xff0c;从而挽救生命。本文将深入探讨2016年2月至2020年12月期间&…

西南交通大学【算法分析与设计实验5】

有障碍物的不同路径数量 实验目的 &#xff08;1&#xff09;理解动态规划算法的求解过程。 &#xff08;2&#xff09;分析动态规划算法的时间复杂度&#xff0c;比较动态规划算法与其他算法的效率差异。 &#xff08;3&#xff09;学会如何利用动态规划算法求解具体问题&…

汇聚荣拼多多电商哪些热词比较受关注?

汇聚荣拼多多电商哪些热词比较受关注?在探讨拼多多电商平台的热点关键词时&#xff0c;我们首先得明确&#xff0c;这个平台因其独特的商业模式和市场定位&#xff0c;吸引了大量消费者的目光。拼多多通过“拼团”购物的方式迅速崛起&#xff0c;成为电商行业的一个重要力量。…

5% 消耗,6 倍性能:揭秘新一代 iLogtail SPL 日志处理引擎与 Logstash 的 PK

作者&#xff1a;阿柄 引言 在当今数据驱动的时代&#xff0c;日志收集和处理工具对于保障系统稳定性和优化运维效率至关重要。随着企业数据量的不断增加和系统架构的日益复杂&#xff0c;传统日志处理工具面临着性能、灵活性和易用性等多方面的挑战。Logstash 作为一款广受欢…

qt6 通过http查询天气的实现

步骤如下&#xff1a; cmakelist 当中&#xff0c;增加如下配置 引入包 访问远端api 解析返回的数据 cmakelist 当中&#xff0c;增加如下配置&#xff0c;作用是引入Network库。 引入包 3、访问远端api void Form1::on_pushButton_clicked() {//根据URL(http://t.weather.…

GoLand 2024 for Mac GO语言集成开发工具环境

Mac分享吧 文章目录 效果一、下载软件二、开始安装1、双击运行软件&#xff08;适合自己的M芯片版或Intel芯片版&#xff09;&#xff0c;将其从左侧拖入右侧文件夹中&#xff0c;等待安装完毕2、应用程序显示软件图标&#xff0c;表示安装成功3、打开访达&#xff0c;点击【文…

Flask 数据创建时出错

当我们在使用 Flask 创建数据时遇到错误&#xff0c;可能有多种原因&#xff0c;包括代码错误、数据库配置问题或依赖项错误。具体情况我会总结成一篇文章记录下&#xff0c;主要是归类总结一些常见的解决方法和调试步骤&#xff0c;帮助大家解决问题&#xff1a; 1、问题背景 …

013、MongoDB常用操作命令与高级特性深度解析

目录 MongoDB常用操作命令与高级特性深度解析 1. 数据库操作的深入探讨 1.1 数据库管理 1.1.1 数据库统计信息 1.1.2 数据库修复 1.1.3 数据库用户管理 1.2 数据库事务 2. 集合操作的高级特性 2.1 固定集合(Capped Collections) 2.2 集合验证(Schema Validation) 2.…

如何批量创建、提取和重命名文件夹!!!

你是否还在一个一个手动创建文件名&#xff01; 你是否还在一个一个手动提取文件名&#xff01; 你是否还在一个一个手动修改文件名&#xff01; 请随小生一起批量自动创建、提取、重命名&#xff01; 1、批量创建文件夹 【案例】创建1日-31日共31个文件夹 【第一步】在A列…