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

如何在Robot Framework中向Execute Javascript关键字传递JSON变量

解决Robot Framework中Execute Javascript传递JSON变量的TypeError问题

我来帮你搞定这个问题!你遇到的TypeError: 'NoneType' object is not iterable,主要是两个小细节没处理好,咱们逐个解决:

问题1:变量名大小写不匹配

JavaScript是严格区分大小写的!你代码里定义的是jsonData(驼峰写法),但后面访问的却是jsondata(全小写),这会导致jsondata是undefined,再去访问它的segments属性自然就得到了null/undefined,最终触发这个错误。

问题2:JSON变量传递方式不正确

直接用单引号包裹${body}会有两个隐患:

  • 如果${body}本身包含单引号、换行等特殊字符,会直接破坏JS的字符串语法;
  • 这样传递的是字符串类型,不是JS能直接操作的JSON对象,必须先解析。

给你两种靠谱的解决方案:

方案一:直接传递Python字典(推荐)

如果你的${body}在Robot里已经是Python字典格式(比如从接口返回后转成了字典),可以直接把它作为参数传给Execute Javascript,JS会自动把它转换成原生对象:

# 假设${body}是已经构造好的字典
Execute Javascript    var jsonData = arguments[0]; var count = console.log(Object.keys(jsonData.segments).length);    ${body}

这里arguments[0]就是Robot传递过来的${body}字典,直接用就行,完全不用手动处理字符串转义。

方案二:如果${body}是JSON字符串,先解析再使用

如果你的${body}是JSON格式的字符串,那需要先转义特殊字符,再用JSON.parse()解析成JS对象:

Execute Javascript    var jsonStr = '${body}'.replace(/'/g, "\\'"); var jsonData = JSON.parse(jsonStr); var count = console.log(Object.keys(jsonData.segments).length);

replace(/'/g, "\\'")会把字符串里的单引号都转义成\',避免破坏JS的字符串结构,之后解析成对象就能正常访问segments了。


额外检查点

  • 先在Robot里用Log关键字打印${body},确认它确实包含segments字段,而且这个字段的值是一个非空的对象;
  • 如果${body}是从接口返回的响应,记得用Convert To Dictionary关键字把响应转换成Python字典,这样传递给JS时更稳定。

内容的提问来源于stack exchange,提问作者indrajit narvekar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:09:37