我正在学习使用cypress.io并希望同时学习JavaScript。
我目前正在寻求自动化内部应用程序的工作作为概念的证据,为什么我们应该考虑切换到cypress.io而不是Webdriver。
我当前的问题是我有一个我需要循环的元素集合,其中包含一个特定的字符串,并选择此元素。
我的代码正确地找到了所有元素(与一个类一起定位),但是当我尝试循环查找具有特定字符串的元素时,我正在碰到一堵砖墙。
代码如下 -
//Selecting profiles
cy.get('.card')
.each(($el) => {
if ($el.contains() === profile) {
cy.wrap($el).click();
}
})
配置文件变量将传递到此代码段所在的函数中。
我正在查看.each和.contains函数的cypress文档。
但是,当我运行此代码时,我得到了异常说法
TypeError:$ el.contains不是函数
但是看着cypress doc,我可以将函数附加到$ el对象。
.get('ul>li').each(($el, index, $list) => {
// $el is a wrapped jQuery element
if ($el.someMethod() === 'something') {
// wrap this element so we can
// use cypress commands on it
cy.wrap($el).click()
} else {
// do something else
}})
.contains()
是赛普拉斯的一个功能。正如文档页面所说,$el
是一个jQuery包装的元素,而不是赛普拉斯包装的元素,所以.contains()
将无法使用它。
也就是说,.contains()
用于过滤选择并将返回chainer,而不是布尔值或字符串,所以这种使用.contains()
的特殊方式首先不起作用。这是赛普拉斯排队命令的副作用 - 有关更多信息,请参阅this doc page。
对于你想要做的事情,我建议利用原生的jQuery元素:
//Selecting profiles
cy.get('.card')
.each(($el) => {
if ($el.text() === profile) {
cy.wrap($el).click();
}
})
注意:我假设profile
是一个字符串。如果不是,则可能需要修改此代码。