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

如何从原始值组成的列表中提取指定值(Karate UI+JS测试场景)

问题描述

作为JS初学者,我近期使用Karate UI(Selenium WebDriver的姊妹框架)搭配JS编写网站自动化测试脚本,遇到HTML表格数据提取问题:
需要遍历所有包含目标文本的表格行,提取对应行的指定列值。

目标表格HTML结构

<table class="table">
    <tbody>
        <tr xpath="1">
            <td>
                <a href="link">Write</a> &nbsp;
            </td>
            <td>123</td>
            <td>1.0.1.8</td>
            <td>TargetProduct1</td>
            <td></td>
            <td>P1</td>
            <td>10.0</td>
            <td>en-US</td>
            <td></td>
        </tr>
        <tr>...</tr>
        <tr>...</tr>
        <tr>...</tr>
        <tr>...</tr>
        <tr>...</tr>
    </tbody>
</table>

现有代码与运行输出

使用Karate原生命令筛选匹配行时,命令返回原始值组成的列表,代码及日志如下:

* def getProduct = scriptAll('//table//tbody//tr', '_.innerText', function(x){ return x.contains('TargetProduct') })

* karate.log(getProduct) // 日志输出:
Write  123 1.0.1.8 TargetProduct1       P1 10.0 en-US
Write  4586 1.0.1.3 TargetProduct5      Test2 10.1  en-US
Write  134 1.0.1.1 TargetProduct0       Four2 10.3  en-US
Write  3 1.0.1.2 TargetProduct2     Boo3 10.1   en-US

具体需求

提取返回结果中每行第6列的值,组成目标数组['P1', 'Test2', 'Four2', 'Boo3']。此前使用Object.keys提取值的方法不适用于当前列表结构,测试Object.keys、Object.values均无法实现需求。

补充说明:已在Karate官方论坛提交该问题,未获得有效答复。


解决方案

当前写法的核心问题是直接提取了整行的innerText,拿到的是不规则多空格拼接的整行字符串,后续拆分很容易受空白字符数量、空列影响出错,优先在DOM遍历阶段直接定位目标列取值,两种可用方案如下:

方案1:DOM节点直接定位取值(推荐)

无需先提取整行文本再拆分,直接在匹配到符合条件的<tr>后,定位到第6个<td>节点提取文本即可。注意XPath索引从1开始计数,第6列对应td[6]:

* def targetList = scriptAll('//table//tbody//tr[contains(., "TargetProduct")]/td[6]', '_.innerText.trim()')
* karate.log(targetList) // 直接输出 ["P1", "Test2", "Four2", "Boo3"]
  • 优势:跳过字符串拆分步骤,直接从DOM节点取目标值,不受列内空白、空列、列值含空格等情况影响,稳定性最高。

方案2:现有返回结果字符串拆分

如果必须基于已拿到的getProduct结果处理,可以对每个整行字符串按空白正则分割,过滤空值后取对应索引位(JS数组索引从0开始,第6列对应索引5):

* def extractCol = function(rowStr) {
    const cells = rowStr.split(/\s+/).filter(item => item.trim() !== '')
    return cells[5]
}
* def targetList = getProduct.map(extractCol)
  • 注意:该方案依赖每行文本拆分结果和列顺序完全对应,如果某列存在带空格的文本、空列位置变动,会出现取值错位问题,非必要不使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 14:33:28