无法在阵列中找到并选择项目

问题描述 投票:2回答:1

我正在学习使用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
}})
javascript cypress
1个回答
1
投票

.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是一个字符串。如果不是,则可能需要修改此代码。

© www.soinside.com 2019 - 2024. All rights reserved.