- Cypress教程
- Cypress - 主页
- Cypress - 简介
- Cypress - 架构和环境设置
- Cypress - 测试运行者
- Cypress - 构建第一个测试
- Cypress - 支持的浏览器
- Cypress - 基本命令
- Cypress - 变量
- Cypress - 别名
- Cypress - 定位器
- Cypress - 断言
- Cypress - 文本验证
- Cypress - 异步Behave
- Cypress - 使用 XHR
- Cypress - jQuery
- Cypress - 复选框
- Cypress - 标签
- Cypress - 下拉菜单
- Cypress - 警报
- Cypress - 子窗口
- Cypress - 隐藏元素
- Cypress - 框架
- Cypress - 网络表
- Cypress - 鼠标操作
- Cypress - cookie
- Cypress - 获取和发布
- Cypress - 文件上传
- Cypress - 数据驱动测试
- Cypress - 提示弹窗
- Cypress - 仪表板
- Cypress - 屏幕截图和视频
- Cypress - 调试
- Cypress - 自定义命令
- Cypress - 装置
- Cypress - 环境变量
- Cypress - 挂钩
- Cypress - JSON 文件的配置
- Cypress - 报告
- Cypress - 插件
- Cypress - GitHub
- Cypress有用资源
- Cypress - 快速指南
- Cypress - 有用的资源
- Cypress - 讨论
Cypress - 异步Behave
Cypress 源自基于 JavaScript 的 Node.js。Cypress 命令本质上是同步的,因为它们依赖于节点服务器。异步流程意味着测试步骤不依赖于其先前步骤的执行。
不存在依赖性,每个步骤都作为独立身份执行。尽管测试步骤按顺序排列,但单个测试步骤不会考虑前一步骤的结果,而只是自行执行。
例子
以下是 Cypress 中异步Behave的示例 -
// test suite describe('Tutorialspoint', function () { it('Scenario 1', function (){ // test step to launch a URL cy.visit("https://accounts.google.com") // identify element cy.get('h1#headingText').find('span').should('have.text', 'Sign in') cy.get('h1#headingText').find('span').then(function(e){ const t = e.text() // get in Console console.log(t) }) // Console message console.log("Tutorialspoint-Cypress") }) })
执行结果
输出如下 -
承诺
右键单击“Test Runner”,然后单击“Inspect”,我们可以在控制台中验证结果。这里,Tutorialspoint-Cypress(之前的步骤)在登录(稍后添加的步骤)之前已记录在控制台中。
Cypress 命令的设计方式是每个步骤都按顺序执行,并且不会同时触发。但是,它们是一前一后排列的。从而使流程同步。这是通过 Promise 实现的。
在上面的示例中,console.log是一个纯 JavaScript 语句。它不具备类似于 Cypress 命令的排队等待能力。Promise 允许我们以串行模式执行 Cypress 命令。
Promise 模式
Promise 具有三种模式来对命令执行的状态进行分类。它们如下 -
已解决- 如果测试步骤成功运行,则会出现此结果。
Pending - 如果正在等待测试步骤运行结果,则这是结果。
拒绝- 这是测试步骤运行不成功的结果。
仅当先前步骤已成功执行或收到已解决的 Promise 响应时,Cypress 命令才会执行。然后,使用该方法在Cypress中实现Promise。
例子
以下是 Cypress 中 Promise 的示例 -
describe('Tutorialspoint Test', function () { it('Promise', function (){ return cy.visit('https://accounts.google.com') .then(() => { return cy.get('h1#heading'); }) }) })
Cypress 对 Promise 的实现是封装的并且不可见。因此,它有助于拥有更紧凑的代码。此外,我们在自动化测试时不必考虑 Promise 的状态。
没有承诺的实施
以下命令解释了如何在 Cypress 中实现无承诺的实现 -
describe('Tutorialspoint Test', function () { it('Without Promise', function (){ cy.visit('https://accounts.google.com') cy.get('h1#heading') }) })