You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cypress中使用cy.get()作为if-else条件时如何避免断言错误?

解决Cypress中条件判断元素存在的问题

你的代码问题出在两个核心点:

  1. cy.get()是异步命令,它返回的是Cypress命令链对象而非DOM元素,直接用!cy.get()做布尔判断永远为false,因为命令对象本身属于真值。
  2. cy.get()默认会断言目标元素必须存在,找不到就直接抛出错误终止测试,根本走不到后续的if-else逻辑。

要实现「元素不存在时执行reload,存在时执行其他代码」的需求,可以用以下两种可靠方法:

方法一:同步DOM查询(适合简单场景)

利用Cypress提供的同步DOM查询工具Cypress.$,在命令链的.then()回调里执行判断:

cy.then(() => {
  if (Cypress.$('.modal.modal--active').length === 0) {
    cy.reload()
  } else {
    // 这里编写元素存在时的逻辑
    cy.get('.modal.modal--active').find('.confirm-btn').click()
  }
})

Cypress.$和jQuery语法完全一致,会同步查询当前页面的DOM元素,返回匹配的元素集合,通过length值判断元素是否存在,不会触发断言错误。

方法二:基于body元素的条件查询(更贴合Cypress异步执行逻辑)

先获取页面body元素,再在回调内用find()查询目标元素,避免cy.get()的默认存在断言:

cy.get('body').then(($body) => {
  if ($body.find('.modal.modal--active').length === 0) {
    cy.reload()
  } else {
    // 元素存在时的操作代码
    cy.get('.modal.modal--active').invoke('hide')
  }
})

注意:绝不能直接在if条件中写cy.get(),Cypress的异步命令必须在命令链中执行,同步判断逻辑要放在.then()的回调函数内,这样才能保证DOM已经完成更新,判断结果准确。

内容的提问来源于stack exchange,提问作者KiritoLyn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 07:18:21