Javascript 通过cypress.get()选择HTML中的元素
我正在使用它编写一些针对html站点的测试 下面将从我的HTML站点上的表中正确地选择单个Javascript 通过cypress.get()选择HTML中的元素,javascript,jquery,html,cypress,Javascript,Jquery,Html,Cypress,我正在使用它编写一些针对html站点的测试 下面将从我的HTML站点上的表中正确地选择单个tr元素。 网站内容如下所示: <tr data-recordid="theId"> <td...><div ..>Text 1</div></td> <td...><div ..>Text 2</div></td> <td...><div ..>Text 3<
tr
元素。
网站内容如下所示:
<tr data-recordid="theId">
<td...><div ..>Text 1</div></td>
<td...><div ..>Text 2</div></td>
<td...><div ..>Text 3</div></td>
</tr>
cy.get('tr[data-recordid="theId"]').get('div').contains('Text')
现在我想选择。
标记中的文本。我尝试为第一个。
标记链接单个调用的第一件事如下:
<tr data-recordid="theId">
<td...><div ..>Text 1</div></td>
<td...><div ..>Text 2</div></td>
<td...><div ..>Text 3</div></td>
</tr>
cy.get('tr[data-recordid="theId"]').get('div').contains('Text')
这并不像我预期的那样有效。get()
调用链接jQuery调用(基于cypress的文档)。看来我误解了JQuery的工作原理
我所期望的是如何检查所有div元素(不工作):
你知道如何前进一步吗?缺少任何信息,请发表评论。因此,经过更多的试验,我找到了一个解决方案:
cy.get('tr[data-recordid="TheId"]>td> div', function() {
cy.contains('Text 1').end()
cy.contains('Text 2').end()
cy.contains('Text 3').end()
})
如果其他人有更好的解决方案,请在此处发布。让我们澄清几点: 1) 如果您只是想断言div包含给定的文本,那么这是最好的、最精确的方法:
cy.get('tr[data-recordid="theId"]').should(($tr) => {
const $divs = $tr.find('div') // find all the divs
expect($divs.eq(0)).to.contain('Text 1')
expect($divs.eq(1)).to.contain('Text 2')
expect($divs.eq(2)).to.contain('Text 2')
})
我不知道事情是否需要如此具体。如果只想确保$tr
包含文本,可以将其简化为:
cy.get('tr[data-recordid="theId"]').should(($tr) => {
expect($tr).to.contain('Text 1')
expect($tr).to.contain('Text 2')
expect($tr).to.contain('Text 2')
})
为什么要这样做
- 使用
函数不会更改主题。您的.should()
将继续成为未来的主题$tr
- Cypress将等待
回调中的所有断言通过,并不断重试,直到它们通过为止。这保证了在继续之前多个元素的状态是正确的.should()
cy.get('tr[data-recordid="theId"]').within(() => {
cy.contains('Text 1') // changes the subject to the <div>
cy.contains('Text 2') // changes the subject to the <div>
cy.contains('Text 3') // changes the subject to the <div>
})
您最初的问题也使用了chainedcy.get()
,它不深入主题。为此,请使用.find()
cy.get('a').get('span')//每个cy.get()都从根目录进行查询
cy.get('a').find('span')//来自
最后一点注意:您建议的解决方案不起作用
cy.get()
不接受回调函数,如果查看命令日志,您将无法看到调用的3cy.contains
。换言之,它们没有运行。这就是它通过的原因。此解决方案没有Brian Mann所解释的那样有效。非常感谢您的详细解释和回答我的问题。。感谢你接受这一点。给我带来了很多思考和更好的理解。。。
cy.get('tr[data-recordid="theId"] div').contains('Text 1')
cy.get('tr[data-recordid="theId"] div').contains('Text 2')
cy.get('tr[data-recordid="theId"] div').contains('Text 3')
cy.get('a').get('span') // each cy.get() queries from the root
cy.get('a').find('span') // the .find() queries from the <a>