Cypress Wait

Cypress经常遇见非代码问题的异常情况,针对种种情况做一个总结,方便以后遇到类似情况能更快解决:

首先,Cypress针对部分操作有自己的retry处理,直到未成功超时才会跑错,了解下cypress的各种操作的默认超时时间:

OptionDefaultDescription
defaultCommandTimeout 4000 Time, in milliseconds, to wait until most DOM based commands are considered timed out
execTimeout 60000 Time, in milliseconds, to wait for a system command to finish executing during a cy.exec() command
taskTimeout 60000 Time, in milliseconds, to wait for a task to finish executing during a cy.task() command
pageLoadTimeout 60000 Time, in milliseconds, to wait for page transition events or cy.visit()cy.go()cy.reload() commands to fire their page load events. Network requests are limited by the underlying operating system, and may still time out if this value is increased.
requestTimeout 5000 Time, in milliseconds, to wait for a request to go out in a cy.wait() command
responseTimeout 30000 Time, in milliseconds, to wait until a response in a cy.request()cy.wait()cy.fixture()cy.getCookie()cy.getCookies()cy.setCookie()cy.clearCookie()cy.clearCookies(), and cy.screenshot() commands
slowTestThreshold 10000 | 250 Time, in milliseconds, to consider a test "slow" during cypress run. A slow test will display in orange text in the default reporter. You will often want to configure this differently for component and e2e testing. Default is 10000 for e2e and 250 for component tests.

在Cypress有retry机制的情况下,实际使用中因为测试情况的不同,仍然有可能遇见各种超时导致的错误,

常见的报错情况:页面未完全加载完,网络问题,系统硬件资源不足,等等,都可能导致UI测试操作某一步出现异常报错。为了增加UI case的稳定健壮,测试出真正的问题,可以多种方法规避这种问题:

一、添加硬等待

优点能人为硬性控制时间,容易实现。有些未知问题,例如click()莫名其妙不成功时,加个wait()就能离奇解决,起到电视不出人拍拍就能好的意外效果。

缺点:时间不容易掌控,时间写少了仍然会报错,写多了牺牲效率。

实现方法:

最常用的cy.wait(),单位是ms,可以使用cy.wait(1000)即等待1s,也可以在操作之后.wait(),例如cy.get("xxx").wait(500)。

二、 添加弹性等待

优点:时间不会被浪费;能等待某种条件满足再操作。

缺点写起来麻烦点儿,没有wait()的大招效果

实现方案:

1,全局修改:

上边说过,Cypress默认有超时时间,是弹性的时间,是针对全局的,可以自己定义修改。

修改方法:cypress.json文件中,添加对应设置即可,例如修改{“defaultCommandTimeout”:5000}。一修改就是全局,慎用。

2.操作级别修改

添加:cy.get("element name",{timeout:10000})

3.安装组件,waitUntil

代码中可能需要等待某一种状态之后再继续运行,这时候可以用cy.waitUntil()

cy.waitUntil()不是系统自带的,则需要单独安装,安装配置方式如下:

  • 在项目根目录用cmd或者powershell运行npm i -D cypress-wait-until 安装插件。
  • 在cypress\support\command.js中添加
import 'cypress-wait-until';
  • 在case中添加命令。cy.waitUntil()等待命令执行,例如
cy.get("xxx").waitUntil(()=>条件)或者cy.waitUntil(()=>条件)

 *retry,最近做项目发现有时候环境遇见异常怎么wait都不行,但是一重新跑就没问题,为了代码稳定加了大招,设置retry次数

a. 在cypress.json文件中加retries:3

b.在case中it('test', { retries: 2, defaultCommandTimeout: 1000 }

posted @ 2020-10-22 13:45  蜗牛果果  阅读(1325)  评论(0编辑  收藏  举报