Testng java.lang.NullPointerException

时间:2011-11-21 21:08:47

标签: null nullpointerexception testng

我按照http://functionaltestautomation.blogspot.com/2009/10/dataprovider-data-driven-testing-with.html?showComment=1321643221128上的说明创建了我的脚本。示例代码完美运行。除了@test部分之外,我没有做任何重大更改。由于某种原因,我得到错误java.lang.NullPointerException。我无法弄清楚可能导致这种情况的原因。

package script;

import com.thoughtworks.selenium.*;

import org.junit.AfterClass;
import org.openqa.selenium.server.SeleniumServer;
import org.testng.annotations.*;

import java.io.File;
import jxl.*; 


@SuppressWarnings("deprecation")
public class Testcase1 extends SeleneseTestCase{

    @BeforeClass
    public void setUp() throws Exception {
        //SeleniumServer seleniumserver=new SeleniumServer();
        //seleniumserver.boot();
        //seleniumserver.start();
        setUp("http://devblade08-08:8080", "*firefox");
        selenium.open("/");
        selenium.windowMaximize();
        selenium.windowFocus();
    }


    @DataProvider(name = "Data")
    public Object[][] createData1() throws Exception{
        Object[][] retObjArr=getTableArray("test\\Resources\\Data\\TestCase1.xls",
                "Scenario", "TestCase1");
        return(retObjArr);
    }

    @Test (dataProvider = "Data")
    public void testTestcase1(String Username, String Password, String Performance) throws Exception {    



        selenium.open("/");
        selenium.click("link=» AudienceView Online");
        selenium.waitForPageToLoad("30000");
        selenium.type("name=BOset::WScontent::SearchCriteria::search_criteria", "Star Trek Automation");
        selenium.click("css=input[type=\"submit\"]");
        selenium.waitForPageToLoad("30000");
        selenium.click("//div[@id='search_results']/form/table/tbody/tr[12]/td[5]/a/span");
        selenium.waitForPageToLoad("30000");
        selenium.click("css=div.seattab_off");
        selenium.waitForPageToLoad("30000");
        selenium.click("id=BOparam::WSorder::getBestAvailable::reqNum::EA25EE97-EA9B-41B2-8D03-BC6B647F1255::select");
        selenium.select("id=BOparam::WSorder::getBestAvailable::reqNum::EA25EE97-EA9B-41B2-8D03-BC6B647F1255::select", "label=2");
        selenium.click("css=option[value=\"2\"]");
        selenium.click("name=doWork::WSorder::getBestAvailable");
        selenium.waitForPageToLoad("30000");
        selenium.click("id=popupDiv_okayButton");
        selenium.click("name=continue");
        selenium.waitForPageToLoad("30000");
        selenium.click("name=loginName");
        selenium.type("name=loginName", "banana");
        selenium.type("name=loginPassword", "banana");
        selenium.click("name=login");
        selenium.waitForPageToLoad("30000");






    }

    @AfterClass
    public void tearDown(){
        selenium.close();
        selenium.stop();
    } 

    public String[][] getTableArray(String xlFilePath, String sheetName, String tableName) throws Exception{
        String[][] tabArray=null;

            Workbook workbook = Workbook.getWorkbook(new File(xlFilePath));
            Sheet sheet = workbook.getSheet(sheetName); 
            int startRow,startCol, endRow, endCol,ci,cj;
            Cell tableStart=sheet.findCell(tableName);
            startRow=tableStart.getRow();
            startCol=tableStart.getColumn();

            Cell tableEnd= sheet.findCell(tableName, startCol+1,startRow+1, 100, 64000,  false);                

            endRow=tableEnd.getRow();
            endCol=tableEnd.getColumn();
            System.out.println("startRow="+startRow+", endRow="+endRow+", " +
                    "startCol="+startCol+", endCol="+endCol);
            tabArray=new String[endRow-startRow-1][endCol-startCol-1];
            ci=0;

            for (int i=startRow+1;i<endRow;i++,ci++){
                cj=0;
                for (int j=startCol+1;j<endCol;j++,cj++){
                    tabArray[ci][cj]=sheet.getCell(j,i).getContents();
                }
            }


        return(tabArray);
    }


}//end of class

2 个答案:

答案 0 :(得分:2)

如果无法访问被测系统,很难看出问题所在。 我确实认为以下行是错误的,或者值得对反向索引进行评论:

tabArray[ci][cj]=sheet.getCell(j,i).getContents()

如果getCell()的指示被不正确地反转,则可能导致尝试调用getContents()来抛出NPE。

我当然认为您应该在问题中使用调试器或包含的材料,说明为什么无法提供堆栈跟踪。

答案 1 :(得分:0)

包括堆栈跟踪或更好:研究堆栈跟踪。它会告诉您问题的确切位置(并且它更可能出现在您的代码中,而不是TestNG,IMO)。