You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在表格中选择元素的特定同级节点?Cypress问题求助

问题解决:Cypress表格单元格定位优化

问题描述

我已定位到表格的中间单元格,能够使用next()方法获取下一个单元格的文本,但当尝试使用parent()方法时,得到的是包含三个单元格的整行文本。以下是我编写的Cypress代码,恳请协助解决。

cy.get('[name="courses"] > tbody >tr >td:nth-child(2)').each((e1, index) => {
  const course = e1.text()
  
  if (course.includes('Python')) {
    cy.get('[name="courses"] > tbody >tr >td:nth-child(2)').eq(index).parent()
        .then((price) => {
      const courseprice = price.text()
      // expect(courseprice).to.be.equal('25')
      cy.log(courseprice)
    })
  }
})

界面截图:
表格内容展示
Cypress元素定位界面
Cypress日志输出结果


解决方案

你用parent()拿到整行是正常行为,因为单元格<td>的父元素就是表格行<tr>。如果想精准获取Python对应的价格单元格,推荐以下两种优化方式:

方式一:直接用next()获取相邻价格单元格

既然你已经验证next()可以获取下一个单元格,直接在当前找到的Python单元格上调用即可,无需重复定位元素:

cy.get('[name="courses"] > tbody > tr > td:nth-child(2)').each((e1) => {
  const course = e1.text().trim()
  
  if (course.includes('Python')) {
    cy.wrap(e1).next() // 获取当前单元格的下一个兄弟单元格(价格列)
      .then((priceCell) => {
        const courseprice = priceCell.text().trim()
        expect(courseprice).to.be.equal('25')
        cy.log(courseprice)
      })
  }
})

方式二:通过父行定位指定列

如果需要基于整行做更多操作,可以先获取父行,再定位到价格列:

cy.get('[name="courses"] > tbody > tr > td:nth-child(2)').each((e1) => {
  const course = e1.text().trim()
  
  if (course.includes('Python')) {
    cy.wrap(e1).parent() // 获取当前单元格所在的行
      .find('td:nth-child(3)') // 定位到该行的第三列(价格列)
      .then((priceCell) => {
        const courseprice = priceCell.text().trim()
        expect(courseprice).to.be.equal('25')
        cy.log(courseprice)
      })
  }
})

关键优化点

  • 避免冗余定位:循环内不要重复调用cy.get(),用cy.wrap(e1)直接包裹当前遍历到的元素,提升性能和代码简洁度。
  • 文本去空格:添加.trim()处理单元格文本,避免前后空格导致断言失败。

内容的提问来源于stack exchange,提问作者Mr.Prasad J

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 10:01:09