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

Cypress:定位嵌套span下的纯文本并实现匹配点击

问题

在如下HTML DOM结构中,需要获取文本“Hello World 1”“Hello World 2”“Hello World 3”。尝试获取所有class为class1的span元素并调用text()方法,但未得到目标文本。现需实现迭代这些文本,与传入函数的文本对比,找到对应的span元素并点击。

DOM结构

<div>
  <span class="class1">
     <span class="class2">
       "Text1"
     </span>
     "Hello World 1"
  </span>
  <span class="class1">
     <span class="class2">
       "Text2"
     </span>
     "Hello World 2"
  </span>
  <span class="class1">
     <span class="class2">
       "Text3"
     </span>
     "Hello World 3"
  </span>
</div>

解决方案

问题原因

直接调用text()会把class1元素下所有子节点的文本拼接在一起(比如返回"Text1" "Hello World 1"),无法单独提取目标的“Hello World”文本。需要针对性提取class1元素下的直接文本节点,排除子元素的文本内容。


方案1:原生JavaScript实现

遍历所有class1的span元素,提取每个元素的直接文本节点,清理多余空格和引号后与目标文本对比,匹配成功则触发点击。

function findAndClickTargetText(targetText) {
  const class1Spans = document.querySelectorAll('.class1');
  
  class1Spans.forEach(span => {
    // 筛选出当前span下的直接文本节点
    const directTextNodes = Array.from(span.childNodes).filter(node => node.nodeType === Node.TEXT_NODE);
    // 拼接文本并清理格式
    const cleanedText = directTextNodes.map(node => node.textContent.trim()).join('').replace(/"/g, '');
    
    if (cleanedText === targetText) {
      span.click();
      return; // 找到目标后停止遍历
    }
  });
}

// 调用示例:点击包含"Hello World 2"的span
findAndClickTargetText("Hello World 2");

方案2:jQuery实现

利用contents()方法获取所有子节点,筛选文本节点后处理内容,再对比匹配。

function findAndClickTargetText(targetText) {
  $('.class1').each(function() {
    const cleanedText = $(this).contents()
      .filter(function() {
        return this.nodeType === Node.TEXT_NODE;
      })
      .text()
      .trim()
      .replace(/"/g, '');
    
    if (cleanedText === targetText) {
      $(this).click();
      return false; // 终止循环
    }
  });
}

// 调用示例
findAndClickTargetText("Hello World 1");

内容的提问来源于stack exchange,提问作者Shashidhar Yamsani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 00:20:53