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

Cypress测试时if条件成立else块仍执行报错如何解决?

问题根因
  1. Cypress命令返回值不符合判断逻辑:所有Cypress API(包括cy.wrap()、.should())返回的都是Cypress链式调用对象,不是布尔值,这类对象在if判断中始终为truthy,因此你写的第一个if条件永远会判定为成立。
  2. 语法编写错误:你在else后直接拼接了(cy.wrap($checkListIcon).should('have.attr', 'src', '/Client/images/iconYes.png'))表达式,没有加if关键字,实际执行逻辑为:else分支先执行一遍src为yes的断言,后续的大括号属于独立代码块,无论if/else分支走哪个,这段代码都会执行,最终触发断言报错。
正确实现方案

直接读取原生JQuery元素的src属性做判断即可,不要将Cypress命令作为if的判断条件:

cy.get('.eligibilitySuccessfulGrant > :nth-child(1) > .cursor')
  .then(($checkListIcon) => {
    // 读取原生元素的src属性
    const iconSrc = $checkListIcon.attr('src')
    // 兼容浏览器自动补全域名的情况,也可以用 iconSrc.includes('iconNo.png') 做判断
    if (iconSrc === '/Client/images/iconNo.png') {
      verifyQIAPTab.clickRequestOrientation().should('be.disabled')
    } else if (iconSrc === '/Client/images/iconYes.png') {
      verifyQIAPTab.clickRequestOrientation().should('be.enabled').click()
    } else {
      // 可选:抛出异常提示非预期的src值,方便排查问题
      throw new Error(`出现未预期的图标src:${iconSrc}`)
    }
  })

如果你的测试场景可以提前确定当前应该出现哪类图标,建议直接拆分测试用例,不需要做动态判断,测试逻辑会更清晰:

  • 触发iconNo.png出现的业务场景,直接断言按钮为禁用状态
  • 触发iconYes.png出现的业务场景,直接断言按钮为启用状态并执行点击操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:48:00