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

如何在Cypress的each循环内获取子元素并执行点击操作?

问题

我有一个表格,首列单元格包含div和图片,需要点击该div,同时还要对第三列执行测试操作,因此选择器仅写到td层级未包含div。现有如下each循环代码,想在index为10时获取td内的div并点击,尝试了cy.wrap($el).get("div")和cy.wrap($el).children("div")但均无效。已知通过cy.get("fcsky-shared-table cdk-virtual-scroll-viewport mat-table tr.mat-row td:nth-child(1) div").eq(10).click()可实现需求,想询问是否能在each循环内完成该操作。

初始代码:

cy.get("f-shared-table cdk-virtual-scroll-viewport mat-table tr.mat-row td:nth-child(1)").each(($el, index, $list) => {
    if(index === 10) {
        // how to get the div to click it
    }
})

尝试的代码:

cy.get("f-shared-table cdk-virtual-scroll-viewport mat-table tr.mat-row td:nth-child(1)").each(($el, index, $list) => {
    if(index === 10) {
        cy.wrap($el).get("div").click() // not working
        cy.wrap($el).children("div").click() // not working
    }
})
解决方案

可以在each循环内完成操作,问题出在选择器的使用逻辑上:

  • cy.wrap($el).get("div")会从整个文档根节点重新查找div,并非限定在当前$el(即目标td)范围内,所以无法定位到目标元素。
  • cy.wrap($el).children("div")仅查找td的直接子元素,若div嵌套在td内部的其他元素中,就会找不到。

正确的做法是使用find()方法,它会在当前元素的所有后代节点中查找匹配元素:

cy.get("f-shared-table cdk-virtual-scroll-viewport mat-table tr.mat-row td:nth-child(1)").each(($el, index, $list) => {
    if(index === 10) {
        cy.wrap($el).find("div").click() // 成功获取td内的div并点击
    }
})

如果遇到元素加载延迟的情况,可以添加断言确保元素存在后再执行点击:

cy.get("f-shared-table cdk-virtual-scroll-viewport mat-table tr.mat-row td:nth-child(1)").each(($el, index, $list) => {
    if(index === 10) {
        cy.wrap($el).find("div").should("exist").click()
    }
})

内容的提问来源于stack exchange,提问作者Achal Utkarsh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 01:02:14