You need to enable JavaScript to run this app. 如何将Excel读取的日期转换为TestCafe可正常输入的合法字符串
优惠活动
大模型
产品
解决方案
定价
更多

如何将Excel读取的日期转换为TestCafe可正常输入的合法字符串

Excel日期数据适配TestCafe输入解决方案

问题根因

  • Excel底层默认将日期存储为以1900年1月1日为第1天的数字序列,你读取到的44416这类值就是原始序列值,直接转字符串无法匹配表单输入要求
  • 常规Excel读取库默认返回单元格原始值而非显示格式的字符串,你设置8/20/2021格式后读取到undefined,是因为工具没有做自动转换,或者列名映射/单元格空值导致的取值异常

处理步骤

1. 配置Excel读取工具自动转换日期为JS Date对象

常用的Excel读取库都支持直接转换日期序列值为标准JS Date对象,无需手动计算:

  • 若使用xlsx库,读取文件时开启cellDates: true配置即可自动转换:
const XLSX = require('xlsx')
// 核心配置项cellDates设为true
const workbook = XLSX.readFile('回归测试用例.xlsx', { cellDates: true, raw: false })
const testDataSheet = XLSX.utils.sheet_to_json(workbook.Sheets['测试数据'])
  • 若使用exceljs库,直接读取单元格的value属性即可自动得到Date类型值

2. 封装日期格式化工具适配表单输入要求

拿到Date对象后,根据你的表单支持的输入格式(比如MM/DD/YYYY、YYYY-MM-DD等),封装统一格式化方法,避免依赖Excel单元格格式导致的环境差异:

// 示例:转换为MM/DD/YYYY格式的字符串,可根据你的表单要求修改格式
function formatDateForInput(date) {
  // 异常值判断,避免传入undefined触发TestCafe报错
  if (!date || !(date instanceof Date) || isNaN(date.getTime())) {
    throw new Error('无效的日期数据,请检查Excel对应单元格内容')
  }
  const month = String(date.getMonth() + 1).padStart(2, '0')
  const day = String(date.getDate()).padStart(2, '0')
  const year = date.getFullYear()
  return `${month}/${day}/${year}`
}

3. 修改TestCafe输入逻辑

修改报错的typeText调用代码,传入格式化后的日期字符串:

await t
  .click(staffMembers.startDateField)
  .pressKey('delete '.repeat(11).trim()) // 简化清空逻辑,效果和你原来的11次delete一致
  .typeText(staffMembers.startDateField, formatDateForInput(data.StartDate))

undefined报错额外排查点

如果修改后还是出现text参数为undefined的报错,优先检查以下两点:

  • 对应测试用例行的StartDate列单元格是否为空
  • Excel转JSON时的列名映射是否正确,data.StartDate的字段名是否和Excel表头完全一致(大小写、空格都会导致取值异常)

内容的提问来源于stack exchange,提问作者Brandon Short

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 00:15:01