javascript - 如何查找包含另一个嵌套选择器的多个选择器之一

标签 javascript cypress cypress-each

我有一个网页,并且有一个包含多个元素的列表:

第一种元素类型:

<li class="comp-data-text"> </li>
    <span class="imstuck" data-bind="text"> Something </span>

第二种类型的元素:

<li class="comp-data-text"> </li>

正如您所看到的,第二个不包含“imstuck”类以及“Something”文本。 (这是一个例子,实际情况下第二行代码嵌套得更深)

我想找出哪个元素包含或不包含这行代码。基于 cypress 文档和我尝试过的一些现有主题:

cy.get(...).each(($item) => {
    if ($item.has('span.imstuck')) {
        cy.wrap($item).find('.imstuck').should('contain', 'Something')
    }
})

即使元素不包含“imstuck”类,Cypress GUI 也会运行与 if 语句相关的代码。

AssertionError
Timed out retrying after 10000ms: Expected to find element: .imstuck, but never found it.
 Queried from element: <li.comp-data-text>

我还找到了另一种方法,但它也像前面的示例一样工作:

cy.get(...).each(($item) => {
    if ($item.hasClass('.imstuck')) {
        cy.wrap($item).find('.imstuck').should('contain', 'Something')
    }
})

预期结果: 如果特定元素不包含“.imstuck”类,则 if 语句将不会运行第三行代码。

实际结果 弹出错误是因为每次 cypress 运行第三行代码时,即使特定元素不包含 'imstuck' 类,并且当 cypress 尝试从第三行查找类 'imstuck' 时,cypress 会抛出错误。

最佳答案

.length 添加到 if 语句

cy.get('li').each(($li) => {
  if ($li.has('span.imstuck').length) {
    cy.wrap($item).find('.imstuck').should('contain', 'Something')
  }
})

但将 'span.imstuck' 提升一个级别可能会更好。这样您只能获取具有跨度的元素。

cy.get('li span.imstuck').each(($span) => {
  cy.wrap($span).should('contain', 'Something')
}

关于javascript - 如何查找包含另一个嵌套选择器的多个选择器之一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73379797/

相关文章:

junit - 为什么 gitlab CI 找不到我的 junit 报告工件?

testing - cypress 和 select2 未在选择时触发

cypress - 循环元素后测试字母顺序

Cypress - 验证一列中的每个表行是否包含相同的项目

javascript - 通过 HTML 代码中的搜索和替换填写协议(protocol)相关 URL

javascript - .on 或 .click 函数仅对同名表单元素有效一次

javascript - CSV 文件无法在 Excel 中使用 ngCsv 正确打开

javascript - 使用 JavaScript 获取以像素为单位的字符串长度

javascript - 在 Cypress Typescript 中 Break for 循环

Cypress Deep equal 的工作方式很奇怪