如何在Selenium自动化测试工具中新增Excel工作表而不覆盖原有数据?
解决方案
问题根源在于xlsxwriter仅支持创建新Excel文件,无法修改已有文件,所以每次运行都会覆盖原文件。要实现新增工作表留存历史数据的需求,改用openpyxl库即可,它支持读写已有Excel文件。
实现步骤
- 安装依赖库:
pip install openpyxl - 修改代码逻辑:先判断目标Excel文件是否存在,存在则加载,不存在则新建
- 以当前日期时间命名新工作表,写入表头和测试数据
- 保存工作簿完成新增
修改后的核心代码
from datetime import datetime from openpyxl import load_workbook, Workbook import os # 生成当前时间作为工作表名称 now = datetime.now() dt_string = now.strftime("%Y-%m-%d_%H_%M_%S") report_path = '../Report/FinalResultGUI.xlsx' # 处理文件存在/不存在的情况 if os.path.exists(report_path): workbook = load_workbook(report_path) else: workbook = Workbook() # 删除新建文件默认生成的空Sheet,避免冗余 if 'Sheet' in workbook.sheetnames: workbook.remove(workbook['Sheet']) # 创建新工作表 worksheet = workbook.create_sheet(title=dt_string) # 写入表头(openpyxl行列索引从1开始) headers = ["Name", "Test Ran", "Pass", "Failed", "Pass Percentage%", "Fail Percentage%", "Error Message"] for col_idx, header in enumerate(headers, 1): worksheet.cell(row=1, column=col_idx, value=header) row = 2 # 数据从第2行开始写入 for test_key in test_keys: res = myDict[test_key](noOfTimesCustom, targetIP, spareIP) # 逐列写入测试结果 worksheet.cell(row=row, column=1, value=res[0]) worksheet.cell(row=row, column=2, value=res[1]) worksheet.cell(row=row, column=3, value=res[2]) worksheet.cell(row=row, column=4, value=res[3]) worksheet.cell(row=row, column=5, value=res[4]) worksheet.cell(row=row, column=6, value=res[5]) # 兼容错误信息字段,避免索引越界 if len(res) >=7: worksheet.cell(row=row, column=7, value=res[6]) row +=1 # 保存工作簿,完成新增 workbook.save(report_path)
关键注意点
openpyxl的单元格索引从1开始,和原代码中xlsxwriter的0索引逻辑不同,需调整行号列号- 新建文件时默认生成的
Sheet工作表建议删除,避免多余空表干扰 - 每次运行都会在已有Excel文件中新增独立工作表,完全保留历史测试数据
- 错误信息部分做了长度判断,避免因返回值缺失导致索引越界报错
内容的提问来源于stack exchange,提问作者70id
相关产品推荐
相关产品推荐

