我正在使用Selenium Selenese进行一些功能测试。 我需要解析身体的Json内容。 这是json:
{"access_token":"ab89978b-
74a1-41a6-81e7-7b520ea9d29f","token_type":"bearer","refresh_token":"38a3a34b-09c9-452e-
b05b-6903770a877f","expires_in":1799,"scope":"read"}
我正在使用以下Selenese命令:
<tr>
<td>store</td>
<td>
javascript{
var jsonstr = '${body}'
var obj=JSON.parse(jsonstr);
var token=obj.access_token;
}
</td>
<td>token</td>
</tr>
但是我收到以下错误:
命令执行失败。请从https://groups.google.com/forum/#!forum/selenium-users搜索用户组,以获取日志窗口中的错误详细信息。错误消息是:missing;在陈述之前
有谁知道如何解析包含Json字符串的selenium中变量的内容?
答案 0 :(得分:0)
您需要使用storeEval而不是store
<tr>
<td>store</td>
<td>{"access_token": "ab89978b-74a1-41a6-81e7-7b520ea9d29f", "token_type": "bearer", "refresh_token": "38a3a34b-09c9-452e-b05b-6903770a877f", "expires_in": 1799, "scope": "read"}</td>
<td>json</td>
</tr>
<tr>
<td>echo</td>
<td>${json}</td>
<td></td>
</tr>
<tr>
<td>storeEval</td>
<td>var x = '${json}'; var obj=JSON.parse(x); obj.access_token;</td>
<td>bam</td>
</tr>
<tr>
<td>echo</td>
<td>${bam}</td>
<td></td>
</tr>
答案 1 :(得分:0)
我在这个问题上遇到了一些困难所以我想我会添加自己的解决方案,它建立在这里提供的解决方案的基础上,可能会帮助那些试图让JSON对象自行解决的问题:
<tr>
<td>open</td>
<td>/YOURURL/</td>
<td></td>
</tr>
<tr>
<td>storeText</td>
<td>css=pre:contains("ELEMENTATTRIBUTEYOUWANTTOGRAB")</td>
<td>json</td>
</tr>
<tr>
<td>echo</td>
<td>${json}</td>
<td></td>
</tr>
<tr>
<td>storeEval</td>
<td>var x = '${json}'; var obj=JSON.parse(x); obj.ELEMENTATTRIBUTEYOUWANTTOGRAB;</td>
<td>AC</td>
</tr>
<tr>
<td>echo</td>
<td>${AC}</td>
<td></td>
</tr>
Selenium IDE&amp;浏览器没有显示实际存在的html包装:它使得很难掌握代码....即使右键单击会将源显示为JSON对象{ABCD...}
,实际的源包含预先包装的对象在<pre> </pre>
元素中。在这里,我们使用该信息选择元素,将其加载到JSON对象中,并从中提取所需的属性。