【发布时间】:2014-11-18 01:06:27
【问题描述】:
我正在尝试做的是 onTestFailure (TestNG) 我正在尝试将通过/失败写入指定列。在下面的代码中,我只是想做一个小测试来将 Fail 写入指定的单元格。但是发生的事情是,它没有将通过/失败写入指定的单元格,而是从字面上覆盖整个文件并擦除我的所有数据,我对为什么会发生这种情况感到困惑。我在这里看过并用谷歌搜索但找不到答案。以下是以下代码:
@Override
public synchronized void onTestFailure(ITestResult tr){
try {
Workbook workbook = Workbook.getWorkbook(new File(testData), workbookSettings);
WritableWorkbook wb = Workbook.createWorkbook(new File(testData), workbook);
WritableSheet ws = wb.getSheet("OrderEditQA3");
Label label = new Label(5,2, "Fail");
ws.addCell(label);
wb.write();
} catch (IOException e) {
e.printStackTrace();
} catch (BiffException b){
System.out.print("Error!");
} catch (WriteException we){
System.out.print("");
}
}
任何帮助将不胜感激。
更新...
下面是我用来将测试数据返回到 Dataprovider 的另一个类,我还从指定的工作表中加载我的所有元素。下面是代码
//获取所有测试数据的代码
protected static Object[][] loadTestData(String sheetName)throws BiffException, IOException{
Sheet sheet = null;
try{
sheet = getWorkBook().getSheet(sheetName);
rowCount = sheet.getRows();
colCount = sheet.getColumns();
data = new String[rowCount -1][colCount-1];
int ci;
int cj;
ci=0;
for(int i=1; i< rowCount; i++, ci++){
cj=0;
for(int j=1; j< colCount; j++, cj++){
Cell cell = sheet.getCell(j,i);
if(cell.getContents().isEmpty()){ continue;}
System.out.print(cell.getContents() + "\n");
data[ci][cj] = cell.getContents();
}
}
}catch (IOException io){
System.out.print(String.format("File: %s not found!", testData));
}
getWorkBook().close();
return data;
}
//获取所有元素属性的代码:
@BeforeClass
protected static List<String> loadElements()throws BiffException, IOException {
Sheet sheet = null;
sheet = getWorkBook().getSheet("Elements");
rowCount = sheet.getRows();
colCount = sheet.getColumns();
List<String> list = new ArrayList<>(rowCount);
for (int i = 1; i < rowCount; i++) {
for (int j = 0; j < colCount; j++) {
Cell cell = sheet.getCell(j,i);
if(cell.getContents().isEmpty()) {continue;}
String cellContents = cell.getContents();
list.add(cellContents);
System.out.print(cell.getContents() + "\n");
}
}
elements = list;
getWorkBook().close();
return list;
}
【问题讨论】:
-
我假设您使用的是 jexcel api?
-
是的,我正在使用 jexcel api - 关于为什么它会完全覆盖整本书而没有任何想法?
-
我正在查看 API,我没有发现您的代码有任何问题。你要关闭两个工作簿吗?
-
我更新了以上内容。在检索到测试所需的数据后,我将关闭工作簿,但我认为这不会影响正在发生的事情,因为我再次打开工作簿而不是关闭它。
-
Eureka - 使用 .close() 方法工作。但我很困惑为什么它需要关闭才能成功?信息是否位于某个缓冲区中,如果您未能关闭它,它仍保留在此缓冲区中? - 谢谢你,我很感激!
标签: java excel selenium testng jexcelapi