I am developing tests in Eclipse (Indigo) using java (1.6) and WebDriver (2.16).
I have a fairly simple test that runs fine, but does not actually 'end'. What I mean is that after all of the lines of code in the 'main' method have been executed, the Eclipse console still indicates that the code is running (red 'Terminate' button in the console is enabled).
This only started happening yesterday, after I extended the testing script with some new code. Thinking that was the problem, I commented all new code. Unfortunately, the problem persists.
How do I go about troubleshooting this?
Thanks for your input.
Edit
Below the relevant parts of a JStack thread dump. See here for the full dump
2012-01-07 10:56:40 Full thread dump Java HotSpot(TM) 64-Bit Server VM (20.4-b02 mixed mode):
"Thread-7" daemon prio=6 tid=0x0000000008c08800 nid=0x12f4 runnable [0x000000000 921f000] java.lang.Thread.State: RUNNABLE at java.io.FileInputStream.readBytes(Native Method) at java.io.FileInputStream.read(Unknown Source) at org.apache.commons.exec.StreamPumper.run(StreamPumper.java:105) at java.lang.Thread.run(Unknown Source)
"Thread-6" daemon prio=6 tid=0x0000000008d7b800 nid=0xb98 runnable [0x0000000009 11f000] java.lang.Thread.State: RUNNABLE at java.io.FileInputStream.readBytes(Native Method) at java.io.FileInputStream.read(Unknown Source) at java.io.BufferedInputStream.fill(Unknown Source) at java.io.BufferedInputStream.read1(Unknown Source) at java.io.BufferedInputStream.read(Unknown Source) - locked <0x00000007d5a00888> (a java.io.BufferedInputStream) at java.io.FilterInputStream.read(Unknown Source) at org.apache.commons.exec.StreamPumper.run(StreamPumper.java:105) at java.lang.Thread.run(Unknown Source)
"Thread-5" prio=6 tid=0x000000000678b000 nid=0x10e4 runnable [0x000000000901f000 ] java.lang.Thread.State: RUNNABLE at java.lang.ProcessImpl.waitFor(Native Method) at org.apache.commons.exec.DefaultExecutor.executeInternal(DefaultExecut or.java:347) at org.apache.commons.exec.DefaultExecutor.access$200(DefaultExecutor.ja va:46) at org.apache.commons.exec.DefaultExecutor$1.run(DefaultExecutor.java:18 8) "main" prio=6 tid=0x000000000062e000 nid=0x450 runnable [0x000000000261f000] java.lang.Thread.State: RUNNABLE at java.lang.Thread.exit(Unknown Source)
EDIT
Here's my Excel code (using java IO and Apache's POI classes)
public HashMap<String, String> getTestData()
{
InputStream myxls = null;
try {
// Create a connection to the Excel file
myxls = new FileInputStream(fileName);
System.out.println("Excel Input was opened");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
//e.printStackTrace();
}
// Define a workbook object
HSSFWorkbook wb = null;
try {
// Instantiate the workbook object
wb = new HSSFWorkbook(myxls);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// Create a worksheet object
HSSFSheet sheet = wb.getSheet(sheetName);
// Read the first row (it always contains the headers (variable names)
HSSFRow headerRow = sheet.getRow(0);
// Read the row requested
HSSFRow row = sheet.getRow(dataRow);
//System.out.println("Creating a new HashMap from row " + dataRow + " in sheet " + sheetName);
// Define a collection of value/value pairs
HashMap<String,String> testData = new HashMap<String,String>();
// Get count of columns != empty
int columnCount = row.getPhysicalNumberOfCells();
//System.out.println(Integer.toString(columnCount));
String textHeader;
String textData;
// Loop through the columns
for(int colcount=0; colcount < columnCount; colcount++)
{
// Read the column header and the cell value
HSSFCell cell = row.getCell(colcount);
HSSFCell headerCell = headerRow.getCell(colcount);
switch (headerCell.getCellType ())
{
case HSSFCell.CELL_TYPE_NUMERIC :
{
// cell type numeric.
textHeader = Double.toString(headerCell.getNumericCellValue());
//System.out.println(textHeader);
break;
}
case HSSFCell.CELL_TYPE_STRING :
{
// cell type string.
HSSFRichTextString richTextString = headerCell.getRichStringCellValue();
textHeader = richTextString.getString();
break;
}
default :
{
// types other than String and Numeric.
textHeader = "Type not supported";
break;
}
}
switch (cell.getCellType ())
{
case HSSFCell.CELL_TYPE_NUMERIC :
{
// cell type numeric.
textData = Double.toString(cell.getNumericCellValue());
break;
}
case HSSFCell.CELL_TYPE_STRING :
{
// cell type string.
HSSFRichTextString richTextString = cell.getRichStringCellValue ();
textData = richTextString.getString();
break;
}
case HSSFCell.CELL_TYPE_BLANK :
{
// cell type string.
textData = "";
break;
}
default :
{
// types other than String and Numeric.
textData = "Type not supported";
break;
}
}
// Add the value of each cell to the HashMap collection
testData.put(textHeader,textData);
//System.out.println(textHeader + " / " + textData);
}
try{
// End the file object
myxls.close();
System.out.println("Excel Input was closed");
}
catch (IOException e){
// TODO Auto-generated catch block
e.printStackTrace();
}
// Send the HashMap back to the calling code
return testData;
}