Javascript 如何忽略cypress中搜索字符串的一部分

Javascript 如何忽略cypress中搜索字符串的一部分,javascript,cypress,Javascript,Cypress,鉴于以下情况: cy.get('div[class=“specialId-1111-button”]”) 每次安装npm后,编号1111可能会发生变化,在搜索选择器时,我如何将该编号替换为类似specialId-*-按钮的编号,以便它可以抓取其中包含任何编号的选择器。我知道这不是正确的语法,但我正在寻求建议。您可以使用*。它基本上说我们正在搜索的文本应该出现在字符串中,在您的例子中是specialId。因此,您可以编写类似以下内容: cy.get('div[class*="specia

鉴于以下情况:

cy.get('div[class=“specialId-1111-button”]”)


每次安装npm后,编号
1111
可能会发生变化,在搜索选择器时,我如何将该编号替换为类似
specialId-*-按钮的编号,以便它可以抓取其中包含任何编号的选择器。我知道这不是正确的语法,但我正在寻求建议。

您可以使用
*
。它基本上说我们正在搜索的文本应该出现在字符串中,在您的例子中是specialId。因此,您可以编写类似以下内容:

cy.get('div[class*="specialId"]')
你可以使用

或者

或者

还是一个组合

cy.get('div[class^="specialId-"][class$="-button"]')

例如,如果您需要排除specialId-1111-checkbox

如果您想匹配数字两侧的文本,最好使用一个。

来玩转正则表达式的想法,纯粹是为了看看它有多实用

您可以使用像这样的自定义函数来增强jQuery

要在Cypress中使用它,可以这样添加它(从原始版本更新)

cypress/support/index.js

const jQuery=Cypress.$;
jQuery.expr[':'].regex=函数(元素、索引、匹配){
常量matchParams=match[3]。拆分(',');
常量有效标签=/^(数据| css):/;
常量属性={
方法:matchParams[0]。匹配(validLabels)?matchParams[0]。拆分(“:”)[0]:“attr”,
属性:matchParams.shift().replace(有效标签“”)
}
const regexFlags='ig';
const regex=new RegExp(matchParams.join('').replace(/^\s+|\s+$/g')、regexFlags);
返回regex.test(jQuery(elem)[attr.method](attr.property));
}
测试

cy.get(“div:regex(class,specialId-.+-button)”)
所以:

  • 对于这种场景来说是过度杀戮,但在需求更复杂时可能会有用处
  • 不遵循Cypress用于正则表达式的约定,即源代码中给定的
    /
    分隔符
  • 似乎不允许正则表达式转义字符
    \
    ,因此例如,无法使用更精确的表达式/specialId-\d+-按钮/

查看中的第二个答案,jQuery
filter()
方法可以用来做一些有趣的事情

cy.get('div'))
.invoke('filter',function()){
//在这里使用复杂的jQuery表达式
返回此.classList[0]。匹配(/specialId-\d+-button/);
})
.应该('have.length',1);
注意

  • 同样对于这个问题也太过了
  • 可以在过滤器函数中使用一些非常复杂的javascript
  • 不需要jQuery修补程序函数
cy.get('div[class^="specialId-"]')
cy.get('div[class$="-button"]')
cy.get('div[class^="specialId-"][class$="-button"]')