如何将变量设置为ApachePOI迭代数据值

时间:2016-03-04 18:53:56

标签: java excel selenium apache-poi

我有两个脚本;一个用Apache POI从excel表读取数据,另一个用于selenium从apache脚本获取接收的数据并将数据用于输入字段。

这是我的apache excel阅读器脚本:

public class readExcelFinal{
static ArrayList<Double> priceList;
static ArrayList<String> titleList;
static ArrayList<String> descriptionList;
static ArrayList<String> imageLocationList;

public static void processExcelFile(String fileName) throws IOException{
    priceList = new ArrayList<Double>();
    titleList = new ArrayList<String>();        
    descriptionList = new ArrayList<String>();
    imageLocationList = new ArrayList<String>();

    try{
        FileInputStream myInput = new FileInputStream(fileName);
        POIFSFileSystem myFileSystem = new POIFSFileSystem(myInput);
        HSSFWorkbook myWorkBook = new HSSFWorkbook(myFileSystem);
        HSSFSheet mySheet = myWorkBook.getSheetAt(2);
        Iterator rowIter = mySheet.rowIterator();

        // For each row,
        while(rowIter.hasNext()){
            HSSFRow row = (HSSFRow) rowIter.next();

            // If there's a cell at index 0, it's a price
            if(row.getCell(0) != null)
            priceList.add(row.getCell(0).getNumericCellValue());

            // If there's a cell at index 1, it's a title
            if(row.getCell(1) != null)
            titleList.add(row.getCell(1).getStringCellValue());

            // If there's a cell at index 2, it's a description
            if(row.getCell(2) != null)
            descriptionList.add(row.getCell(2).getStringCellValue());

            // If there's a cell at index 3, it's an image location
            if(row.getCell(3) != null)
            imageLocationList.add(row.getCell(3).getStringCellValue());
        }
    }catch(Exception e){
        e.printStackTrace();
    }
}

public static void createTests(){
    // Create an RNG to re-use
    Random randomGenerator = new Random();


    // Iterate through the price list and create tests
    for (Double price : priceList){         

        // For each of title, description, and image location, get a random index into the list and pull the value
        int titleIndex = randomGenerator.nextInt(titleList.size());
        String title = titleList.get(titleIndex);           

        int descriptionIndex = randomGenerator.nextInt(descriptionList.size());
        String description = descriptionList.get(descriptionIndex);

        int imageLocationListIndex = randomGenerator.nextInt(imageLocationList.size());
        String imageLocation = imageLocationList.get(imageLocationListIndex);


        System.out.println("Creating test for Price " + price + "\n\tTitle:\t" + title + "\n\tDesc:\t" + description + "\n\tImg:\t" + imageLocation);

        }
    }

public static String price;
public static String title;
public static String description;
public static String imageLocation;

public void setName(String price) {
    this.price = price;
}

public static String getPrice() {
    return price;
}

public void setDescription(String description) {
    this.description = description;
}

public static String getDescription() {
    return description;
}

public void setTitle(String title) {
    this.title = title;
}

public static String getTitle() {
    return title;
}

public void setImageLocation(String imageLocation) {
    this.imageLocation = imageLocation;
}

public static String getImageLocation() {
    return imageLocation;
}

}

这是我的(部分)我的硒脚本:

public class webDriver {


public static void main(String[] args) throws Exception {

    //THIS IS WHERE IM PULLING THE METHOD INTO MY SELENIUM SCRIPT
    readExcelFinal.main(args);



            //EXCELL DATA
            String price = readExcelFinal.getPrice();
            String title = readExcelFinal.getTitle();
            String description = readExcelFinal.getDescription();
            String imageLocation = readExcelFinal.getTitle();

            System.out.println("Creating test for Price " + price + "\n\tTitle:\t" + title + "\n\tDesc:\t" + description + "\n\tImg:\t" + imageLocation);

    // The Firefox driver supports javascript 
    WebDriver driver = new FirefoxDriver();

正如您在我的selenium脚本中看到的,我正在使用:

 System.out.println("Creating test for Price " + price + "\n\tTitle:\t" + title + "\n\tDesc:\t" + description + "\n\tImg:\t" + imageLocation);

快速查看控制台中的数据,这样我就不必等待整个脚本运行以查看变量是否正在获取值。我在控制台中找到了这个:

Creating test for Price null
Title:  null
Desc: null
Img: null

我没有从我的脚本中获取任何测试用例数据。

1 个答案:

答案 0 :(得分:1)

null值背后的原因是,您尝试通过调用price方法打印变量titledescriptiongetXXX,但是,未在代码中的任何位置设置/指定值(例如,我无法在任何地方看到setXXX()),因此,default值被分配和打印。

顺便说一句,我建议您仔细阅读Java Programming Basics以及static and non static变量/成员之间的区别。