首页 > 解决方案 > 赛普拉斯:获取包含给定字符串/正则表达式的所有元素

问题描述

我正在尝试用柏树测试分页栏。

我想断言仅在此栏中包含数字的按钮数量,并忽略其他按钮(上一页,下一页...)

按钮看起来像这样:

<button class="...">33</button>

我首先尝试了这个测试:

cy.get('.pagination')
  .find('button')
  .contains(/\d+/)
  .should('have.length.gte', 2) 

但这给了我一个警告,即 contains 只会返回一个元素,使“长度”测试无用。

我还尝试了许多基于过滤器的组合,“:contains”jquery 关键字,但没有一个有效:

.filter(`:contains('/\d+\')`) 
// >> finds nothing

.filter((elt) => { return elt.contains(rx) })  
// >> throws 'elt.contains is not a function'

.filter((elt) => { return rx.test(elt.text()) }) 
// >> throws 'elt.text is not a function'

.filter(() => { return rx.test(Cypress.$(this).text()) }) 
// filter everything and return nothing, even the buttons containing the text '1'

标签: cypress

解决方案


.filter()回调有参数(index, elt) => {},这意味着你可以像这样使用它

cy.get('.pagination')
  .find('button')
  .filter((index, elt) => { return elt.innerText.match(/\d+/) }) 
  .should('have.length.gte', 2)

推荐阅读