0

我正在使用 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中搜索用户组,以获取日志窗口中的错误详细信息。错误信息是:缺少;声明之前

有谁知道如何解析 selenium 中包含 Json 字符串的变量的内容?

4

2 回答 2

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>
于 2012-05-30T18:14:06.077 回答
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 和浏览器不显示实际存在的 html 包装:它使得很难掌握代码....即使右键单击会将源显示为 JSON 对象{ABCD...},但实际源具有预先包装的对象<pre> </pre>元素。在这里,我们使用该信息来选择元素,将其加载到 JSON 对象中,并从中提取所需的属性。

于 2016-10-24T18:49:59.203 回答