2012-05-24 45 views
0

我正在使用硒Selenese做一些功能測試。 我需要解析身體的Json內容。 這裏是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> 

但我收到以下錯誤:

Command execution failure. Please search the user group at https://groups.google.com/forum/#!forum/selenium-users for error details from the log window. The error message is: missing ; before statement

有誰知道如何解析硒中含有Json串的變量的內容?

+1

如果JSON完全是你發佈的,那麼它是無效的。 ''ab89978b -''後面的換行符是無效的,參見http://jsonlint.com/。雖然錯誤表明你在某處丟失了';',可能在''{body}''之後? –

+0

沒有json是有效的,只是複製並粘貼它,而處理縮進郵政編碼是爲什麼我這樣說 –

+0

錯誤是誤導,其他錯誤,我接近這個正確的方式嗎? –

回答

0

您需要使用storeEval而不是商店

<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> 
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> 

硒IDE &瀏覽器不顯示HTML包裝實際存在的:它使硬的代碼,把握....即使按鼠標右鍵將源顯示爲JSON對象{ABCD...}實際來源將對象預先包裝在<pre> </pre>元素中。在這裏,我們使用該信息來選擇元素,將其加載到JSON對象中,並從中提取所需的屬性。