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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 18:05:06