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+-按钮/
查看中的第二个答案,jQueryfilter()
方法可以用来做一些有趣的事情
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"]')