赛普拉斯测试用例:Select 只有一个元素的文本(不是其 children/descendants 的文本)

Cypress testcase: Select only text of an element (not the text of its children/descendants)

HTML代码:

<p class="target">
    <span>I am Span 1 of target_value 1*</span>
    <span>I am Span 2 of target_value 2*</span>
    target_value   /* I want to get this value in cypress test case */
</p>

注意*:文本“我是 target_value 1 的 Span 1”和“我是 target_value 2 的 Span 2”都是动态的,可以在 times.But 时更改这些span 可能包含文本“target_value”。 在赛普拉斯测试用例中,我如何直接 select

中的文本“target_value”(不是在其子项中)并检查它是否正在渲染。我只想获取不在其任何子元素内的主要文本值。

你可以这样做。您提取所有内容并拆分字符串并获取最后一个值并断言或执行任何操作。

cy.get('p.target').invoke('text').then((text) => {
  expect(text.split('\n')[3].trim()).to.equal('some value')
})

您的目标是一个文本节点。有 3 个,但前两个只是跨度之间的间隔字符。

cy.get('p')
  .then($el => $el[0].childNodes)  
  .then(children => [...children].filter(child => {
    return child.nodeType === 3   // ignore <span>s
      && child.textContent.trim() !== ''  // remove spacing between <span>s
  }))
  .then(textNodes => textNodes[0].textContent.trim())  
  .should('eq', 'target_value   /* I want to get this value in cypress test case */')

如果目标文本始终在 <p>

内排在最后
cy.get('p')
  .then($p => $p[0].lastChild.nodeValue.trim())   
  .should('eq', 'target_value   /* I want to get this value in cypress test case */')

不包括 .not(children())

的儿童
cy.get('p')
  .then($p => $p.contents().not(Cypress.$('p').children()).text().trim())
  .should('eq', 'target_value   /* I want to get this value in cypress test case */')

克隆并删除子项

cy.get('p')
  .then($p => $p.clone().children().remove().end().text().trim())
  .should('eq', 'target_value   /* I want to get this value in cypress test case */')