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
相关产品推荐
相关产品推荐

