Cypress 简明教程
Cypress - Asynchronous Behavior
Cypress 源自 node.js,后者基于 JavaScript。Cypress 命令本质上是同步的,因为它们依赖于 node 服务器。异步流意味着测试步骤在执行时不依赖于其先前的步骤。
没有依赖,每个步骤都作为独立的标识符执行。尽管测试步骤按顺序排列,但单个测试步骤不考虑前一步骤的结果,而仅仅执行自身。
Example
以下是在 Cypress 中异步行为的一个示例:
// 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")
})
})
Execution Results
输出如下 −
Promise
右键单击测试运行器,然后单击 Inspect,我们可以在控制台验证结果。此处, Tutorialspoint-Cypress (先前的步骤)在控制台登录,早于 Sign – in (稍后添加的步骤)。
Cypress 命令的设计方式是按照顺序执行每一步,而不是同时触发它们。但是,它们按顺序排列。因此,它使得流变得同步。这是通过 Promise 实现的。
在上面的示例中, console.log 是一个纯 JavaScript 语句。它没有像 Cypress 命令那样排队等待的能力。Promise 使我们可以以串行模式执行 Cypress 命令。
Modes in Promise
Promise 有三种模式来对命令执行的状态进行分类。它们如下:
-
Resolved - 如果测试步骤成功运行,则会出现此结果。
-
Pending - 如果正在等待测试步骤运行的结果,则这就是结果。
-
Rejected - 如果测试步骤运行不成功,则这就是结果。
仅在先前的步骤已成功执行或收到解析后的 promise 响应后,才会执行 Cypress 命令。然后,该方法用于在 Cypress 中实现 Promise。
Example
以下是在 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 的状态。