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

Cypress如何实现弹窗存在时点击确认按钮的条件测试?

Cypress 条件点击指定弹窗实现方案

原代码失效原因

你的代码执行cy.get('body')时,目标弹窗大概率还未完成DOM渲染,此时同步执行的body.find()无法匹配到还没出现的按钮,会直接跳过判断分支,逻辑自然不会触发。将入参重命名为$body只是jQuery对象的命名规范调整,并没有解决时序不匹配的核心问题。

可行实现代码

基础版(直接匹配确认按钮)

给查询命令添加超时等待和不报错配置,保证给足弹窗渲染时间,匹配不到也不会中断测试:

cy.get('button.swal2-confirm:contains("Yes")', { 
  timeout: 3000, // 可根据实际页面加载速度调整最长等待时间
  failOnError: false 
}).then($confirmBtn => {
  if ($confirmBtn.length > 0) {
    cy.wrap($confirmBtn).click()
  }
})

精准版(先匹配弹窗标题避免误触)

如果页面可能出现多个SweetAlert2弹窗,可先匹配指定标题的弹窗再找按钮:

// 先匹配标题为"You are about to leave this page"的弹窗容器
cy.get('.swal2-container:has(h2:contains("You are about to leave this page"))', {
  timeout: 3000,
  failOnError: false
}).then($alertContainer => {
  if ($alertContainer.length > 0) {
    cy.wrap($alertContainer).find('button.swal2-confirm:contains("Yes")').click()
  }
})

注意事项

  • timeout参数请根据你的项目实际弹窗弹出延迟调整,避免还没等到弹窗弹出就结束判断
  • failOnError: false配置是核心,只有设置后元素不存在时才不会直接抛出测试失败错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:27:03