若是想从头学起Cypress,能够看下面的系列文章哦html
https://www.cnblogs.com/poloyy/category/1768839.htmlweb
前言
重试(Retry-ability)是 Cypress 的核心概念之一,有助于咱们写出更加健壮的测试json
命令和断言
Cypress 测试中常常被调用的两种类型,仍之前面说到的 testLogin.js 为栗子后端

最后的断言解析
检查标签为 h1 的元素是否包含 jane.lane异步
断言的通常步骤
- 用 cy.get() 查询应用程序的DOM,找到元素
- 针对元素或元素列表进行断言尝试 ,咱们示例中为 .should("contain", "jane.lane")
关于实际工做中的灵魂拷问
如今的 web 应用基本都是异步的,若是出现如下状况又应该怎么处理呢?ide
- 若是断言发生时,应用程序还没有更新DOM怎么办?
- 若是断言发生时,应用程序正在等待其后端响应,而致使页面暂无结果怎么办?
- 若是断言发生时,应用程序正在进行密集计算,而致使页面未及时更新怎么办?
上述状况再测试中常常会发生,通常处理方法是在断言前价格固定等待时间(或像 selenium 同样显式、隐式等待),但仍有可能会发生测试失败测试
Cypress 如何优美的解决上述问题
- cy.get() 命令以后的断言经过,则该命令成功执行完成
- cy.get() 命令以后的断言失败,则 cy.get() 命令会自动从新查询 web 应用程序的 DOM 树,而后 Cypress 将再次尝试对 cy.get() 返回的元素进行断言
- 若是断言仍然失败, cy.get() 仍然会从新查询 DOM 树....以此类推
- 直到断言成功 或 cy.get() 命令超时
总结ui
- 其实很像selenium 的显式等待,只不过 Cypress 是全局的,不用针对元素去单独识别
- Cypress 这种自动重试机制避免了在测试代码中编写硬编码等待(强制等待),使测试代码更加健壮
多重断言
- 在平常测试中,有时候须要多重断言,即获取元素后跟多个断言
- 在多重断言中,Cypress 将按顺序进行断言,即当第一个断言经过后,会进行第二个断言,经过后进行第三个断言...以此类推
列表的栗子
需求编码
- 假设一个下拉列表,存在两个选项,第一个选项是“iTesting”,第二个选项是“testerTalk”
- 咱们须要验证两个选项的存在,而且顺序正确,代码片断以下

代码解析
- 总共有三个断言:一个 should() ,两个 expect()
- and() 断言其实是 should() 断言的别名,它是 should() 的自定义回调断言,其中包含两个 expect() 断言
- 在测试执行过程当中,若是第二个断言失败了,那第三个断言永远不会执行
- 若是致使第二个断言失败的缘由被找到且修复了,且此时整个命令尚未超时,则在进行第三个断言时,还会再次重试第1、第二个断言
重试(Retry-ability)的条件
前言
经常使用的可重试命令

重点啦!
重试的超时时间默认是 4秒,对应的配置项是: defaultCommondTimeout ,若是想改重试的超时时间,在 cypress.json 文件改对应的字段值便可spa