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

Vaadin TestBench GridElement的getCell(row,col)方法空指针Bug问询

问题分析与结论

这确实是Vaadin TestBench 6.0.2版本中GridElement.getCell(int row, int col)方法的关联Bug,问题根源在于该方法依赖的getFirstVisibleRowIndex()未做空值安全处理。

具体原因

  1. 调用getCell(row, col)时,内部会触发isRowInView()检查,而该检查又会调用getFirstVisibleRowIndex()方法
  2. getFirstVisibleRowIndex()中的executeScript调用返回了null(可能出现在Grid未完全初始化、目标行尚未渲染等场景),但方法直接将返回值强制转换为Long并调用intValue(),完全没有空值校验,因此触发空指针异常
  3. 而getRow(rowNumber).getCell(c)的实现逻辑不依赖上述有缺陷的行可见性检查路径,因此可以正常获取单元格文本

验证依据

从你提供的GridElement.java代码片段可见:

public int getFirstVisibleRowIndex() {
    return ((Long) executeScript(
            "return arguments[0]._firstVisibleIndex+arguments[0]._vidxOffset",
            this)).intValue();
}

该方法未对executeScript的返回值做任何空值判断,一旦脚本返回null,强转Long时就会抛出NPE,这完全符合你遇到的堆栈信息。

结论

这属于Vaadin TestBench库的代码缺陷,正确的实现应该在getFirstVisibleRowIndex()中添加空值校验逻辑,比如:

public int getFirstVisibleRowIndex() {
    Object result = executeScript(
            "return arguments[0]._firstVisibleIndex+arguments[0]._vidxOffset",
            this);
    return result != null ? ((Long) result).intValue() : 0; // 或根据场景返回合理默认值
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 17:40:30