使用Selenium的@DataProvider时,此代码为何抛出数组越界异常?
数组越界异常原因分析与修复方案
我来帮你拆解这个问题——你碰到的数组越界异常,核心原因是数组初始化时的行数设置错误。先看看你的代码:
@DataProvider public Object[][] getdata() { Object [][] data =new Object [0][1]; data[0][0]="restricteduser"; data[0][1]="123412"; return data; }
你初始化了一个行数为0的二维数组new Object [0][1],这意味着这个数组里完全没有可使用的行,根本不存在data[0]这个索引对应的位置。当你尝试给data[0][0]和data[0][1]赋值时,程序找不到对应的数组位置,直接抛出数组越界异常。
修复方案
你需要根据实际要返回的测试数据组数来初始化数组。比如你这里要返回1组包含2个参数的测试数据,就把数组的行数设为1,列数设为2(对应每组的参数个数)。修正后的代码如下:
@DataProvider public Object[][] getdata() { // 初始化1行2列的数组,对应1组测试数据、每组2个参数 Object [][] data =new Object [1][2]; data[0][0]="restricteduser"; data[0][1]="123412"; return data; }
或者更简洁的写法,直接在初始化时完成赋值:
@DataProvider public Object[][] getdata() { return new Object[][] { {"restricteduser", "123412"} }; }
额外提示
- 二维数组的第一个维度对应测试数据的组数,第二个维度对应每组数据的参数个数,必须和你要测试的方法参数数量保持一致。
- 如果后续要添加多组测试数据,只需要在数组中新增对应的行即可,比如:
@DataProvider public Object[][] getdata() { return new Object[][] { {"restricteduser", "123412"}, {"adminuser", "admin123"}, {"guestuser", "guest456"} }; }
内容的提问来源于stack exchange,提问作者Fayeq Najuib
相关产品推荐
相关产品推荐

