赛普拉斯:查找特定 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')