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

如何用Nightwatch的.elements()获取元素集合并提取文本?

问题:如何在Nightwatch中获取元素集合的文本内容?

我正在使用Nightwatch测试网站,尝试通过.elements()方法获取元素集合。我的代码如下:

client.elements('css selector', 'p[class="f5 color-fg-muted mb-0 mt-1"]', function(elements) {
        console.log(elements.value);
        elements.value.forEach(item => {
          console.log(item.ELEMENT);
        });
      });

输出结果为:

...
{
    'element-6066-11e4-a52e-4f735466cecf': 'DE70929C2F5311AC55FD8AFEE548EA6D_element_178'
  },
  {
    'element-6066-11e4-a52e-4f735466cecf': 'DE70929C2F5311AC55FD8AFEE548EA6D_element_179'
  },
  {
    'element-6066-11e4-a52e-4f735466cecf': 'DE70929C2F5311AC55FD8AFEE548EA6D_element_180'
  },
  ... 80 more items
]
undefined
undefined
undefined
undefined
...

这些选择器指向若干p元素,我想要获取这些元素的文本内容。请问如何获取对应的p元素并提取其文本?


解决方法

问题根源

你代码中item.ELEMENT返回undefined,是因为WebDriver标准的元素标识键为element-6066-11e4-a52e-4f735466cecf,而非ELEMENT。另外,.elements()仅返回元素ID集合,要获取文本需针对每个ID调用专门的文本获取方法。

基础实现代码

遍历元素集合,对每个元素ID调用.elementIdText()获取文本:

client.elements('css selector', 'p[class="f5 color-fg-muted mb-0 mt-1"]', function(elements) {
  elements.value.forEach(item => {
    // 获取标准元素ID
    const elementId = item['element-6066-11e4-a52e-4f735466cecf'];
    client.elementIdText(elementId, function(textResult) {
      console.log(textResult.value); // 输出元素文本内容
    });
  });
});

异步简化写法(推荐)

如果你的Nightwatch版本支持,使用async/await让代码更易读:

module.exports = {
  '获取元素集合文本': async function(client) {
    // 先等待元素加载完成(可选,针对动态页面)
    await client.waitForElementPresent('p[class="f5 color-fg-muted mb-0 mt-1"]', 5000);
    
    const elements = await client.elements('css selector', 'p[class="f5 color-fg-muted mb-0 mt-1"]');
    for (const item of elements.value) {
      const elementId = item['element-6066-11e4-a52e-4f735466cecf'];
      const textResult = await client.elementIdText(elementId);
      console.log(textResult.value);
    }
    
    client.end();
  }
};

额外提示

  • 确认选择器准确性,避免因class顺序或多余空格导致匹配失败;
  • 动态页面务必添加等待元素出现的逻辑,防止因元素未加载完成导致的获取失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 12:25:03