Cypress 常见断言操作及使用技巧分享,让你的测试更加完善

Cypress 是一个基于 JavaScript 的前端自动化测试工具。与其他自动化测试工具不同,Cypress 可以直接运行在浏览器中,具有简单易用、强大的 API、快速稳定的执行速度等优点。在实际应用中,常常需要使用断言来验证测试结果是否符合预期,因此本文将介绍 Cypress 的常见断言操作及使用技巧,帮助开发人员更加顺利地完成前端自动化测试。

1. 断言基础知识

在开始讲解 Cypress 的断言操作之前,我们先要了解断言的基础概念。所谓“断言”,就是程序员写下的一些语句,用于验证程序运行的结果是否符合预期。当结果与预期不一致时,断言会抛出异常并提示异常信息,从而方便程序员排查错误。

以下是一个简单的断言示例:

----- --- - --- -- -- - - --
--------------------- -- --- -- ---- -- - --- - -- --- ----- -- ----

上述代码中,我们定义了一个函数 sum,用于计算两个数的和。接下来,使用 console.assert 来断言 sum(2, 3) 的返回值是否等于 5。若断言成功,则控制台不会有任何输出,否则会输出 'Sum of 2 and 3 is not equal to 5'

2. Cypress 断言操作

Cypress 提供了一系列的断言操作,方便开发人员验证测试用例的执行结果。下面我们将介绍 Cypress 的常见断言操作及使用技巧。

2.1 should 链式语句

Cypress 中的 should 是一个链式语句,用于验证某个元素的属性、文本内容和状态等是否符合预期。以下是一个简单的示例:

--------------------------------------
------------------------------------ -----------
---------------------------------------------- ----------

上述代码中,我们分别使用了三个 should 语句。第一个语句验证按钮是否可见,第二个语句验证文本框的值是否等于 'example',第三个语句验证导航栏的类名是否不包含 'hidden'

使用 should 链式语句时,注意以下几点:

  • should 语句可以连续使用,也可以单独使用。
  • should 语句可以接受一个或多个参数,每个参数都是一个操作符,用于判断某个属性或状态是否符合预期。
  • should 语句的返回值是一个 Promise,用于异步等待验证结果是否符合预期。如果验证失败,则会抛出异常并终止测试用例执行。

2.2 expect 语句

Cypress 中的 expect 语句用于验证某个元素的属性、文本内容和状态等是否符合预期。与 should 语句不同,expect 语句返回的是一个断言对象,常常用于与 Jest 等测试框架结合使用。以下是一个简单的示例:

--------------------------- -- -
  ------------------------------- -----
  -------------------------------------
---

上述代码中,我们使用了两个 expect 语句。第一个语句验证按钮的文本是否为 'Click Me',第二个语句验证按钮是否被禁用。

使用 expect 语句时,注意以下几点:

  • expect 语句可以搭配 cy.get$ 等选择器使用,用于选中要验证的元素。
  • expect 语句可以使用多个断言操作符,用于检查元素的多个属性和状态等。
  • expect 语句的返回值是一个断言对象,与 Jest 等测试框架结合使用时,常常需要使用其返回值进行断言判断。

2.3 assert 语句

Cypress 中的 assert 语句用于验证某个变量或表达式是否符合预期。与 shouldexpect 语句不同,assert 语句不会返回 Promise 或断言对象,它会直接抛出异常并停止测试用例的执行。以下是一个简单的示例:

-------------------------- -- -
  ----- ----- - ----------
  ------------ --- ---------- ------ ----- -- --- ----- -- ------------
---

上述代码中,我们使用了 assert 语句,来验证一个输入框的值是否等于 'example'

使用 assert 语句时,注意以下几点:

  • assert 语句可以搭配 cy.get$ 等选择器使用,用于选中要验证的元素。
  • assert 语句可以接受一个或多个参数,第一个参数为待验证的变量或表达式,后面的参数为异常信息。
  • assert 语句的返回值是 undefined,它会直接抛出异常并停止测试用例的执行。

3. 断言使用技巧

Cypress 的断言操作非常灵活,可以根据具体的需求进行组合使用。以下是一些常用的断言使用技巧。

3.1 显式等待操作

在测试用例执行过程中,可能会出现页面加载缓慢、异步操作等问题,导致元素的获取和操作失败。为了解决这个问题,我们可以使用 Cypress 的显式等待操作,等待元素和状态符合预期后再进行操作。以下是一个简单的示例:

---------------------------------------
-------------------------------------- ----
-------------------------
----------------------------------------------- -- -
  ---------------------------
---

上述代码中,我们使用了 .should('not.exist').should('have.length', 10).should('be.visible') 等语句,来显式等待页面元素的出现、消失和状态变化。在 .within 语句中,我们又在弹窗中使用了 .get('.confirm').click() 语句,点击确认按钮。

使用显式等待操作时,注意以下几点:

  • 显式等待操作需要配合 should 语句使用,来验证元素和状态是否符合预期。
  • 显式等待操作可以在 getfind 等选择器中使用,也可以单独使用。
  • 显式等待操作的超时时间可以在 cypress.json 或测试用例中进行配置。

3.2 重试操作

在某些情况下,元素的获取和操作可能会失败,但稍后重试可能会成功。为了解决这个问题,Cypress 提供了 retry 函数,可用于在失败后自动重试操作,直到成功或超时。以下是一个简单的示例:

---------------------------------
-------------------------------------- - -------- ----- ------------
-------------------------------- -- -
  ----------------------------------
------------

上述代码中,我们分别在点击按钮、验证加载条和验证表格长度时使用了 retry 函数进行重试操作。其中,第二个例子设置了 5 次重试和 10 秒超时时间,第三个例子设置了 3 次重试。

使用重试操作时,注意以下几点:

  • 重试操作需要配合 shouldexpect 语句使用,来验证元素和状态是否符合预期。
  • 重试操作可以在 .click()should()expect() 和自定义函数等场景中使用。
  • 重试操作的超时时间可以在 cypress.json 或测试用例中进行配置,可以有不同的时限。

4. 总结

本文介绍了 Cypress 的常见断言操作及使用技巧,希望读者能够通过学习掌握前端自动化测试技能,并在实际应用中灵活运用。在实践过程中,还需要不断地积累经验、查阅文档和调试错误,才能将前端自动化测试做得更加完善。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/65215d3595b1f8cacd8de162


猜你喜欢

  • TypeScript 中的递归类型和 type 关键字的应用

    TypeScript 中的递归类型和 type 关键字的应用 前言 在 TypeScript 中,我们可以通过关键字 type 来定义一些新的类型。这个关键字的使用场景非常广泛,可以用来定义基本类型、...

    1 年前
  • CSS Reset 对响应式设计的影响

    CSS Reset 是指一组 CSS 样式,用于重置浏览器默认样式表的样式,从而能够帮助我们更好地控制页面样式。在响应式设计中,CSS Reset 扮演着重要的角色,本文将从以下几个方面探讨 CSS ...

    1 年前
  • Angular framework 与 RxJS 结合的示例代码

    前言 Angular framework 是一个十分流行的前端框架,而 RxJS 则是一个非常强大的响应式编程库。两者结合使用可以带来很多的好处,本文将介绍如何在 Angular 中使用 RxJS,包...

    1 年前
  • 基于 ES7 的装饰器实现的 AOP 编程

    在前端开发中,我们经常会用到 AOP(面向切面编程)的思想来简化代码和降低耦合性。而目前最流行的 AOP 实现方式是基于 ES7 的装饰器。本文将详细介绍基于 ES7 的装饰器实现的 AOP 编程,包...

    1 年前
  • 使用 Babel 编译 ES6 时遇到的常见错误及解决方案

    ES6 是 JavaScript 的一项新标准,它引入了许多新特性和语法糖,使得开发者在编写代码时更加优雅和高效。然而,由于浏览器和 Node.js 对 ES6 的支持度并不一致,开发者在实际项目中必...

    1 年前
  • 在 Enzyme 测试器中使用 Chai 进行 React 组件测试

    介绍 Enzyme 是一个强大的 React 组件测试器,它允许开发人员轻松地测试组件的行为和状态。而 Chai 是一个流行的 JavaScript 库,用于编写易读且易于维护的测试。

    1 年前
  • Custom Elements 实现在线表单构建工具,简单易用

    Custom Elements 实现在线表单构建工具 一个在线表单构建工具,是前端开发中经常用到的一种工具。而实现这种工具的方法有很多种,比如自己手写表单组件,利用各种第三方组件库,或者使用自定义元素...

    1 年前
  • Mongoose 中的预处理钩子详解及实际应用场景

    Mongoose 是一种在 Node.js 平台上操作 MongoDB 数据库的工具,对于前端开发同样十分有用。Mongoose 提供了许多接口供我们对 MongoDB 进行操作,其中 Pre 钩子可...

    1 年前
  • Next.js 服务端缓存技巧大揭秘

    在前端开发中,服务器端缓存技巧是提高网页性能和响应速度的重要手段之一。Next.js 是一个基于 React 的服务端渲染框架,在开发高性能、可扩展的 web 应用时,合理地利用服务端缓存技巧不仅可以...

    1 年前
  • Web Components 集成框架 LitElement 的使用指南

    前言 Web Components 是一种现代化的 Web 开发技术,它允许开发者将复杂的组件封装成一个自包含的元素。通过使用 Web Components,我们可以更加方便地组织和管理前端代码,提高...

    1 年前
  • Chai 如何处理从错误信息中提取 JavaScript 调用堆栈的问题

    Chai 如何处理从错误信息中提取 JavaScript 调用堆栈的问题 在前端开发中,错误信息是开发人员工作中的关键部分。错误信息可以帮助开发人员确定发生了什么错误,进而加快问题修复的进程。

    1 年前
  • Vue.js 中如何使用 multiselect 实现多选下拉框

    在前端开发中,经常需要使用多选下拉框这个组件,在 Vue.js 中实现也非常简单,本文将介绍如何使用 multiselect 插件来实现多选下拉框功能。 什么是 multiselect? multis...

    1 年前
  • 理解 ES11 中的 Optional Chaining 运算符

    在ES11中,引入了Optional Chaining运算符,使得我们可以更加便捷地处理空置的情况。本文将介绍Optional Chaining运算符的相关概念、语法及使用方法。

    1 年前
  • ES9 中的 Object.values() 和 Object.entries() 方法获取对象属性值和键值对

    在 JavaScript 的开发中,我们经常需要遍历对象的属性和值,以实现各种功能和逻辑。在 ES9 中,新增了 Object.values() 和 Object.entries() 两个方法,可以更...

    1 年前
  • Redis 失败重连机制的实现原理与使用说明

    简介 Redis 是一个开源、高性能的键值存储系统。它以内存数据库的形式存储数据,支持多种数据结构和持久化,并提供了丰富的功能来支持多种应用场景。 在使用 Redis 时,难免会遇到一些问题,比如由于...

    1 年前
  • 使用 LESS 进行 CSS 预处理,为你的 CSS 开发加速

    CSS 是网页开发中极为重要的一环,它可以为网页增添美观和吸引力,实现页面布局和交互的细节效果。然而,纯 CSS 代码难以维护和扩展,而 LESS 的出现使得我们能够更加高效地开发 CSS。

    1 年前
  • 如何在 Node.js 中使用 NPM 进行依赖管理

    Node.js 是一种基于 Chrome V8 引擎的 JavaScript 运行环境,它提供了一种在服务器上运行 JavaScript 的方法。NPM(Node.js 包管理器)是 Node.js ...

    1 年前
  • React Router v4 在 SPA 中的基础使用教程

    React Router 是 React 应用中最流行的路由库之一,它可以让你在单页应用 (SPA) 中管理 URL,从而实现页面间的切换和状态管理。本文将介绍 React Router v4 的基础...

    1 年前
  • 如何使用 ECMAScript 2017 中的 Symbol.hasInstance 属性实现自定义类型的判断

    如何使用 ECMAScript 2017 中的 Symbol.hasInstance 属性实现自定义类型的判断 在 JavaScript 中,我们可以使用 instanceof 关键字来检查一个对象是...

    1 年前
  • 最全性能优化工具及方法

    随着网站和应用程序的变得越来越复杂,性能优化变得越来越重要。在前端开发中,性能优化是提高用户体验和搜索排名的关键因素。本文将介绍最全性能优化工具及方法,帮助你提高页面性能并优化用户体验。

    1 年前

相关推荐

    暂无文章