Cypress断言表格td匹配搜索关键词导致浏览器挂起如何解决
问题原因分析
- 你的代码在
forEach同步循环中混用了Cypress异步命令,导致命令队列执行混乱,同时每次调用cy.get('td')会全局搜索页面所有<td>元素,完全没有利用当前正在遍历的行元素,匹配逻辑完全偏离需求 - Cypress的
contains命令默认找不到匹配元素时会持续重试直到超时,循环次数多的情况下就会触发浏览器卡顿、挂起的问题
修复方案
使用Cypress官方提供的.each()方法遍历表格行,仅在当前行范围内搜索匹配关键词,写法如下:
assertCorrectFilterResults(searchKeyword: string) { // 先校验表格已加载出至少1行结果,避免空表场景报错 this.elements.tableBody().find("tr").should('have.length.gte', 1) // 逐行校验,每行至少有一个td包含搜索关键词 .each(($row) => { // 仅在当前行的td中搜索,支持不区分大小写匹配 cy.wrap($row).find('td').contains(searchKeyword, { matchCase: false }) }) }
如果需要支持特殊字符的模糊匹配,可以改用正则写法:
cy.wrap($row).find('td').contains(new RegExp(searchKeyword, 'i'))
如果表格存在隐藏行(比如分页未展示的行、筛选隐藏的行),可以仅校验可见行,修改行选择器为:this.elements.tableBody().find("tr:visible")
内容的提问来源于stack exchange,提问作者Mona101ma
相关产品推荐
相关产品推荐

