Vaadin TestBench GridElement的getCell(row,col)方法空指针Bug问询
问题分析与结论
这确实是Vaadin TestBench 6.0.2版本中GridElement.getCell(int row, int col)方法的关联Bug,问题根源在于该方法依赖的getFirstVisibleRowIndex()未做空值安全处理。
具体原因
- 调用
getCell(row, col)时,内部会触发isRowInView()检查,而该检查又会调用getFirstVisibleRowIndex()方法 getFirstVisibleRowIndex()中的executeScript调用返回了null(可能出现在Grid未完全初始化、目标行尚未渲染等场景),但方法直接将返回值强制转换为Long并调用intValue(),完全没有空值校验,因此触发空指针异常- 而
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
相关产品推荐
相关产品推荐

