Cypress测试用例:只选择一个元素的文本(而不是它的子/后代的文本)



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>

注*:两个文本"我是Span 1的target_value 1"one_answers"我是Span 2的target_value 2"是动态的,有时会改变。但是这些span可能包含文本"target_value"。在柏树测试用例中,我如何选择文本"target_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 */')

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

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

相关内容

  • 没有找到相关文章

最新更新