无法找到和选择数组中的项目

时间:2018-09-13 12:06:37

标签: javascript cypress

我正在学习使用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
}})

1 个答案:

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