Webdriver.io测试中字符串转数字输出NaN的问题求助
Webdriver.io转换数据库返回值为NaN的问题分析与解决
核心原因
你的getUserRecords是异步函数(async),调用时没有使用await关键字,导致result1拿到的是一个Promise对象,而非实际的数据库返回值。用Number()转换Promise对象必然得到NaN。
解决步骤
1. 修改测试用例为异步函数并添加await
将测试用例的it函数改为async function,同时在调用getUserRecords前加上await,确保拿到实际的返回值:
it('Verify user records', async function () { if (browser.options.regionLength == 1) { this.skip(); } else { // 用await获取异步函数的实际返回值 const result1 = await getUserRecords('testuser'); const result2 = Number(result1, 10); console.log('User Records: ' + result2); } });
2. 额外排查点(可选)
如果修改后仍出现NaN,建议在getUserRecords中添加日志,确认数据库返回的userValue的类型和具体值:
async function getUserRecords(userLogin) { var result = {}; const query = statements.getUserTotalRecords(userLogin); console.log('~ checkDB ~ query', query); result = await db.executeQuery(query); // 添加日志确认返回值 console.log('userValue type:', typeof result[0].userValue, 'value:', result[0].userValue); return result[0].userValue; }
- 若返回的是
null/undefined/空字符串,需要检查SQL查询是否正确返回数据 - 若返回值包含非数字字符(如"23abc"),需要先清洗数据再转换
替代转换方式(可选)
除了Number(),也可以使用parseInt()或一元+操作符转换,效果一致:
const result2 = parseInt(result1, 10); // 或 const result2 = +result1;
内容的提问来源于stack exchange,提问作者QA Tester
相关产品推荐
相关产品推荐

