如何通过数组实现Cypress测试中两个元素的文本内容比对?
问题核心原因
Cypress 所有cy开头的命令都是异步入队执行的,不会同步返回DOM操作结果,因此你直接调用cy.get('Second element').text()无法获取到真实的元素文本值,必须在命令对应的then回调中处理执行逻辑,此时前序命令已执行完成,DOM状态是确定的。
可行实现方案
你可以直接用Cypress内置的断言能力完成比对,不需要手动存储变量做判断,内置断言还支持自动重试,更符合Cypress的最佳实践,修正后的代码如下:
isAgregationBarChoosenValuePresent() { const selectors = [ 'button[data-testid="period-button-DAY"]', 'button[data-testid="period-button-WEEK"]', 'button[data-testid="period-button-MONTH"]', 'button[data-testid="period-button-YEAR"]', 'button[data-testid="period-button-DECADE"]' ] selectors.forEach(($selector) => { cy.get($selector, { timeout: 10000 }) .eq(0) .click() .invoke('text') .then(buttonText => { // 这里的Second element替换为你实际的第二个元素选择器 cy.get('Second element') .should('have.text', buttonText.trim()) }) }) }
补充说明
- 用
invoke('text')可以直接提取前序获取到的DOM元素的文本内容,不需要手动调用$element.text() - 加
trim()是为了避免按钮文本或者目标元素文本前后有空格导致的判断失败,如果确定文本没有多余空格可以去掉 - 直接用
should('have.text')断言,Cypress会自动等待目标元素的文本更新,不需要额外加超时或者等待逻辑
内容的提问来源于stack exchange,提问作者wojnarto
相关产品推荐
相关产品推荐

