如何用同步方式在Cypress中获取元素文本(兼容0元素场景)
解决方法
原来的代码会报错,是因为cy.xpath在找不到匹配元素时会直接抛出断言失败的异常,导致后续each命令无法执行,整个await的Promise被拒绝。
要实现无元素时返回空数组的需求,可以改用原生DOM的document.evaluate方法执行XPath查询——这种方式不会因无匹配元素报错,而是返回包含结果的快照对象。修改后的代码如下:
// 获取当前页面的document对象 const doc = await cy.document(); // 执行XPath查询,获取有序节点快照 const xpathResult = doc.evaluate( "//*[@blabla='bla']//li", doc, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null ); const result = []; // 遍历快照中的元素,提取文本内容 for (let i = 0; i < xpathResult.snapshotLength; i++) { result.push(xpathResult.snapshotItem(i).textContent.trim()); } return result; }
说明
document.evaluate是原生DOM API,支持XPath查询;当无匹配元素时,snapshotLength为0,循环不会执行,直接返回空数组。- 全程使用
async/await语法,没有依赖Cypress的then()、should()等链式方法,能直接通过await拿到实际的数组结果。
内容的提问来源于stack exchange,提问作者Mikhail
相关产品推荐
相关产品推荐

