赛普拉斯:查找特定 td 元素的内容
Cypress: Finding the content of a specific td element
我需要根据行中下一个 td 元素的内容找到特定 td 元素的内容。
标记(简体):
<table id="oversiktOverSoknaderTable">
<tr data-e2e-selector="soknad-linje">
<td data-e2e-selector="status">Trukket</td>
<td data-e2e-selector="soknadProsjektNavn">Endret søknad</td>
<td>Lån</td>
<td data-e2e-selector="soknadId" id="2"></td>
</tr>
<tr data-e2e-selector="soknad-linje">
<td> ...
可以有多个行,所有行都具有相同的选择器 (data-e2e-selector="soknad-linje">。手头的问题是验证正确的名称是否显示正确的状态。(抱歉因为没有翻译选择器名称,但我认为它们是不言自明的。)
我想做的是使用 .should('contain'.'value') 验证 data-e2e-selector="status" 中的文本是否为 "Trukket" data-e2e-selector="soknadProsjektNavn" 是 "Endret søknad" 的行。 (如上例所示。)
想法?
假设 Endret søknad
是您的 table 中的唯一值。
因为你的元素中有 data-e2e-selector
你可以使用 follow
cy.get('#oversiktOverSoknaderTable') // hopefully this is unique enough
.should('be.visible') // assertion to avoid element detached from DOM
cy.contains('[data-e2e-selector="soknad-linje"]', 'Endret søknad') // gets row with unique string
.should('be.visible')
.find('[data-e2e-selector="status"]') // searches in row for element
.should('have.text', 'Trukket') // has status text
你可以这样做:
cy.contains('td', 'Endret søknad')
.parent('tr')
.within(() => {
cy.get('[data-e2e-selector="status"]').should('have.text', 'Trukket')
})
像这样,你可以做
cy.contains('td', 'Endret søknad')
.sibling('[data-e2e-selector="status"]')
.should('contain', 'Trukket')
其中 sibling()
需要一个选择器来指定是哪个。
还有.prev()
命令。
与@jjhelguero 一样,我还建议在选择器中使用 data-e2e-selector
进行具体说明。
cy.contains('td[data-e2e-selector="soknadProsjektNavn"]', 'Endret søknad')
.prev('td[data-e2e-selector="status"]')
.should('have.text', 'Trukket')
如果您遇到 detached from DOM 错误,请尝试使 .should()
之前的命令(触发重试)尽可能短。
cy.contains('[data-e2e-selector="soknad-linje"]', 'Endret søknad') // row with project
.should('contain', 'Trukket') // confirm the status
或
cy.get('[data-e2e-selector="soknad-linje"]')
.should('contain', 'Endret søknad')
.should('contain', 'Trukket')
我需要根据行中下一个 td 元素的内容找到特定 td 元素的内容。
标记(简体):
<table id="oversiktOverSoknaderTable">
<tr data-e2e-selector="soknad-linje">
<td data-e2e-selector="status">Trukket</td>
<td data-e2e-selector="soknadProsjektNavn">Endret søknad</td>
<td>Lån</td>
<td data-e2e-selector="soknadId" id="2"></td>
</tr>
<tr data-e2e-selector="soknad-linje">
<td> ...
可以有多个行,所有行都具有相同的选择器 (data-e2e-selector="soknad-linje">。手头的问题是验证正确的名称是否显示正确的状态。(抱歉因为没有翻译选择器名称,但我认为它们是不言自明的。)
我想做的是使用 .should('contain'.'value') 验证 data-e2e-selector="status" 中的文本是否为 "Trukket" data-e2e-selector="soknadProsjektNavn" 是 "Endret søknad" 的行。 (如上例所示。)
想法?
假设 Endret søknad
是您的 table 中的唯一值。
因为你的元素中有 data-e2e-selector
你可以使用 follow
cy.get('#oversiktOverSoknaderTable') // hopefully this is unique enough
.should('be.visible') // assertion to avoid element detached from DOM
cy.contains('[data-e2e-selector="soknad-linje"]', 'Endret søknad') // gets row with unique string
.should('be.visible')
.find('[data-e2e-selector="status"]') // searches in row for element
.should('have.text', 'Trukket') // has status text
你可以这样做:
cy.contains('td', 'Endret søknad')
.parent('tr')
.within(() => {
cy.get('[data-e2e-selector="status"]').should('have.text', 'Trukket')
})
像这样,你可以做
cy.contains('td', 'Endret søknad')
.sibling('[data-e2e-selector="status"]')
.should('contain', 'Trukket')
其中 sibling()
需要一个选择器来指定是哪个。
还有.prev()
命令。
与@jjhelguero 一样,我还建议在选择器中使用 data-e2e-selector
进行具体说明。
cy.contains('td[data-e2e-selector="soknadProsjektNavn"]', 'Endret søknad')
.prev('td[data-e2e-selector="status"]')
.should('have.text', 'Trukket')
如果您遇到 detached from DOM 错误,请尝试使 .should()
之前的命令(触发重试)尽可能短。
cy.contains('[data-e2e-selector="soknad-linje"]', 'Endret søknad') // row with project
.should('contain', 'Trukket') // confirm the status
或
cy.get('[data-e2e-selector="soknad-linje"]')
.should('contain', 'Endret søknad')
.should('contain', 'Trukket')