Robot Framework中如何执行返回Promise的JS方法并获取结果?
在Robot Framework中处理返回Promise的JavaScript方法
当然可以!而且完全不用靠Sleep硬等这种低效又不稳定的方式——Robot Framework其实原生支持直接等待Promise解析并返回结果,下面给你讲讲正确的做法:
直接让Execute Javascript等待Promise完成
Robot的Execute Javascript关键字会自动识别返回的Promise对象,并等待它resolve后再返回结果。所以你不需要额外加Sleep,直接这么写就可以:
${result}= Execute Javascript return runAllTests();
这里runAllTests()返回的Promise会被Robot自动处理,等它完成后,${result}就会拿到Promise resolve后的结果。
如果需要分步处理(比如先执行Promise,再做其他操作)
如果你的场景需要先触发Promise,再执行一些其他浏览器操作,之后再获取结果,那可以用JavaScript的async/await语法来明确等待:
${result}= Execute Javascript return await runAllTests();
或者用then()链式调用的方式:
${result}= Execute Javascript return runAllTests().then(finalResult => finalResult);
这两种写法都能让Robot正确等待Promise完成,避免不确定的Sleep等待时间。
处理Promise可能reject的情况
如果你的Promise有抛出错误的可能,可以在JavaScript里加try/catch做错误捕获,这样能让测试更健壮:
${result}= Execute Javascript ... try { ... return await runAllTests(); ... } catch (error) { ... return { status: 'error', message: error.message }; ... }
之后你就可以在Robot里判断${result}的状态,处理错误场景。
为什么不推荐用Sleep的方式?
你之前尝试的Sleep方法最大的问题是不确定性:不同环境下Promise执行时间可能不一样,Sleep时间设短了可能还没完成,设长了又浪费测试时间,很容易导致测试不稳定。而让Robot自动等待Promise完成,是更可靠高效的方案。
内容的提问来源于stack exchange,提问作者Mateusz Cisek
相关产品推荐
相关产品推荐

