You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Selenium自动化测试工具中新增Excel工作表而不覆盖原有数据?

解决方案

问题根源在于xlsxwriter仅支持创建新Excel文件,无法修改已有文件,所以每次运行都会覆盖原文件。要实现新增工作表留存历史数据的需求,改用openpyxl库即可,它支持读写已有Excel文件。

实现步骤

  1. 安装依赖库:pip install openpyxl
  2. 修改代码逻辑:先判断目标Excel文件是否存在,存在则加载,不存在则新建
  3. 以当前日期时间命名新工作表,写入表头和测试数据
  4. 保存工作簿完成新增

修改后的核心代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 09:15:30