JAVA:无法在arraylist中添加多个对象。对象信息正在被覆盖

时间:2014-02-26 13:38:29

标签: java selenium arraylist

我有带有测试用例数据的excel表。每个测试用例可能包含一个或多个步骤。我想通过迭代excel(通过对每一行使用for循环)将测试用例的每个步骤的所有数据(3个字段)拉入Arraylist“TestStepsList”。一旦我检查新的测试用例是否已在excel中启动,我将所有步骤数据(Arraylist“TestSTepsList”)放入另一个数组TestCaseList中。所以TestCaseList是一个列表列表。

TestCaseID输入关键字 TC_01主窗口1 Menuitem_Verification TC_02 Configuration Manager-2_1 SubMenuitem_Verification-1 TC_02 Configuration Manager-2_2 SubMenuitem_Verification-2

代码如下:

    for(int j=0;j<Total_Row;j++){   



    int total_Steps_TestCase =(int) test_Case_Data.get(curr_TCID);
    List<String> TestStepsList = new ArrayList<>();

    if (flag_CreateNewTC == 1) // Checking if we are on first step of the test case and need to create new list(TestSTepList)

    {           

        TC_index = 1;
        l = 0;

        TestStepsList.add(0, curr_TCID);
        TestStepsList.add(1, Curr_TCInput);
        TestStepsList.add(2, Curr_TCKword);


        if(TC_index ==((int) test_Case_Data.get(curr_TCID))) //Checking if test case is only single line. In such case we will add that testcase object(list to 
                                     //TestCase List)                   
        {
            seq=seq-1;
            TestCaseList.add(seq,TestStepsList);
        }

    }

    else  //If a test case is multi step we will add all steps into TestSteplist till new test case begins
    {

        l=l+1;
        TestStepsList.add(curr_TCID);
        TestStepsList.add(Curr_TCInput);
        TestStepsList.add(Curr_TCKword);

        TC_index++;

        if(TC_index ==((int) test_Case_Data.get(curr_TCID)))//If this is last step of existing test case then we need to add entry to TestCaseList List

        {
            seq=seq-1;
            TestCaseList.add(seq, TestStepsList);
                    }

        }

    }

}

我面临的问题是单行测试用例输入正确地添加到TestCaselist中,但对于具有多个步骤的testccase,只添加了最后一行。例如,如果Testcase由3行组成,则仅添加最后一步

我认为最佳做法是每次将任何项目添加到列表时初始化列表对象,但在我的情况下,它不可能,因为我想在同一列表中添加多个步骤。

2 个答案:

答案 0 :(得分:1)

我认为seq=seq-1可能与它有关。如果我正确地阅读您的代码,您会继续将TestStepsList推送到TestCastList中的同一元素中。

如果您要添加到List的末尾,请忽略index参数。否则,将索引参数更改为seq-1并停止重新分配seq

TestCaseList.add(seq - 1, TestStepsList);

我不确定我是否遗漏了一些东西。

答案 1 :(得分:0)

List<String> TestStepsList = new ArrayList<>();

将其置于for循环之外。

因为每次循环播放时都会创建一个新的ArrayList