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

Cypress中使用Contains实现If-Else逻辑的性能优化问题

问题描述
  • 原Cypress脚本通过if(cy.get('body').contains(regex))判断页面是否存在目标词汇集合中的任一词汇,存在时逻辑正常执行,但不存在时脚本直接崩溃终止
  • 改为循环逐个用includes检测每个词汇,因循环45次导致执行耗时过长
  • 尝试用includes搭配正则表达式时,触发错误:"First argument to String.prototype.includes must not be a regular expression"
    需求:高效检测页面是否出现任一目标词汇,同时解决上述问题
解决方案

Cypress的命令是异步的,不能直接在if条件中使用cy.get()的返回值,正确的做法是在.then()回调中获取DOM元素后进行判断,通过正则一次匹配所有目标词汇,避免循环耗时。

修正后的脚本如下:

// 修正语法错误:添加赋值符号,统一变量名
const items = ["a1", "a2",..............,"a45"]

// 构建正则,无需全局标记g,只需判断是否存在匹配
const regex = new RegExp(items.join('|'))

cy.get('body').then(($body) => {
  const bodyText = $body.text()
  // 用正则测试文本是否包含任一目标词汇
  if (regex.test(bodyText)) {
    // 检查.button元素是否存在
    if ($body.find('.button').length > 0) {
      cy.get('.button2').then(($btn) => {
        const infoo = $btn.text()
        // 合并两次writeFile,减少IO操作
        cy.writeFile('cypress/fixtures/test.txt', `\n${infoo} | `, { flag: 'a+' })
      })
    }
  } else {
    // 修正语法错误:移除多余的点
    cy.get('.button2').click()
  }
})

关键优化点

  • 避免直接在if中使用Cypress命令,改用.then()获取DOM元素后同步判断
  • 用正则一次匹配所有目标词汇,替代循环逐个检测,大幅减少执行时间
  • 合并两次cy.writeFile调用,减少文件IO操作
  • 修正原脚本中的语法错误(变量定义、多余的点)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 05:58:20