使用Selenium IDE执行脚本计算日期时长返回NaN问题求助
Selenium IDE日期计算返回NaN的解决方法
问题核心
脚本返回NaN的本质是构造的日期对象无效,导致getTime()方法返回NaN。即便通过echo确认变量值符合预期,但在Selenium IDE的execute script命令中,直接用模板字符串引用变量可能存在上下文注入问题,或者变量为字符串类型未显式转换为数字,最终导致Date构造函数无法生成有效日期。
修复方案
方案1:参数传递变量+显式转数字(推荐)
在execute script命令的参数栏中填入:${StartYear}, ${StartMonth}, ${EndYear}, ${EndMonth}
替换脚本为:
// 从参数获取变量并转为数字 const startYear = parseInt(arguments[0], 10); const startMonth = parseInt(arguments[1], 10) - 1; const endYear = parseInt(arguments[2], 10); const endMonth = parseInt(arguments[3], 10); // 构造有效日期对象 const startDate = new Date(startYear, startMonth, 1); const endDate = new Date(endYear, endMonth, 1); // 可选:调试用日期有效性校验 if (isNaN(startDate.getTime()) || isNaN(endDate.getTime())) { throw new Error(`无效日期:起始日期=${startDate}, 结束日期=${endDate}`); } // 计算时长 const durationInMilliseconds = endDate.getTime() - startDate.getTime(); const durationInYears = durationInMilliseconds / (1000 * 60 * 60 * 24 * 365.25); const roundedDuration = Math.round(durationInYears * 2) / 2; return roundedDuration.toString();
方案2:使用SIDE内置storedVars变量(旧版本兼容)
若你的Selenium IDE版本支持全局storedVars变量,可直接引用存储变量:
const startYear = parseInt(storedVars['StartYear'], 10); const startMonth = parseInt(storedVars['StartMonth'], 10) - 1; const endYear = parseInt(storedVars['EndYear'], 10); const endMonth = parseInt(storedVars['EndMonth'], 10); const startDate = new Date(startYear, startMonth, 1); const endDate = new Date(endYear, endMonth, 1); const durationInMilliseconds = endDate.getTime() - startDate.getTime(); const durationInYears = durationInMilliseconds / (1000 * 60 * 60 * 24 * 365.25); const roundedDuration = Math.round(durationInYears * 2) / 2; return roundedDuration.toString();
调试技巧
- 用
echo命令输出变量类型:echo ${typeof StartYear},确认变量是否为字符串(SIDE存储的变量通常为字符串,需显式转数字) - 在脚本中添加
console.log(startDate, endDate),打开浏览器开发者工具控制台,查看日期对象是否有效
内容的提问来源于stack exchange,提问作者Nathan Lane
相关产品推荐
相关产品推荐

