我正在学习使用cypress.io,并希望同时学习JavaScript。
我目前正在寻求使内部工作自动化,以作为概念证明,为什么我们应该考虑切换到cypress.io而不是Webdriver。
我当前的问题是,我有一个需要循环的元素集合,其中包含某个字符串,然后选择该元素。
我的代码正确地找到了所有元素(位于一个类中),但是当我尝试遍历元素以查找具有特定字符串的元素时,我遇到了障碍。
代码如下-
//Selecting profiles
cy.get('.card')
.each(($el) => {
if ($el.contains() === profile) {
cy.wrap($el).click();
}
})
profile变量传递到此代码段所在的函数中。
我正在寻找.each和.contains函数的赛普拉斯文档。
但是当我运行这段代码时,我得到了异常提示
TypeError:$ el.contains不是函数
但是看柏树文档,我可以将功能附加到$ 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
}})
答案 0 :(得分:1)
.contains()
是赛普拉斯的功能。如文档页面所述,$el
是jQuery包装的元素,而不是Cypress包装的元素,因此.contains()
对此不起作用。
也就是说,.contains()
用于过滤选择内容,并且将返回chainer,而不是布尔值或字符串,因此这种使用.contains()
的特定方式在第一名。这是赛普拉斯如何对其命令进行排队的副作用-有关更多信息,请参见this doc page。
对于您要尝试做的事情,我建议利用本机jQuery元素:
//Selecting profiles
cy.get('.card')
.each(($el) => {
if ($el.text() === profile) {
cy.wrap($el).click();
}
})
注意:我假设profile
是一个字符串。如果不是,则可能需要修改此代码。