Selenium WebDriver无法写入Excel问题排查求助
问题排查与解决方案
我仔细梳理了你的测试脚本和Excel工具类代码,找到了几个导致数据无法写入Excel的核心问题,下面逐一说明并给出修复方案:
1. 未处理工作表/行不存在的场景
你的writeStringData方法直接调用wb.getSheet(sheetName)和sheet1.getRow(row),如果目标工作表(比如Results)不存在,或者指定行还未创建,这两个方法都会返回null,后续调用createCell时会触发空指针异常。但由于代码没有显式捕获这类异常(或被上层静默处理),导致写入操作悄悄失败,却没有报错提示。
修复ExcelConfig中的writeStringData方法:
import org.apache.poi.ss.usermodel.IndexedColors; // 需要新增这个导入 public void writeStringData(String sheetName, int row, int column, String data) { // 检查工作表是否存在,不存在则创建 sheet1 = wb.getSheet(sheetName); if (sheet1 == null) { sheet1 = wb.createSheet(sheetName); } // 检查行是否存在,不存在则创建 Row valueRow = sheet1.getRow(row); if (valueRow == null) { valueRow = sheet1.createRow(row); } // 创建或获取目标单元格 Cell valueCell = valueRow.createCell(column); // 为失败状态设置红色字体样式 if (data.equals("FAILED")) { CellStyle style = wb.createCellStyle(); Font font = wb.createFont(); font.setColor(IndexedColors.RED.getIndex()); // 替换为XSSF兼容的颜色设置 style.setFont(font); valueCell.setCellStyle(style); } // 设置单元格内容 valueCell.setCellValue(data); }
2. createFile调用时机不合理
你在循环内部每次写入数据后都调用excel.createFile,虽然不会直接导致写入失败,但会重复将内存中的Workbook写入文件,既影响效率,也可能在循环中途出错时导致数据不完整。更合理的做法是在所有写入操作完成后,统一调用一次createFile,确保所有结果一次性写入Excel。
同时我注意到你原来固定写入第1行,这样循环中每次都会覆盖之前的数据,我帮你改成了对应循环的row值,让每条测试数据的结果对应写入Results工作表的对应行:
修改测试用例中的代码:
public void specMortHome() throws NoAlertPresentException, InterruptedException, IOException { // ... 原有初始化代码保持不变 ... int row = 1; while (excel.getData("PDFRollUp", row, 0) != "") { // ... 原有Web操作代码保持不变 ... String erc = specMortLoanDetails.getERC(); String ltv = specMortLoanDetails.getLTV(); // 移除循环内的createFile调用 // excel.createFile("src/test/resources/TestData.xlsx"); // 改为写入对应row的行,避免覆盖 excel.writeStringData("Results", row, 1, erc); excel.writeStringData("Results", row, 2, ltv); // ... 原有登出代码保持不变 ... row++; } // 所有循环完成后,统一写入文件 excel.createFile("src/test/resources/TestData.xlsx"); driver.quit(); }
3. 潜在的文件加载异常风险
你的ExcelConfig构造函数仅捕获异常并打印模糊提示,但没有处理wb为null的情况,如果文件加载失败,后续所有Excel操作都会静默出错。建议优化构造函数,明确抛出异常便于排查:
优化ExcelConfig构造函数:
public ExcelConfig(String Excelpath) throws IOException { File src = new File(Excelpath); try (FileInputStream fis = new FileInputStream(src)) { wb = new XSSFWorkbook(fis); } catch (FileNotFoundException e) { throw new IOException("Excel文件未找到:" + Excelpath, e); } catch (IOException e) { throw new IOException("加载Excel文件失败,请检查文件格式是否正确", e); } }
测试验证
修复完成后,你可以:
- 确保
TestData.xlsx中Results工作表不存在(或存在但对应行为空) - 运行测试用例,查看
Results工作表是否成功写入每条测试数据对应的erc和ltv值
内容的提问来源于stack exchange,提问作者SteveL




