Selenium测试,从变量解析Json字符串

时间:2012-05-24 23:29:31

标签: json selenium

我正在使用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中变量的内容?

2 个答案:

答案 0 :(得分:0)

您需要使用storeEval而不是store

<tr>
    <td>store</td>
    <td>{&quot;access_token&quot;: &quot;ab89978b-74a1-41a6-81e7-7b520ea9d29f&quot;, &quot;token_type&quot;: &quot;bearer&quot;, &quot;refresh_token&quot;: &quot;38a3a34b-09c9-452e-b05b-6903770a877f&quot;, &quot;expires_in&quot;: 1799, &quot;scope&quot;: &quot;read&quot;}</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对象中,并从中提取所需的属性。